mysql数据库权限怎么改,访问控制设置那些事儿你得知道
- 问答
- 2025-12-24 12:13:06
- 3
主要综合自MySQL官方文档的权限管理章节、常见数据库管理实践以及技术社区如Stack Overflow的典型问题讨论)
想把MySQL数据库的权限问题搞明白,其实没那么复杂,你就把它想象成管理一栋大楼的门禁系统就行了,数据库就是这栋大楼,里面有很多房间(数据库、表),你创建的用户就是拥有不同门禁卡的人,权限设置就是决定谁能用哪张卡、在什么时间、进哪个房间、以及进去后是只能看(SELECT)还是能搬东西(INSERT/DELETE)甚至是拆房子(DROP)。
你得知道权限是给谁的:用户和主机

在MySQL里,光有用户名还不行,还得知道这个用户是从哪台电脑登录的,这很重要!你给用户xiaowang设置权限,必须同时指定他是从localhost(也就是数据库服务器本机)登录,还是从168.1.100这个IP地址登录,或者是从任何地方(用表示)登录。'xiaowang'@'localhost'和'xiaowang'@'%'在MySQL看来完全是两个不同的用户,他们的密码和权限都可以不一样,这是很多人一开始会搞混的地方,你希望管理员只能从公司内部的某台安全电脑登录数据库,那就应该设置成'admin'@'公司内部IP',而不是'admin'@'%',后者意味着从世界上任何能连上你服务器的电脑都能用admin账号登录,这太危险了。
有哪些常见的“门禁卡”权限?
权限分很多种,有大楼的管理员权限,也有单个房间的权限,你不需要一下子记住所有,但常用的这几个得心里有数:

- 全局权限: 像大楼的超级管理员,拥有这种权限的用户可以对整个MySQL服务器做任何事情,比如创建删除任意数据库、管理所有用户等,代表性的权限是
ALL PRIVILEGES(所有权限)和GRANT OPTION(允许他把自己有的权限再授予别人),这种权限权力极大,千万不能随便给。 - 数据库权限: 像是某一层楼的楼长,权限仅限于某个特定的数据库,比如
GRANT ALL ON my_database.* TO ...,意思是这个用户可以对my_database这个数据库里的所有表为所欲为,但不能碰其他数据库。 - 表权限: 像是某个房间的钥匙,可以精确控制用户对某个表能做什么,比如
SELECT(查看看数据)、INSERT(插入新数据)、UPDATE(修改数据)、DELETE(删除数据),如果你只想让一个用户能看某张表但不能修改,就只给SELECT权限。 - 列权限: 这更细了,像是只能看房间里的某个保险柜,但不能动别的,比如一张表里有工资列和姓名列,你可以设置某个用户只能查询姓名列,而不能查看工资列,但这种权限用得比较少,因为管理起来太麻烦。
怎么具体修改和设置这些权限?
最常用的工具是GRANT和REVOKE这两个SQL命令。
-
发卡:GRANT命令 语法大概是这样的:
GRANT 权限列表 ON 范围 TO '用户名'@'主机名' IDENTIFIED BY '密码';举个例子:
- 创建一个用户,让他能从任何地方登录,并且对
app_db数据库有所有权限:GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'%' IDENTIFIED BY 'strongpassword123'; - 让用户
xiaoli只能从内网IP168.1.20登录,并且只能查询report数据库下的sales表:GRANT SELECT ON report.sales TO 'xiaoli'@'192.168.1.20' IDENTIFIED BY 'anotherpassword';
注意:执行完
GRANT命令后,最好紧接着执行一句FLUSH PRIVILEGES;,这个命令是让MySQL系统立刻重新加载权限表,使刚才的授权马上生效,虽然在某些情况下MySQL会自动刷新,但手动执行一下是个保险的好习惯。 - 创建一个用户,让他能从任何地方登录,并且对
-
收卡:REVOKE命令 如果想把给出去的权限收回来,就用
REVOKE,语法和GRANT很像:REVOKE 权限列表 ON 范围 FROM '用户名'@'主机名';想收回之前给xiaoli的查询权限:REVOKE SELECT ON report.sales FROM 'xiaoli'@'192.168.1.20';同样,执行完后也可以FLUSH PRIVILEGES;一下。 -
查看权限:SHOW GRANTS命令 想看看某个用户现在都有哪些“卡”,可以用:
SHOW GRANTS FOR '用户名'@'主机名';这个命令非常有用,尤其是在检查和排查问题的时候。
一些你必须知道的注意事项
- 最小权限原则: 这是安全管理的黄金法则,一个用户账号只赋予他完成工作所必需的最小权限,千万不要图省事给一个普通应用账号授予
ALL PRIVILEGES,一旦这个账号的密码泄露,你的整个数据库就非常危险了。 - 谨慎使用
GRANT OPTION: 把这个权限给一个用户,就意味着他可以把他自己的权限再给别人,甚至可能创建新的超级用户,除非你非常信任他并且有充分理由,否则不要给。 - 密码安全: 创建用户时一定要用
IDENTIFIED BY设置一个强密码,对于生产环境的数据库,弱密码是致命的。 - 定期审计: 时不时用
SHOW GRANTS看看各个用户都有什么权限,清理掉那些不再需要的账号和权限,人员离职或岗位变动后,一定要记得及时回收权限。
管理MySQL权限就像分配钥匙,心里要有一本清楚的账:谁、在哪儿、能进哪儿、能干什么,遵循最小权限原则,谨慎操作,你的数据库大门就能守得牢牢的。
本文由钊智敏于2025-12-24发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/67540.html
