You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何查看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_privmysql.columns_priv表,不过针对你当前的需求,上面三个方法完全够用啦。

内容的提问来源于stack exchange,提问作者theMaximumForce

火山引擎 最新活动