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,授予全局层级的权限。如下所示:
那么可以用下面两种方式查询授予test的权限。如下所示:
2:那么我们来创建一个测试账号test,授予数据库层级的权限。如下所示:
3:那么我们来创建一个测试账号test,授予表层级的权限。如下所示:
4:那么我们来创建一个测试账号test,授予列层级的权限。如下所示:
5:那么我们来创建一个测试账号test,授子程序层级的权限。如下所示:
所以,如果需要查看用户被授予的权限,就需要从这五个层级来查看被授予的权限。从上到下或从小到上,逐一检查各个层级被授予的权限。
全局层级
全局权限适用于一个给定服务器中的所有数据库。这些权限存储在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>
所以,如果需要查看用户被授予的权限,就需要从这五个层级来查看被授予的权限。从上到下或从小到上,逐一检查各个层级被授予的权限。
相关文章推荐
- 在Mysql下查看给某个用户授予什么样的权限
- 在Mysql下查看给某个用户授予什么样的权限
- mysql查看用户权限命令
- 查看mysql 用户所拥有权限
- mysql 查看用户的权限
- 5、Mysql的用户权限管理--查看,授权,回收
- 如何查看MySQL用户权限
- 如何创建新用户和授予MySQL中的权限
- [MySQL]查看用户权限与GRANT用法
- mysql授予用户权限
- mysql 查看当前登陆用户匹配原则及权限user()与current_user()
- 如何使用mysql查看用户权限
- mysql 查看用户权限
- 查看MySQL用户权限
- 查看MariaDB(MYSQL)数据库中用户及其拥有权限
- 授予MySQL用户权限的实例
- mysql 允许远程IP连接, 并查看所有用户的所有权限
- MySql新增用户并授予不同的权限
- sqlserver授予用户查看执行计划的权限
- MySQL 授予普通用户PROCESS权限