この記事では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 はシングルクウォート(’)、ダブルクウォート(”)、バッククウォート(`)で囲みます。ただし、ユーザー名に特殊文字(スペースやハイフンなど)が含まれていない場合、あるいはホスト名に特殊文字やワールドカード文字が含まれていない場合は、それらで囲む必要はありません。
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';
おわりに
ここではアカウント管理の基本的な内容を説明しました。権限の付与についてはざっくりと説明しましたが、実際には権限はきめ細かく指定することができます。詳しくはドキュメントを参照ください。