新しいユーザ権限を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() 関数は必要ありません。両方とも、自動的にパスワードを暗号化します。