MySQL運営ガイド

ユーザ権限の設定

新しいユーザ権限をMySQLへ追加

GRANTでユーザー登録

SQLでデータベース用のアカウントを作成するには、GRANT構文を使います。GRANT構文は、アカウントにテーブルやビューに関する特定の権限を設定します。

MySQLにログイン
mysql -u root -p
Enter password: ****
spadminユーザの作成
GRANT ALL PRIVILEGES ON *.* TO spadmin@localhost
IDENTIFIED BY 'パスワード' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO spadmin@"%"
IDENTIFIED BY 'パスワード' WITH GRANT OPTION;
guestユーザの作成
GRANT USAGE ON *.* TO guest@localhost;

上記GRANT構文では3つの新しいユーザを作成しています。

spadmin
spadminは、どのドメインからでも接続できる完全なスーパーユーザとして設定しています。

spadmin@localhostと、全てのドメイン名にマッチするspadmin@"%"の両方にGRANT構文を発行します。

guest
mysqlクライアントプログラムを利用できますが、データベースへの変更などの処理を許可していません。

localhostからのみ接続できるユーザーです。パスワードは必要ありません。

GRANT構文でユーザーの権限を定義

GRANT構文で任意のドメインに対してアカウントの権限を定義することができます。アカウント名の後に@をつけて、その後に設定したいドメイン名を指定します。次の例では、customユーザーに対して、db1データーベースにはlocalhostからの接続のみを許可し、db2データベースにはexsample.jpからのみ接続が許可、db3データベースには全てのホストからの接続を許可しています。

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON db1.* TO custom@localhost IDENTIFIED BY 'パスワード';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON db2.* TO custom@exsample.jp IDENTIFIED BY 'パスワード';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON db3.* TO custom@'%' IDENTIFIED BY 'パスワード';

パスワードの設定法

INSERTかUPDATEで空ではないパスワードを設定する場合、暗号化するためにPASSWORD()関数を使用します。これはuserテーブルはプレーンテキストでなく、暗号化されたパスワードであることを要求しているからです。

SET PASSWORD構文を使用する

SET PASSWORD FOR ユーザ名@"%" =
PASSWORD('パスワード');

GRANT ... IDENTIFIED BY構文やmysqladmin passwordコマンドでパスワードを設定した場合は、PASSWORD() 関数は必要ありません。両方とも、自動的にパスワードを暗号化します。

関連記事