MySQLのアカウント管理 — ユーザーの追加と権限の付与

この記事ではMySQLサーバーへユーザーを追加して、権限を付与する基本的な内容を解説します。MySQLサーバーを構築したら最初に実施することなので、基本的なことは理解しておきましょう。

権限の付与についてはセキュリティに直結しますので、本番で使用する場合はドキュメントを熟読して、どのユーザーにどのような権限を付与するのきちんと設計する必要があります。

目次

アカウント(ユーザー)の追加

ここではMySQLサーバーへアカウントを追加する方法について解説します。

ユーザーとアカウントは同義の意味で使われることもありますが、この記事ではアカウントという用語を使います。

アカウントを作成するには「CREATE USER」を使います。

CREATE USER 'taro'@'localhost'
  IDENTIFIED BY 'password';

これは ‘taro’@’localhost’ というアカウントを作成します。「IDENTIFIED BY」にはアカウントのパスワードを指定します。

ユーザー追加のポイントはアカウント名(’taro’@’localhost’ )の指定の仕方ですので、それについて詳しく説明します。

MySQLのアカウント名

MySQLのアカウント名は、ユーザー名とホスト名から構成されます。形式は次のとおりです。

'user_name'@'host_name'

ユーザー名が同じでも、ホスト名が異なれば別のアカウントとして扱われます。アカウント名の例を次に示します。

'taro'@'localhost'
'taro'@'foo.example.com'
'hanako'@'192.168.56.1'

host_name は接続元のクライアントのホストを表します。host_name には「ホスト名」または「IPアドレス」を指定することができます。「localhost」はローカルホストを表します。したがって、この例では ローカルマシンか foo.example.com という名前のホストからユーザー名taroでMySQLサーバーへ接続でき、192.168.56.1 のIPアドレスのホストからhanakoというユーザー名で接続できます。

user_name と host_name はシングルクウォート(’)、ダブルクウォート(”)、バッククウォート(`)で囲みます。ただし、ユーザー名に特殊文字(スペースやハイフンなど)が含まれていない場合、あるいはホスト名に特殊文字やワールドカード文字が含まれていない場合は、それらで囲む必要はありません。

ユーザー名とホスト名は別々にそれぞれ引用符で囲みます。’user_name@host_name’ のように囲むと@以降が省略されていると見なされ、’user_name@host_name’@% と解釈されてしまいます。

host_name に指定する「ホスト名」または」IP アドレス」にはワイルドカード文字(%と_)が使えます。それぞれのワイルドカード文字の意味は次のとおりです。

  • 「%」は0文字以上の任意の文字列に一致します。
  • 「_」は任意の1文字に一致します。

次はワイルドカードを使う例です。

'%.example.com'
'198.168.100.%'

1つ目は「.example.com」で終わるすべてのホスト名を表します。2つ目は「198.168.100.」で始まるすべてのIPアドレスを表します。

権限の付与

ユーザーを作成したら権限を付与します。権限を付与するには「GRANT」を使います。

GRANT ALL
  ON *.*
  TO 'taro'@'localhost'
  WITH GRANT OPTION;

この例の意味は次のとおりです。

  • GRANTに指定している「ALL」は、GRANT OPTION権限およびPROXY権限を除く、すべての権限を表します。
  • ON には操作対象を指定します。「*.*」はすべてのデータベースのすべてのテーブルを表します。
  • TO には権限を付与するアカウント名を指定します。
  • 「 WITH GRANT OPTION」を付けると、この権限を付与されたユーザーが、他のユーザーに権限を付与できるようになります。

その他、いくつか例を示します。

GRANT ALL
  ON db1.*
  TO 'jiro'@'localhost'

‘jiro’@’localhost’ は、db1データベースに対してすべての操作ができる権限が付与されます。

GRANT ALL
  ON db1.tb1
  TO 'hanako'@'localhost'

‘hanako’@’localhost’ は、db1データベースのtb1テーブルに対してすべての操作ができる権限が付与されます。

ユーザーに付与された権限は次の文で確認できます。

mysql> SHOW GRANTS FOR 'taro'@'localhost';

アカウントの削除

アカウントは次の文で削除できます。

mysql> DROP USER 'hanako'@'192.168.56.1';

おわりに

ここではアカウント管理の基本的な内容を説明しました。権限の付与についてはざっくりと説明しましたが、実際には権限はきめ細かく指定することができます。詳しくはドキュメントを参照ください。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

・PM、SE、SIなどを20年以上経験
・ネットワークスペシャリスト、セキュリティスペシャリストなど複数の資格を保有

目次