はじめに
MySQL でデータベースの作成からデータベースユーザーの作成とアクセス権限の付与、はよく実行するので覚えているのですが、反対の操作、つまりデータベースアクセス権限の削除、データベースユーザーの削除、データベースの削除を忘れがちになるのでメモしておきます。
一番ややこしく感じさせるのは、作成時は 2 コマンドでできるのに対して、削除時は 3 コマンドが必要になる、というところでしょうか。
作成時のコマンド
$ mysql -u root
(データベース作成)
> CREATE DATABASE dbname;
(データベースユーザー作成とアクセス権限付与)
> GRANT ALL PRIVILEGES ON dbname.* TO dbuser@'localhost' IDENTIFIED BY 'dbpassword';
ちなみに、作成時も3コマンドで対応することができます。
$ mysql -u root
(データベース作成)
> CREATE DATABASE dbname;
(データベースユーザー作成)
> CREATE USER dbuser@'localhost' IDENTIFIED BY 'dbpassword';
(データベースに対するユーザーのアクセス権限付与)
> GRANT ALL PRIVILEGES ON dbname.* TO dbuser@'localhost;
削除時のコマンド
$ mysql -u root
(アクセス権限の剥奪)
> REVOKE ALL PRIVILEGES ON dbname.* FROM dbuser@'localhost';
(適用)
> FLUSH PRIVILEGES;
(データベースユーザーの削除)
> DROP USER dbuser@'localhost';
(データベースの削除)
> DROP DATABASE dbname;
登録されている各情報の確認方法
管理文書などでしっかり管理出来ていればいいのですが、あいにく現物を見るしかない、という状況もよくあります。このようなときに、どんなデータベースやユーザーが登録されているのか確認する方法を紹介します。
データべース
$ mysql -u root
(データベース一覧)
> SHOW DATABASES;
データベースユーザー
この一覧から、登録済みのデータベースユーザーのユーザ名とホスト名のペア ( dbuser@’localhost’ の部分 ) を確認できます。
$ mysql -u root
(データベースユーザー一覧)
> SELECT user, host, password FROM mysql.user;
アクセス権限
どのデータベースユーザーがどのデータベースにアクセスできるのかを簡単に確認するには、次の SQL 文を使用します。
$ mysql -u root
(データベースユーザーと、そのユーザーがアクセスできるデータベースの一覧)
> SELECT user, host, db FROM mysql.db;
さらに詳しい権限の内訳を調べるには、上記結果から user, host, db のうち任意の条件を指定すると、余計なレコードが表示されず、目的の情報のみ表示できます。
SQL 文の最後、「;」ではなく「\G」を付けると、表形式から1レコード毎に Key-Value 形式で表示でき、見やすくなります。
$ mysql -u root
(データベースユーザーと、そのユーザーがアクセスできるデータベースの一覧)
> SELECT * FROM mysql.db WHERE user = 'dbuser' AND host = 'localhost' AND db = 'dbname' \G
(結果サンプル)
*************************** 1. row ***************************
Host: localhost
Db: dbname
User: dbuser
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Grant_priv: N
References_priv: Y
Index_priv: Y
Alter_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Execute_priv: Y
1 row in set (0.00 sec)
ピンバック: 【MySQL】homebrewでmysqlを扱う | apurimake