MySQL的权限管理设置方法

 更新时间:2026年01月22日 09:41:48   作者:阿坤带你走近大数据  
本文介绍了MySQL中的权限管理,包括查看、设置和撤销权限,普通用户只能查看自己的权限,设置权限需要管理员操作,管理员可以通过GRANT语句授予权限,并通过REVOKE语句撤销权限,建议遵循最小权限原则,限制主机范围,并定期审计权限,感兴趣的朋友跟随小编一起看看吧

在 MySQL 中,用户查看自己的权限设置(修改)权限是两个不同的操作:

  • 查看权限:普通用户可自行操作
  • 设置/修改权限必须由管理员(如 root)执行,普通用户不能给自己授权(除非被授予 GRANT OPTION

下面分两部分详细说明:

一、✅ 用户如何查看自己的权限?

方法 1:使用SHOW GRANTS(最推荐)

-- 查看当前用户的全部权限
SHOW GRANTS;

✅ 输出示例:

+------------------------------------------------------------------+
| Grants for 'app_user'@'%'                                        |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `app_user`@`%`                             |
| GRANT SELECT, INSERT, UPDATE ON `shop_db`.* TO `app_user`@`%`    |
+------------------------------------------------------------------+
  • USAGE 表示“能连接”,无实际数据权限
  • 第二行表示:对 shop_db 库的所有表有 查询、插入、更新 权限

方法 2:确认当前身份(避免混淆)

-- 查看当前会话使用的账号
SELECT USER();          -- 你登录时用的账号(如 'app_user'@'192.168.1.50')
SELECT CURRENT_USER();  -- MySQL 实际用于权限校验的账号(如 'app_user'@'%')

💡 通常 CURRENT_USER() 才是权限匹配的依据。

方法 3:检查是否有某项具体权限(高级)

-- 检查是否对某个库有 SELECT 权限
SELECT 
  TABLE_SCHEMA AS database_name,
  PRIVILEGE_TYPE
FROM INFORMATION_SCHEMA.SCHEMA_PRIVILEGES
WHERE GRANTEE = CONCAT('''', REPLACE(CURRENT_USER(), '@', '''@'''), '''')
  AND PRIVILEGE_TYPE = 'SELECT';

⚠️ 普通用户一般用不到,SHOW GRANTS 已足够。

二、🛠️ 如何设置(授予)权限?(需管理员操作)

🔒 重要前提
普通用户无法给自己授权!必须由具有 GRANT OPTION 权限的管理员(如 root)执行。

步骤 1:管理员登录 MySQL

mysql -u root -p

步骤 2:使用GRANT语句授予权限

🌰 场景 1:授予数据库级权限(最常用)

-- 授予 app_user 对 shop_db 库的 增删改查 权限
GRANT SELECT, INSERT, UPDATE, DELETE ON shop_db.* TO 'app_user'@'%';
-- 刷新权限(MySQL 8.0+ 通常不需要,但安全起见可加)
FLUSH PRIVILEGES;

🌰 场景 2:授予只读权限

GRANT SELECT ON shop_db.* TO 'readonly_user'@'192.168.1.%';

🌰 场景 3:授予所有权限(慎用!)

GRANT ALL PRIVILEGES ON shop_db.* TO 'admin_user'@'localhost';

🌰 场景 4:允许该用户再授权给他人(危险!)

GRANT SELECT ON shop_db.* TO 'user'@'%' WITH GRANT OPTION;

常用权限类型速查表

权限作用
SELECT查询数据
INSERT插入数据
UPDATE修改数据
DELETE删除数据
CREATE创建表/库
DROP删除表/库
ALTER修改表结构
INDEX创建/删除索引
EXECUTE执行存储过程
ALL PRIVILEGES所有权限(不含 GRANT OPTION

📌 语法格式:

GRANT 权限列表 ON 数据库.表 TO '用户名'@'主机';

步骤 3:验证权限是否生效

管理员可查看刚授予的权限:

SHOW GRANTS FOR 'app_user'@'%';

用户重新连接后即可使用新权限。

三、❌ 撤销权限(Revoke)

管理员也可随时收回权限:

-- 撤销 app_user 的 DELETE 权限
REVOKE DELETE ON shop_db.* FROM 'app_user'@'%';
-- 撤销所有权限
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'app_user'@'%';

四、💡 最佳实践建议

对普通用户:

  • 使用 SHOW GRANTS; 快速了解自己能做什么
  • 不要尝试直接修改 mysql.user 表(会导致权限不一致)

对管理员:

  • 最小权限原则:只给业务必需的权限(如 Web 应用通常不需要 DROP
  • 限制主机范围:如 'app_user'@'10.0.0.%' 而非 'app_user'@'%'
  • 避免使用 root 跑应用!创建专用账号

五、常见问题解答

Q:为什么我执行GRANT报错 “Access denied”?

A:你当前用户没有 GRANT OPTION 权限。请联系 DBA 或用 root 操作。

Q:授予权限后,应用仍报 “Permission denied”?

A:检查:

  1. 是否连接的是正确的数据库?
  2. 用户 host 是否匹配?('user'@'localhost''user'@'%'
  3. 是否需要重启应用?(某些连接池会缓存权限)

Q:能否授权到列级别?

A:可以,但极少用:

GRANT SELECT (name, email) ON shop_db.users TO 'user'@'%';

✅ 总结

操作谁执行命令
查看自己权限任意用户SHOW GRANTS;
授予/修改权限管理员GRANT ... TO 'user'@'host';
撤销权限管理员REVOKE ... FROM 'user'@'host';

🔐 核心原则
权限管理 = 安全基石,务必遵循最小权限、明确范围、定期审计。

到此这篇关于MySQL的权限管理的简单介绍的文章就介绍到这了,更多相关mysql权限管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql 5.7.17 安装图文教程(windows)

    mysql 5.7.17 安装图文教程(windows)

    这篇文章主要介绍了windows下mysql 5.7.17 安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Mysql InnoDB引擎中页目录和槽的查找过程

    Mysql InnoDB引擎中页目录和槽的查找过程

    这篇文章主要为大家介绍了Mysql InnoDB引擎中页目录和槽的查找记录过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • MySQL备份与恢复之热备(3)

    MySQL备份与恢复之热备(3)

    热备使用mysqldump命令进行备份,此工具是MySQL内置的备份和恢复工具,功能强大,它可以对整个库进行备份,可以对多个库进行备份,可以对单张表或者某几张表进行备份,需要了解的朋友可以参考下
    2015-08-08
  • 查看mysql当前连接数的方法详解

    查看mysql当前连接数的方法详解

    这篇文章主要介绍了查看mysql当前连接数的方法详解,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • 如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

    如何解决mysql出现Incorrect string value for co

    这篇文章主要介绍了如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • MySQL EXPLAIN详细解析

    MySQL EXPLAIN详细解析

    EXPLAIN是SQL性能优化的关键工具,它展示了MySQL如何执行一条SQL 语句,通过分析它的结果,你可以找出查询的瓶颈并进行优化,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • MySQL update set 和 and的区别

    MySQL update set 和 and的区别

    这篇文章主要介绍了MySQL update set 和 and的区别,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-05-05
  • MySQL中大对象的多版本并发控制详解

    MySQL中大对象的多版本并发控制详解

    这篇文章主要给大家介绍了关于MySQL中大对象的多版本并发控制的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • MySQL中慢SQL优化方法的完整指南

    MySQL中慢SQL优化方法的完整指南

    当数据库响应时间超过500ms时,系统将面临三大灾难链式反应,所以本文将为大家介绍一下MySQL中慢SQL优化的常用方法,有需要的小伙伴可以了解下
    2025-03-03
  • 解读sql中timestamp和datetime之间的转换

    解读sql中timestamp和datetime之间的转换

    这篇文章主要介绍了解读sql中timestamp和datetime之间的转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论