0

0

mysql如何查看哪些用户拥有修改权限_查询INFORMATION_SCHEMA

P粉602998670

P粉602998670

发布时间:2026-03-19 10:08:03

|

117人浏览过

|

来源于php中文网

原创

最直接查库级UPDATE权限用INFORMATION_SCHEMA.SCHEMA_PRIVILEGES,但需结合ROLE_TABLE_GRANTS、TABLE_PRIVILEGES、COLUMN_PRIVILEGES及SHOW GRANTS综合验证,因权限可能来自角色继承、表/列级授权、PROXY或DEFINER机制。

mysql如何查看哪些用户拥有修改权限_查询information_schema

查哪些用户有 UPDATE 权限:直接读 INFORMATION_SCHEMA.ROLE_TABLE_GRANTSINFORMATION_SCHEMA.SCHEMA_PRIVILEGES

MySQL 8.0+ 默认启用角色和细粒度权限模型,INFORMATION_SCHEMA.SCHEMA_PRIVILEGES 是最直接的入口——它按数据库粒度列出谁对哪个库有哪种权限。但注意:它只反映显式授予的库级权限(比如 GRANT UPDATE ON mydb.*),不包含表级、列级或通过角色间接获得的权限。

实操建议:

  • SELECT GRANTEE, PRIVILEGE_TYPE, IS_GRANTABLE FROM INFORMATION_SCHEMA.SCHEMA_PRIVILEGES WHERE PRIVILEGE_TYPE = 'UPDATE' 快速筛出有库级 UPDATE 权的账号
  • GRANTEE 字段格式是 'user'@'host',记得用 TRIM 或正则处理引号,避免匹配失败
  • 如果启用了角色(show variables like 'activate_all_roles_on_login' 为 ON),还要查 ROLE_TABLE_GRANTS 并关联 APPLICABLE_ROLES,否则会漏掉角色继承来的权限

查具体某张表的 UPDATE 权限:盯紧 TABLE_PRIVILEGESCOLUMN_PRIVILEGES

库级权限只是冰山一角。真正决定“能不能改某行数据”的,往往是表级甚至列级授权。比如 GRANT UPDATE(col_a) ON mydb.t1 这种限制性授权,只在 COLUMN_PRIVILEGES 里体现。

常见错误现象:执行 UPDATE t1 SET col_b=1 报错 ERROR 1142 (42000): UPDATE command denied,但查 SCHEMA_PRIVILEGES 显示有权限——大概率是权限只给了特定列,或者只给了某张表。

实操建议:

  • 先查表级:SELECT GRANTEE, TABLE_NAME, PRIVILEGE_TYPE FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES WHERE TABLE_SCHEMA = 'mydb' AND TABLE_NAME = 't1' AND PRIVILEGE_TYPE = 'UPDATE'
  • 再查列级:SELECT GRANTEE, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES WHERE TABLE_SCHEMA = 'mydb' AND TABLE_NAME = 't1' AND PRIVILEGE_TYPE = 'UPDATE'
  • 注意 TABLE_PRIVILEGES 中的 GRANTEE 可能是角色名(如 'app_role'@'%'),需结合 ROLE_ROUTINE_GRANTSADMINISTRABLE_ROLE_AUTHORIZATIONS 追踪实际持有者

为什么 SHOW GRANTS FOR user 比查 INFORMATION_SCHEMA 更可靠?

SHOW GRANTS 返回的是 MySQL 实际生效的权限集合,自动合并了直接授权、角色继承、代理权限(PROXY)等所有路径。而 INFORMATION_SCHEMA 表是静态快照,不反映运行时权限计算逻辑,尤其在角色嵌套深、权限被 REVOKE 后未刷新缓存时容易失真。

MedPeer自然科学基金
MedPeer自然科学基金

科研申报与成果分析的智能数据引擎

下载

性能与兼容性影响:

  • SHOW GRANTS 是轻量命令,无锁、不扫描元数据表,适合运维脚本高频调用
  • MySQL 5.7 不支持角色,INFORMATION_SCHEMA.ROLE_* 表不存在,但 SHOW GRANTS 全版本可用
  • 如果要批量检查上百个用户,别用循环执行 SHOW GRANTS(网络开销大),改用 SELECT user, host FROM mysql.user 拼接后一次性查 INFORMATION_SCHEMA,再用 SHOW GRANTS 抽样验证关键账号

容易被忽略的权限来源:Proxy 用户、SQL SECURITY DEFINER 函数、SET ROLE

一个用户看似没 UPDATE 权,却能成功修改数据,往往是因为绕过了常规权限检查。比如函数或存储过程以 SQL SECURITY DEFINER 定义,调用者借用了定义者的权限;或者用户被设为 proxy(GRANT PROXY ON 'admin'@'%' TO 'app'@'localhost'),实际执行时权限提升。

实操建议:

  • 查 proxy 关系:SELECT * FROM mysql.proxies_priv WHERE Host = 'your_host' AND User = 'your_user'
  • 查 DEFINER 函数:SELECT name, definer FROM mysql.proc WHERE security_type = 'DEFINER' AND body LIKE '%UPDATE%'
  • 检查当前会话是否已切换角色:SELECT CURRENT_ROLE(),因为 SET ROLE 后权限立即变化,但 INFORMATION_SCHEMA 不体现会话态

权限不是静态配置,而是运行时计算结果。查 INFORMATION_SCHEMA 只能当起点,最终以 SHOW GRANTS 和实际执行反馈为准。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1135

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

381

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2300

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

380

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1784

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

588

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

441

2024.04.29

bootstrap安装教程
bootstrap安装教程

本专题整合了bootstrap安装相关教程,阅读专题下面的文章了解更多详细操作教程。

22

2026.03.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.6万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 861人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号