MySQLで全データベースを表示する権限(SHOW DATABASES)の確認と取り消し方法
MySQLのSHOW DATABASES権限とは
MySQLでは、ユーザーがSHOW DATABASESコマンドですべてのデータベースを一覧表示できるかどうかは、グローバル権限「SHOW DATABASES」の有無によって制御されています。この権限を持たないユーザーは、自身がアクセス権限を持つデータベースしか表示できません。
特定のユーザーからこの権限を取り消すには、REVOKE文を使用します。基本の構文は以下のとおりです。
REVOKE SHOW DATABASES ON *.* FROM 'yourUserName'@'yourHostName';
ユーザー名とホスト名の一覧を確認する
まず、対象ユーザーのアカウント名とホスト名を確認しておきましょう。次のクエリで、MySQLに登録されているすべてのユーザーとホストを一覧表示できます。
mysql> SELECT user, host FROM mysql.user;
実行結果の例:
+------------------+-----------+ | user | host | +------------------+-----------+ | Bob | % | | Charlie | % | | Robert | % | | User2 | % | | mysql.infoschema | % | | mysql.session | % | | mysql.sys | % | | root | % | | @UserName@ | localhost | | Adam | localhost | | Adam Smith | localhost | | Chris | localhost | | David | localhost | | James | localhost | | John | localhost | | John Doe | localhost | | Michael | localhost | | Mike | localhost | | User1 | localhost | | am | localhost | | hbstudent | localhost | | mysql.infoschema | localhost | | mysql.session | localhost | +------------------+-----------+ 23 rows in set (0.00 sec)
特定ユーザーの権限を確認する
続いて、対象ユーザーに現在付与されている権限をSHOW GRANTS文で確認します。ここでは例として「John@localhost」の権限を確認します。
mysql> SHOW GRANTS FOR 'John'@'localhost';
実行結果の例:
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for John@localhost | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `John`@`localhost` | | GRANT BACKUP_ADMIN,BINLOG_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,GROUP_REPLICATION_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SET_USER_ID,SYSTEM_VARIABLES_ADMIN,XA_RECOVER_ADMIN ON *.* TO `John`@`localhost` | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.07 sec)
出力に「SHOW DATABASES」が含まれていることから、John@localhostには現時点で全データベースを一覧表示できる権限が付与されていることがわかります。
SHOW DATABASES権限を取り消す
それでは、REVOKE文を使って「John@localhost」からSHOW DATABASES権限を実際に取り消してみましょう。
mysql> REVOKE SHOW DATABASES ON *.* FROM 'John'@'localhost';
Query OK, 0 rows affected (0.18 sec)
これにより、John@localhostがSHOW DATABASESを実行しても、アクセス権限を持つデータベースだけが表示されるようになります。なお、権限の変更は新しい接続から反映されるため、該当ユーザーがすでにログインしている場合は再接続が必要になる点に注意してください。
-
MySQLサーバー上のすべてのデータベース・すべてのテーブルにSELECT権限を付与する方法
MySQLですべてのデータベース・すべてのテーブルにSELECT権限を付与するには?MySQLサーバー上のすべてのデータベースのすべてのテーブルに対してSELECT権限を付与したい場合は、GRANT SELECTステートメントを使用します。対象にワイルドカード「*.*」を指定することで、サーバー上の全データベース・全テーブルが一括して権限付与の対象となります。基本構文GRANT SELECT ON *.* TO yourUserName@yourHostName;手順1:既存ユーザーとホストの一覧を確認するまず、mysql.userテーブルを参照して、登録されているユーザー名とホストの一覧を確
-
MySQLでデータベースの一覧を取得する方法を解説
MySQLでデータベースの一覧を取得するにはMySQLに存在するデータベースの一覧を取得したい場合、information_schema.schemata テーブルを利用する方法が便利です。このテーブルには、サーバー内のすべてのスキーマ(データベース)に関する情報が格納されています。基本構文データベースの一覧を返すための基本構文は以下の通りです。SELECT schema_name AS 任意の別名 FROM information_schema.schemata;schema_name カラムには各データベースの名前が保存されているため、これを選択することで一覧を取得できます。AS 句を使え