MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
SHOW GRANTS [FORuser_or_role
[USINGrole
[,role
] ...]]user_or_role
: {user
(see セクション6.2.4「アカウント名の指定」) |role
(see セクション6.2.5「ロール名の指定」. }
このステートメントは、MySQL ユーザーアカウントまたはロールに割り当てられている権限およびロールを、権限およびロールの割当てを複製するために実行する必要がある GRANT
ステートメントの形式で表示します。
MySQL アカウントの非権限情報を表示するには、SHOW CREATE USER
ステートメントを使用します。 セクション13.7.7.12「SHOW CREATE USER ステートメント」を参照してください。
SHOW GRANTS
には、mysql
システムスキーマに対する SELECT
権限が必要ですが、現行ユーザーの権限およびロールは表示されません。
SHOW GRANTS
のアカウントまたはロールに名前を付けるには、GRANT
ステートメントと同じ形式 ('jeffrey'@'localhost'
など) を使用します:
mysql> SHOW GRANTS FOR 'jeffrey'@'localhost';
+------------------------------------------------------------------+
| Grants for jeffrey@localhost |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `jeffrey`@`localhost` |
| GRANT SELECT, INSERT, UPDATE ON `db1`.* TO `jeffrey`@`localhost` |
+------------------------------------------------------------------+
ホスト部分を省略すると、デフォルトで'%'
に設定されます。 アカウント名およびロール名の指定の詳細は、セクション6.2.4「アカウント名の指定」 および セクション6.2.5「ロール名の指定」 を参照してください。
現在のユーザー (サーバーへの接続に使用しているアカウント) に付与されている権限を表示するには、次のいずれかのステートメントを使用できます:
SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER; SHOW GRANTS FOR CURRENT_USER();
実行者権限ではなく定義者権限で実行されるストアドプロシージャ内など、定義者コンテキストで SHOW GRANTS FOR CURRENT_USER
(または同等の構文) が使用されている場合、表示される権限は実行者ではなく定義者の権限付与です。
以前のシリーズと比較した MySQL 8.0 では、SHOW GRANTS
のグローバル権限出力に ALL PRIVILEGES
が表示されなくなりました。これは、グローバルレベルの ALL PRIVILEGES
の意味が、定義されている動的権限によって異なるためです。 かわりに、SHOW GRANTS
では、付与されている各グローバル権限が明示的にリストされます:
mysql> SHOW GRANTS FOR 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for root@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 `root`@`localhost` WITH GRANT |
| OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
SHOW GRANTS
出力を処理するアプリケーションは、それに応じて調整する必要があります。
グローバルレベルでは、GRANT OPTION
は付与されているすべての静的グローバル権限に適用されますが (いずれかに付与されている場合)、付与されている動的権限に個別に適用されます。 SHOW GRANTS
では、グローバル権限は次のように表示されます:
付与されているすべての静的権限 (存在する場合) をリストする行 (該当する場合は WITH GRANT OPTION
を含む)。
GRANT OPTION
が付与されているすべての付与された動的権限 (WITH GRANT OPTION
を含む) がリストされた行。
GRANT OPTION
が付与されていない、付与されているすべての動的権限が WITH GRANT OPTION
なしでリストされた行。
オプションの USING
句を使用すると、SHOW GRANTS
でユーザーのロールに関連付けられている権限を調べることができます。 USING
句で指定された各ロールをユーザーに付与する必要があります。
次のように、ユーザー u1
に r1
および r2
のロールが割り当てられているとします:
CREATE ROLE 'r1', 'r2'; GRANT SELECT ON db1.* TO 'r1'; GRANT INSERT, UPDATE, DELETE ON db1.* TO 'r2'; CREATE USER 'u1'@'localhost' IDENTIFIED BY 'u1pass'; GRANT 'r1', 'r2' TO 'u1'@'localhost';
USING
を使用しない SHOW GRANTS
には、付与されたロールが表示されます:
mysql> SHOW GRANTS FOR 'u1'@'localhost';
+---------------------------------------------+
| Grants for u1@localhost |
+---------------------------------------------+
| GRANT USAGE ON *.* TO `u1`@`localhost` |
| GRANT `r1`@`%`,`r2`@`%` TO `u1`@`localhost` |
+---------------------------------------------+
USING
句を追加すると、その句で指定された各ロールに関連付けられた権限もステートメントに表示されます:
mysql>SHOW GRANTS FOR 'u1'@'localhost' USING 'r1';
+---------------------------------------------+ | Grants for u1@localhost | +---------------------------------------------+ | GRANT USAGE ON *.* TO `u1`@`localhost` | | GRANT SELECT ON `db1`.* TO `u1`@`localhost` | | GRANT `r1`@`%`,`r2`@`%` TO `u1`@`localhost` | +---------------------------------------------+ mysql>SHOW GRANTS FOR 'u1'@'localhost' USING 'r2';
+-------------------------------------------------------------+ | Grants for u1@localhost | +-------------------------------------------------------------+ | GRANT USAGE ON *.* TO `u1`@`localhost` | | GRANT INSERT, UPDATE, DELETE ON `db1`.* TO `u1`@`localhost` | | GRANT `r1`@`%`,`r2`@`%` TO `u1`@`localhost` | +-------------------------------------------------------------+ mysql>SHOW GRANTS FOR 'u1'@'localhost' USING 'r1', 'r2';
+---------------------------------------------------------------------+ | Grants for u1@localhost | +---------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `u1`@`localhost` | | GRANT SELECT, INSERT, UPDATE, DELETE ON `db1`.* TO `u1`@`localhost` | | GRANT `r1`@`%`,`r2`@`%` TO `u1`@`localhost` | +---------------------------------------------------------------------+
アカウントに付与された権限は常に有効ですが、ロールは有効ではありません。 アカウントのアクティブロールは、activate_all_roles_on_login
システム変数の値、アカウントのデフォルトロール、および SET ROLE
がセッション内で実行されたかどうかによって、セッション間で異なる場合があります。
MySQL 8.0.16 以上では、グローバル権限を特定のスキーマに適用できないように制限できるように、グローバル権限の部分的な取消しがサポートされています (セクション6.2.12「部分取消しを使用した権限の制限」 を参照)。 特定のスキーマに対して取り消されたグローバルスキーマ権限を示すために、SHOW GRANTS
出力には REVOKE
ステートメントが含まれています:
mysql>SET PERSIST partial_revokes = ON;
mysql>CREATE USER u1;
mysql>GRANT SELECT, INSERT, DELETE ON *.* TO u1;
mysql>REVOKE SELECT, INSERT ON mysql.* FROM u1;
mysql>REVOKE DELETE ON world.* FROM u1;
mysql>SHOW GRANTS FOR u1;
+--------------------------------------------------+ | Grants for u1@% | +--------------------------------------------------+ | GRANT SELECT, INSERT, DELETE ON *.* TO `u1`@`%` | | REVOKE SELECT, INSERT ON `mysql`.* FROM `u1`@`%` | | REVOKE DELETE ON `world`.* FROM `u1`@`%` | +--------------------------------------------------+
SHOW GRANTS
では、指定されたアカウントで使用できるが、別のアカウントに付与されている権限は表示されません。 たとえば、匿名アカウントが存在する場合、名前付きアカウントはその権限を使用できますが、SHOW GRANTS
では表示されません。
SHOW GRANTS
では、mandatory_roles
システム変数値で指定された必須ロールが次のように表示されます:
FOR
句を指定しない SHOW GRANTS
では、現行ユーザーの権限が表示され、必須ロールが含まれます。
SHOW GRANTS FOR
には、指定したユーザーの権限が表示され、必須ロールは含まれません。
user
この動作は、SHOW GRANTS FOR
の出力を使用して、指定されたユーザーに明示的に付与される権限を決定するアプリケーションの利点です。 その出力に必須ロールが含まれていたため、ユーザーに明示的に付与されたロールを必須ロールと区別することは困難です。
user
現行ユーザーの場合、アプリケーションでは、SHOW GRANTS
または SHOW GRANTS FOR CURRENT_USER
をそれぞれ使用して、必須ロールの有無にかかわらず権限を決定できます。