MySQL数据库应用的权限层级体系是其核心功能之一,用于控制用户对数据库资源的访问和操作,以下是MySQL数据库应用的权限层级的具体介绍:
全局层级
全局权限适用于一个给定服务器中的所有数据库,这些权限存储在mysql.user表中,通过GRANT ALL ON *.*和REVOKE ALL ON *.*命令可以授予和撤销全局权限。
数据库层级
数据库权限适用于一个给定数据库中的所有目标,这些权限存储在mysql.db和mysql.host表中,使用GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*命令可以授予和撤销数据库权限。
表层级
表权限适用于一个给定表中的所有列,这些权限存储在mysql.tables_priv表中,通过GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name命令可以授予和撤销表权限。
列层级
列权限适用于一个给定表中的单一列,这些权限存储在mysql.columns_priv表中,当使用REVOKE时,必须指定与被授权列相同的列。
子程序层级
CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序,这些权限可以被授予为全局层级和数据库层级,除了CREATE ROUTINE外,这些权限还可以被授予为子程序层级,并存储在mysql.procs_priv表中。
表格展示
层级 | 适用对象 | 存储位置 | 示例命令 |
全局层级 | 所有数据库 | mysql.user | GRANT ALL ON *.* TO ‘user’@’%’; |
数据库层级 | 特定数据库中的所有对象 | mysql.db, mysql.host | GRANT ALL ON db_name.* TO ‘user’@’%’; |
表层级 | 特定表中的所有列 | mysql.tables_priv | GRANT ALL ON db_name.tbl_name TO ‘user’@’%’; |
列层级 | 特定表中的单一列 | mysql.columns_priv | GRANT SELECT(column_name) ON db_name.tbl_name TO ‘user’@’%’; |
子程序层级 | 已存储的子程序 | mysql.procs_priv | GRANT EXECUTE ON PROCEDURE db_name.procedure_name TO ‘user’@’%’; |
相关问答FAQs
1、如何查看MySQL用户的权限?
要查看MySQL用户的权限,可以使用SHOW GRANTS命令,要查看名为test的用户在%主机上的权限,可以执行以下命令:
“`sql
SHOW GRANTS FOR ‘test’@’%’;
“`
还可以直接查询系统表来查看用户的权限。
“`sql
SELECT * FROM mysql.user WHERE user=’test’;
SELECT * FROM mysql.db WHERE user=’test’;
SELECT * FROM mysql.tables_priv WHERE user=’test’;
SELECT * FROM mysql.columns_priv WHERE user=’test’;
SELECT * FROM mysql.procs_priv WHERE user=’test’;
“`
2、如何在MySQL中撤销用户的权限?
要撤销MySQL用户的权限,可以使用REVOKE命令,要从名为test的用户撤销对所有数据库的所有权限,可以执行以下命令:
“`sql
REVOKE ALL PRIVILEGES ON *.* FROM ‘test’@’%’;
“`
如果只想撤销特定级别的权限(如数据库、表或列级别),可以在REVOKE命令中指定相应的对象,撤销特定数据库的所有权限:
“`sql
REVOKE ALL PRIVILEGES ON db_name.* FROM ‘test’@’%’;
“`
在使用REVOKE命令后,需要执行FLUSH PRIVILEGES命令以使更改生效。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1100828.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复