您的位置:首页 > 数据库 > MySQL

MySQL 查看用户授予的权限

2017-08-24 16:40 302 查看
在MySQL中,如何查看一个用户被授予了那些权限呢?授予用户的权限可能分全局层级权限、数据库层级权限、表层级别权限、列层级别权限、子程序层级权限。具体分类如下:

全局层级

全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANTALLON*.*和REVOKEALLON*.*只授予和撤销全局权限。

数据库层级

数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANTALLONdb_name.*和REVOKEALLONdb_name.*只授予和撤销数据库权限。

表层级

表权限适用于一个给定表中的所有列。这些权限存储在mysql.tables_priv表中。GRANTALLONdb_name.tbl_name和REVOKEALLONdb_name.tbl_name只授予和撤销表权限。

列层级

列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。

子程序层级

CREATEROUTINE,ALTERROUTINE,EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATEROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。

1:那么我们来创建一个测试账号test,授予全局层级的权限。如下所示:

mysql>grantselect,inserton*.*totest@'%'identifiedby'test';
QueryOK,0rowsaffected(0.01sec)
mysql>flushprivileges;
QueryOK,0rowsaffected(0.00sec)
mysql>


那么可以用下面两种方式查询授予test的权限。如下所示:

mysql>showgrantsfortest;
+--------------------------------------------------------------------------------------------------------------+
|Grantsfortest@%|
+--------------------------------------------------------------------------------------------------------------+
|GRANTSELECT,INSERTON*.*TO'test'@'%'IDENTIFIEDBYPASSWORD'*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'|
+--------------------------------------------------------------------------------------------------------------+
1rowinset(0.00sec)
mysql>select*frommysql.userwhereuser='test'\G;
***************************1.row***************************
Host:%
User:test
Password:*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
Select_priv:Y
Insert_priv:Y
Update_priv:N
Delete_priv:N
Create_priv:N
Drop_priv:N
Reload_priv:N
Shutdown_priv:N
Process_priv:N
File_priv:N
Grant_priv:N
References_priv:N
Index_priv:N
Alter_priv:N
Show_db_priv:N
Super_priv:N
Create_tmp_table_priv:N
Lock_tables_priv:N
Execute_priv:N
Repl_slave_priv:N
Repl_client_priv:N
Create_view_priv:N
Show_view_priv:N
Create_routine_priv:N
Alter_routine_priv:N
Create_user_priv:N
Event_priv:N
Trigger_priv:N
Create_tablespace_priv:N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions:0
max_updates:0
max_connections:0
max_user_connections:0
plugin:mysql_native_password
authentication_string:
password_expired:N
1rowinset(0.04sec)
ERROR:
Noqueryspecified
mysql>






2:那么我们来创建一个测试账号test,授予数据库层级的权限。如下所示:

mysql>dropusertest;
QueryOK,0rowsaffected(0.00sec)
mysql>grantselect,insert,update,deleteonMyDB.*totest@'%'identifiedby'test';
QueryOK,0rowsaffected(0.01sec)
mysql>
mysql>select*frommysql.userwhereuser='test'\G;--可以看到无任何授权。
mysql>select*frommysql.dbwhereuser='test'\G;
***************************1.row***************************
Host:%
Db:MyDB
User:test
Select_priv:Y
Insert_priv:Y
Update_priv:Y
Delete_priv:Y
Create_priv:N
Drop_priv:N
Grant_priv:N
References_priv:N
Index_priv:N
Alter_priv:N
Create_tmp_table_priv:N
Lock_tables_priv:N
Create_view_priv:N
Show_view_priv:N
Create_routine_priv:N
Alter_routine_priv:N
Execute_priv:N
Event_priv:N
Trigger_priv:N
1rowinset(0.04sec)
ERROR:
Noqueryspecified
mysql>
mysql>showgrantsfortest;
+-----------------------------------------------------------------------------------------------------+
|Grantsfortest@%|
+-----------------------------------------------------------------------------------------------------+
|GRANTUSAGEON*.*TO'test'@'%'IDENTIFIEDBYPASSWORD'*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'|
|GRANTSELECT,INSERT,UPDATE,DELETEON`MyDB`.*TO'test'@'%'|
+-----------------------------------------------------------------------------------------------------+
2rowsinset(0.00sec)
mysql>


3:那么我们来创建一个测试账号test,授予表层级的权限。如下所示:

mysql>dropusertest;
QueryOK,0rowsaffected(0.00sec)
mysql>flushprivileges;
QueryOK,0rowsaffected(0.00sec)
mysql>grantallonMyDB.kkktotest@'%'identifiedby'test';
QueryOK,0rowsaffected(0.01sec)
mysql>
mysql>showgrantsfortest;
+-----------------------------------------------------------------------------------------------------+
|Grantsfortest@%|
+-----------------------------------------------------------------------------------------------------+
|GRANTUSAGEON*.*TO'test'@'%'IDENTIFIEDBYPASSWORD'*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'|
|GRANTALLPRIVILEGESON`MyDB`.`kkk`TO'test'@'%'|
+-----------------------------------------------------------------------------------------------------+
2rowsinset(0.00sec)
mysql>select*frommysql.tables_priv\G;
***************************1.row***************************
Host:%
Db:MyDB
User:test
Table_name:kkk
Grantor:root@localhost
Timestamp:0000-00-0000:00:00
Table_priv:Select,Insert,Update,Delete,Create,Drop,References,Index,Alter,CreateView,Showview,Trigger
Column_priv:
1rowinset(0.01sec)
ERROR:
Noqueryspecified
mysql>






4:那么我们来创建一个测试账号test,授予列层级的权限。如下所示:

mysql>dropusertest;
QueryOK,0rowsaffected(0.00sec)
mysql>flushprivileges;
QueryOK,0rowsaffected(0.00sec)
mysql>grantselect(id,col1)onMyDB.TEST1totest@'%'identifiedby'test';
QueryOK,0rowsaffected(0.01sec)
mysql>flushprivileges;
QueryOK,0rowsaffected(0.00sec)
mysql>
mysql>select*frommysql.columns_priv;
+------+------+------+------------+-------------+---------------------+-------------+
|Host|Db|User|Table_name|Column_name|Timestamp|Column_priv|
+------+------+------+------------+-------------+---------------------+-------------+
|%|MyDB|test|TEST1|id|0000-00-0000:00:00|Select|
|%|MyDB|test|TEST1|col1|0000-00-0000:00:00|Select|
+------+------+------+------------+-------------+---------------------+-------------+
2rowsinset(0.00sec)
mysql>showgrantsfortest;
+-----------------------------------------------------------------------------------------------------+
|Grantsfortest@%|
+-----------------------------------------------------------------------------------------------------+
|GRANTUSAGEON*.*TO'test'@'%'IDENTIFIEDBYPASSWORD'*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'|
|GRANTSELECT(id,col1)ON`MyDB`.`TEST1`TO'test'@'%'|
+-----------------------------------------------------------------------------------------------------+
2rowsinset(0.00sec)
mysql>





5:那么我们来创建一个测试账号test,授子程序层级的权限。如下所示:

mysql>DROPPROCEDUREIFEXISTSPRC_TEST;
QueryOK,0rowsaffected(0.00sec)
mysql>DELIMITER//
mysql>CREATEPROCEDUREPRC_TEST()
->BEGIN
->SELECT*FROMkkk;
->END//
QueryOK,0rowsaffected(0.00sec)
mysql>DELIMITER;
mysql>grantexecuteonprocedureMyDB.PRC_TESTtotest@'%'identifiedby'test';
QueryOK,0rowsaffected(0.01sec)
mysql>flushprivileges;
QueryOK,0rowsaffected(0.00sec)
mysql>
mysql>showgrantsfortest;
+-----------------------------------------------------------------------------------------------------+
|Grantsfortest@%|
+-----------------------------------------------------------------------------------------------------+
|GRANTUSAGEON*.*TO'test'@'%'IDENTIFIEDBYPASSWORD'*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'|
|GRANTEXECUTEONPROCEDURE`MyDB`.`prc_test`TO'test'@'%'|
+-----------------------------------------------------------------------------------------------------+
2rowsinset(0.00sec)
mysql>select*frommysql.procs_privwhereUser='test';
+------+------+------+--------------+--------------+----------------+-----------+---------------------+
|Host|Db|User|Routine_name|Routine_type|Grantor|Proc_priv|Timestamp|
+------+------+------+--------------+--------------+----------------+-----------+---------------------+
|%|MyDB|test|PRC_TEST|PROCEDURE|root@localhost|Execute|0000-00-0000:00:00|
+------+------+------+--------------+--------------+----------------+-----------+---------------------+
1rowinset(0.00sec)
mysql>






所以,如果需要查看用户被授予的权限,就需要从这五个层级来查看被授予的权限。从上到下或从小到上,逐一检查各个层级被授予的权限。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: