如何查看MySQL指定数据库下所有用户的权限?
查询MySQL指定数据库下用户的权限
嘿,我懂你的困扰——SELECT * FROM mysql.user;确实只能查到全局权限(也就是对所有数据库生效的权限),像你给jNavarro授予的Movies数据库专属权限,根本不会出现在这张表里。下面给你几个精准的查询方法:
方法1:查询mysql.db表(数据库级权限的存储表)
这张表专门存储针对单个数据库的权限,直接过滤数据库名和用户就能拿到结果:
SELECT user, host, db, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Grant_priv, Alter_priv, Index_priv, Create_tmp_table_priv FROM mysql.db WHERE db = 'Movies' AND user = 'jNavarro';
返回结果里的每个xxx_priv字段会显示Y(拥有权限)或N(无权限),清晰明了。
方法2:用SHOW GRANTS直接查看用户的所有权限
这个方法最直观,会直接返回给用户授权的语句,包括你给jNavarro设置的库级权限:
-- 替换%为用户实际的主机(比如localhost),如果不确定就用%匹配所有主机 SHOW GRANTS FOR 'jNavarro'@'%';
执行后你会看到类似GRANT ALL PRIVILEGES ON Movies.* TO 'jNavarro'@'%';的结果,一眼就能确认权限情况。
方法3:查询information_schema.SCHEMA_PRIVILEGES视图
这是MySQL信息架构里的标准视图,跨版本兼容性更好,结果格式更简洁:
SELECT GRANTEE, TABLE_SCHEMA, PRIVILEGE_TYPE FROM information_schema.SCHEMA_PRIVILEGES WHERE TABLE_SCHEMA = 'Movies' AND GRANTEE = "'jNavarro'@'%'";
注意这里的GRANTEE字段格式必须是'用户名'@'主机'(带单引号),和mysql.user表中的格式一致。
如果之后需要查询表级、列级的细粒度权限,可以进一步查看mysql.tables_priv或mysql.columns_priv表,不过针对你当前的需求,上面三个方法完全够用啦。
内容的提问来源于stack exchange,提问作者theMaximumForce




