MySQL如何通过单条命令查询所有用户的GRANTS权限信息
解答
MySQL没有提供原生单条SHOW GRANTS语法可以一次性返回所有用户的授权信息,但可以通过SQL拼接、命令行串联的方式实现单步操作获取全量权限,无需手动逐组替换user、host参数重复执行命令。
方式一:拼接生成全量授权查询语句
在MySQL交互端执行如下SQL,会自动为每一组user-host配对生成标准的SHOW GRANTS查询语句:
SELECT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''';') AS grant_query FROM mysql.user;
将查询返回的所有结果批量执行,即可拿到所有用户的完整授权信息,无需手动逐个替换参数。
方式二:命令行单条指令直接输出全量结果
无需进入MySQL交互界面,直接在服务器Shell中执行如下命令,即可一次性打印所有用户的GRANTS结果:
mysql -u<你的登录账号> -p<你的登录密码> -N -e "SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user" | mysql -u<你的登录账号> -p<你的登录密码>
将命令中<你的登录账号>、<你的登录密码>替换为实际的MySQL登录凭证即可,该命令会先生成所有用户的授权查询语句,再自动传入MySQL执行,直接输出最终全量权限结果。
方式三:直接查询系统权限表聚合结果
如果不需要和SHOW GRANTS完全一致的输出格式,可以直接查询内置的权限视图聚合得到权限信息,全局权限查询示例:
SELECT grantee, GROUP_CONCAT(privilege_type ORDER BY privilege_type SEPARATOR ', ') AS global_privileges FROM information_schema.USER_PRIVILEGES GROUP BY grantee;
如需查询库级、表级、列级授权,可对应查询information_schema库下的SCHEMA_PRIVILEGES、TABLE_PRIVILEGES、COLUMN_PRIVILEGES视图即可。
注意:以上操作需要使用的数据库登录账号拥有读取mysql系统库、information_schema库的对应权限,否则会执行报错。
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

