当前位置: 代码网 > it编程>数据库>Mysql > MySQL的权限管理设置方法

MySQL的权限管理设置方法

2026年01月22日 Mysql 我要评论
在 mysql 中,用户查看自己的权限和设置(修改)权限是两个不同的操作:查看权限:普通用户可自行操作设置/修改权限:必须由管理员(如 root)执行,普通用户不能给自己授权(除非被授予 grant

在 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权限管理内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com