普段MySQLを使うとき、何気なくユーザ名とパスワードを入力してMySQLを使用していますが、ふとMySQLのユーザについて考えてみたのでいろいろやってみることにしました。今回はユーザへのパスワード設定とユーザ追加・削除についてまとめました。
パスワード設定
初期状態では$ mysql -u root
とするだけでMySQLに入れますが、このrootユーザにパスワードをつけようと思います。
まず
$ mysql -u root
でMySQLに入ります。次に
> use mysql;
を実行し、
set password for root@localhost=PASSWORD('this_password');
を実行します。
- this_passwordをお好きなパスワードに変えて実行してください。
「Query OK」が出たらパスワード設定成功です。次からは -p(パスワードオプション)つきでMySQLに入れます。
ちなみに、this_passwordを空欄('')のまま実行すると、パスワードなしの状態に戻ります。
ユーザ追加
次に新しくMySQLを使用するユーザを作成してみました。MySQLに入り、以下を実行します。
mysql> grant all privileges on *.* to newuser@localhost identified by 'new' with grant option;
上記はall privileges(全ての実行権限)を全てのDB上の全てのテーブル上で持つ、パスワード「new」が設定されたユーザ「newuser」を作成します、という意味になります。
特定の実行権限だけを渡すこともできます。
例えば、selectのみを許可する場合は all privilegesの部分を「select」に変えてください。
同様に、updateのみの場合は all privilegesの部分を「update」に変えてください。
複数指定もできます。selectとupdate権限を渡す場合は、「select, update」のようにカンマで区切って実行することで複数の実行権限を渡すことができます。
権限確認
ユーザが保持する権限を確認する場合は以下を実行してください。以下は先ほど作成したnewuserの権限を確認するものです。mysql> show grants for newuser@localhost ¥G
を実行すると
*************************** 1. row ***************************
Grants for newuser@localhost: GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost' IDENTIFIED BY PASSWORD '*6FE2B845E049CDA9EFED8CFAF265CD29622FD852' WITH GRANT OPTION
1 row in set (0.00 sec)
のように権限の状況が表示されます。
権限を剥奪する
ユーザから権限を奪う場合は以下を実行します。revoke 権限 on DB.テーブル from ユーザ名@ホスト名;
例:以下はnewuser@localhostのselect実行権限を剥奪するものです。
revoke select on *.* from newuser@localhost;
全ての権限を奪いたいときは上記の「select」を「all privileges」に変えて実行してください。
権限追加
逆にユーザに権限を追加する場合は
grant 与えたい権限 on DB.テーブル to ユーザ名@ホスト名;
を実行してください。下記の例は上記はnewuser@localhostに全てのDB上でのCREATE文の実行権限を与える、という意味になります。
grant create on *.* to newuser@localhost;
ユーザ削除
ユーザ削除するには以下を実行します。
delete from mysql.user where user='ユーザ名' AND host='ホスト名';
newuser@localhostを削除するには
delete from mysql.user where user='newuser' AND host='localhost';
を実行します。