当前位置: 首页 > 科技观察

MySQL数据库权限的5层详解:全局、数据库层、表层、列层、子程序层

时间:2023-03-13 03:54:02 科技观察

概述在MySQL中,如何查看一个用户被授予了哪些权限?层级权限、表层权限、列级权限、子程序级权限。下面通过实验来演示:权限的具体分类1.全局级别全局权限适用于给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANTALLON*.*和REVOKEALLON*.*只授予和撤销全局权限。2.数据库级别数据库权限适用于给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANTALLONdb_name.*和REVOKEALLONdb_name.*仅授予和撤销数据库权限。3.表级表权限适用于给定表中的所有列。这些权限存储在mysql.tables_priv表中。GRANTALLONdb_name.tbl_name和REVOKEALLONdb_name.tbl_name仅授予和撤销表权限。4.列级列权限适用于给定表中的单个列。这些权限存储在mysql.columns_priv表中。使用REVOKE时,必须指定与授权列相同的列。5.子程序级CREATEROUTINE、ALTERROUTINE、EXECUTE和GRANT权限适用于存储的子程序。这些权限可以在全局级别和数据库级别授予。此外,除了CREATEROUTINE之外,这些权限可以在子程序级别授予并存储在mysql.procs_priv表中。1.全局级别测试创建一个测试账号test,并授予全局级别的权限。如下:mysql>setglobalvalidate_password_policy=0;mysql>grantselect,inserton*.*totest@'%'identifiedby'test';mysql>flushprivileges;使用以下两种方法查询授予测试的权限。如下图:mysql>showgrantsfortest;mysql>select*frommysql.userwhereuser='test'G;2.数据库级别测试创建一个测试账号test,并授予数据库级别的权限。如下:mysql>dropusertest;mysql>grantselect,insert,update,deleteonjpcpdb.*totest@'%'identifiedby'test@123';mysql>select*frommysql.userwhereuser='test'G;--可以看到noneany授权。mysql>showgrantsfortest;mysql>select*frommysql.dbwhereuser='test'G;3.表级测试创建测试账号test,并授予表级权限。如下图:mysql>dropusertest;mysql>flushprivileges;mysql>grantallonjpcpdb.usertotest@'%'identifiedby'test@123';mysql>showgrantsfortest;mysql>select*frommysql.tables_privG;4.列级测试创建测试账号test,授予列级权限。如下:mysql>dropusertest;mysql>flushprivileges;mysql>grantselect(id,name)onjpcpdb.usertotest@'%'identifiedby'test@123';mysql>flushprivileges;mysql>select*frommysql.columns_priv;mysql>showgrantsfortest;5.子程序级测试创建测试账号test,并授予子程序级权限。如下:mysql>DROPPROCEDUREIFEXISTSPRC_TEST;mysql>DELIMITER//mysql>CREATEPROCEDUREPRC_TEST()->BEGIN->SELECT*FROMuser;->END//mysql>DELIMITER;mysql>grantexecuteonprocedurejpcpdb.PRC_TESTtotest@'%'identifiedby'test@123';mysql>flushprivileges;mysql>showgrantsfortest;mysql>select*frommysql.procs_privwhereUser='test';综上所述,如果需要查看授予用户的权限,需要从这五个层次查看授予的权限。从上到下或从小到上依次查看每一级授予的权限。