ユーザの追加には、2
つの方法があります。GRANT
ステートメントを使用する方法と、MySQL
権限テーブルを直接操作する方法です。正確でエラーが発生しにくい
GRANT
ステートメントの使用を推奨します。 See
項4.4.1. 「GRANT
および REVOKE
の構文」。
ユーザの作成および管理に使用できるコントリビューションプログラムもいくつかあります(phpMyAdmin
など)。
以下の例では、mysql
クライアントを使用して新規ユーザを設定する方法を示します。この例では、前のセクションで説明したデフォルト設定に従って権限がセットアップされていることを前提にしています。そのため変更を行うには、mysqld
を実行しているマシンにログインしていること、MySQL
root
ユーザとして接続していること、root
ユーザに mysql
データベースに対する INSERT
権限と RELOAD
管理者権限があることが必要条件となります。また、root
ユーザパスワードを変更している場合、ここで、mysql
コマンドを使用してそのパスワードを指定する必要があります。
まず、mysql
プログラムを使用してサーバに MySQL
root
ユーザとして接続します。
shell> mysql --user=root mysql
次に、GRANT
ステートメントを実行して新規ユーザを追加できます。
mysql>GRANT ALL PRIVILEGES ON *.* TO monty@localhost
->IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql>GRANT ALL PRIVILEGES ON *.* TO monty@'%'
->IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql>GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
mysql>GRANT USAGE ON *.* TO dummy@localhost;
これらの GRANT
ステートメントでは、以下の 3
人の新規ユーザが追加されます。
monty
どこからでもサーバに接続できる完全なスーパーユーザ。ただし、パスワード
'some_pass'
の使用が必要。注意:
GRANT
ステートメントを
monty@localhost
と
monty@"%"
の両方に対して発行することが必要である。localhost
のエントリを追加しないと、ローカルホストから接続したとき、mysql_install_db
によって作成された localhost
のエントリの方が、Host
フィールド値がより具体的であり、user
テーブルのソート順序で上位になるため優先されることになる。
admin
localhost
からパスワードなしで接続でき、RELOAD
および PROCESS
の管理権限のあるユーザ。このユーザは、mysqladmin
reload
、mysqladmin
refresh
、mysqladmin flush-*
の各コマンド、および mysqladmin
processlist
を実行できる。データベースレベルの権限は設定されていない(GRANT
ステートメントを実行して後で追加できる)。
dummy
パスワードなしでローカルホストからのみ接続できるユーザ。権限は設定されていない。USAGE
権限タイプにより、このような権限なしのユーザを作成できる。これは、すべてのグローバル権限を
'N'
に設定するのと同じことである。これは、後でこのアカウントに固有の権限を設定することを想定している。
INSERT
ステートメントを発行してサーバに権限テーブルを再度読み込ませることにより、同じユーザアクセス情報を直接追加することもできます。
shell>mysql --user=root mysql
mysql>INSERT INTO user VALUES('localhost','monty',PASSWORD('some_pass'),
->'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql>INSERT INTO user VALUES('%','monty',PASSWORD('some_pass'),
->'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql>INSERT INTO user SET Host='localhost',User='admin',
->Reload_priv='Y', Process_priv='Y';
mysql>INSERT INTO user (Host,User,Password)
->VALUES('localhost','dummy','');
mysql>FLUSH PRIVILEGES;
MySQL バージョンによっては、上記
'Y'
値の数が違う場合があります(3.22.11
より前のバージョンでは権限カラムが少なく、4.0.2
以降では多くなります)。admin
ユーザに対しては、バージョン 3.22.11
以降で利用可能になった SET
を使用する拡張 INSERT
構文が使用されています。
注意:
スーパーユーザを設定する場合は、権限フィールドを
'Y'
に設定した user
テーブルエントリを作成するだけで済みます。db
テーブルや host
テーブルのエントリは必要ありません。
最後の INSERT
ステートメント(dummy
ユーザ)では、user
テーブルレコードの
Host
、User
、および
Password
カラムだけが値を割り当てられています。権限カラムはどれも明示的に設定されていないため、MySQL
はこれらすべてにデフォルト値の
'N'
を設定します。これは、GRANT USAGE
と同じ機能です。
以下の例では、ユーザ custom
を追加します。このユーザは
bankaccount
データベースにはローカルホストからのみ、expenses
データベースにはホスト
whitehouse.gov
からのみ、customer
データベースにはホスト
server.domain
からのみアクセスできるとします。3
つのホストすべてでパスワード
obscure
を使用します。
GRANT
ステートメントを使用してこのユーザの権限を設定するには、以下のコマンドを実行します。
shell>mysql --user=root mysql
mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
->ON bankaccount.*
->TO custom@localhost
->IDENTIFIED BY 'obscure';
mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
->ON expenses.*
->TO custom@'whitehouse.gov'
->IDENTIFIED BY 'obscure';
mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
->ON customer.*
->TO custom@'server.domain'
->IDENTIFIED BY 'obscure';
権限テーブルを直接変更してユーザの権限を設定するには、以下のコマンドを実行します(注意:
最後の FLUSH PRIVILEGES
に注目)。
shell>mysql --user=root mysql
mysql>INSERT INTO user (Host,User,Password)
->VALUES('localhost','custom',PASSWORD('obscure'));
mysql>INSERT INTO user (Host,User,Password)
->VALUES('whitehouse.gov','custom',PASSWORD('obscure'));
mysql>INSERT INTO user (Host,User,Password)
->VALUES('server.domain','custom',PASSWORD('obscure'));
mysql>INSERT INTO db
->(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
->Create_priv,Drop_priv)
->VALUES
->('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y');
mysql>INSERT INTO db
->(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
->Create_priv,Drop_priv)
->VALUES
->('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y');
mysql>INSERT INTO db
->(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
->Create_priv,Drop_priv)
->VALUES('server.domain','customer','custom','Y','Y','Y','Y','Y','Y');
mysql>FLUSH PRIVILEGES;
INSERT
ステートメントを使用した前の例と同様、MySQL
のバージョンによっては 'Y'
の値の数が異なります。
最初の 3 つの INSERT
ステートメントは user
テーブルエントリを追加し、ユーザ
custom
がさまざまなホストから指定のパスワードで接続できるようにしますが、権限については何も設定していません(権限はすべて、デフォルト値の
'N'
に設定されています)。次の 3
つの INSERT
ステートメントは、db
テーブルエントリを追加し、custom
に
bankaccount
、expenses
、customer
の各データベースに対する権限を設定します。これらの権限は、適切なホストからアクセスしたときにだけ適用されるものです。権限テーブルを直接変更した場合、FLUSH
PRIVILEGES
を使用してサーバに権限テーブルを再度読み込ませ、権限の変更を反映させる必要があります。
特定のユーザに、あるドメイン(たとえば
mydomain.com
)のすべてのマシンからのアクセスを許可するには、以下のような
GRANT
ステートメントを実行します。
mysql>GRANT ...
->ON *.*
->TO myusername@'%.mydomain.com'
->IDENTIFIED BY 'mypassword';
権限テーブルを直接変更して同じことを行うには、以下を実行します。
mysql>INSERT INTO user VALUES ('%.mydomain.com', 'myusername',
->PASSWORD('mypassword'),...);
mysql>FLUSH PRIVILEGES;
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.