mysql中查看与修改用户权限的技巧

SHOW GRANTS 是查看当前或指定用户显式权限的直接方式,不包含角色权限和隐式继承;需注意 host 匹配、MySQL 8.0+ 权限与认证分离,且 GRANT/REVOKE 后无需 FLUSH PRIVILEGES。

mysql中查看与修改用户权限的技巧

如何查看 MySQL 当前用户的权限

执行 SHOW GRANTS 是最直接的方式,它显示当前登录用户(或指定用户)被显式授予的权限。注意:它不合并角色权限(MySQL 8.0+ 角色功能启用时),也不反映隐式继承关系。

  • 查看自己拥有的权限:
    SHOW GRANTS;
  • 查看其他用户(需 SELECT 权限在 mysql.user 表,或 GRANT OPTION):
    SHOW GRANTS FOR 'username'@'host';
  • 若提示 Access denied,说明你没有足够权限读取授权表,此时无法绕过 —— MySQL 不允许低权限用户探测他人权限

修改用户权限前必须先确认 host 匹配规则

MySQL 用户由 'username'@'host' 元组唯一标识。'user1'@'localhost''user1'@'127.0.0.1' 是两个完全不同的账户,权限互不影响。常见误操作是改错了 host 导致权限没生效。

  • 查清目标用户真实 host:
    SELECT User, Host FROM mysql.user WHERE User = 'username';
  • host 值可能是 '%'(通配所有主机)、'localhost'(仅 Unix socket 或本地 TCP)、'192.168.1.%' 等;注意 localhost 不等价于 127.0.0.1(前者优先走 socket)
  • 新建或修改权限时,务必用完全一致的 Host 值,否则会创建新用户而非更新旧用户

GRANT 和 REVOKE 后必须执行 FLUSH PRIVILEGES 吗

不需要。在绝大多数情况下,GRANTREVOKEDROP USERCREATE USER 这些语句会自动刷新权限缓存。只有当你**直接 UPDATE 或 INSERT 到 mysql.user 等系统表**时,才需要手动执行 FLUSH PRIVILEGES

云网OA

云网OA

采用JSP开发的办公自动化产品、基于B/S结构,运行环境:JDK v1.5、Tomcat v5.5、MySQL v4.1,三者均为以上版本其他相关内容:可视化流程设计: 流程支持串签、会签和分支流程,可以设置流程节点的修改、删除权限,并可指定流程中各个用户在表单中可以填写的域。智能表单所见即所得设计: 智能设计,自动在数据库中生成表格,方便优化程序 公共交流: 集论坛、博客、聊天室于一体文件柜:C

下载

  • 正确做法(自动生效):
    GRANT SELECT, INSERT ON mydb.* TO 'appuser'@'10.0.2.%';
  • 错误做法(多余且可能掩盖问题):
    GRANT SELECT ON mydb.* TO 'appuser'@'10.0.2.%';
    FLUSH PRIVILEGES;
  • 例外:如果你用 UPDATE mysql.user SET authentication_string = ... 直接改密码字段,就必须 FLUSH PRIVILEGES,但这是反模式,应改用 ALTER USER

MySQL 8.0+ 修改密码与权限分离更严格

从 MySQL 8.0 开始,password 字段已移除,认证方式统一由 authentication_stringplugin 控制。用 GRANT 不能再顺带改密码;必须用 ALTER USER 单独处理。

  • 只改权限:
    GRANT UPDATE ON sales.* TO 'reporter'@'%';
  • 只改密码:
    ALTER USER 'reporter'@'%' IDENTIFIED BY 'newpass123';
  • 同时改密码和权限?不行 —— 必须分两步,且 ALTER USER 不接受权限参数
  • 如果执行 GRANT ... IDENTIFIED BY 会报错:ERROR 1410 (42000): You are not allowed to create a user with GRANT

实际运维中,最容易卡住的是 host 匹配失败和混淆了 8.0 的权限/认证分离机制。改完权限立刻用对应 host 连接测试,比看 SHOW GRANTS 更可靠。

https://www.php.cn/faq/1991751.html

发表回复

Your email address will not be published. Required fields are marked *