MySQL用户权限管理

## 为什么需要权限管理 MySQL默认的root账户权限太大,线上环境直接用它等于裸奔。我见过有人把root密码写在代码配置文件里,被拖库的。权限管理不是为了折腾自己,是为了出事的时候能精准定位谁干的、能控制损失范围。 ## 用户管理三板斧 ### 创建用户
-- 创建用户,指定可以从哪些主机登录
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPass123!';
CREATE USER 'dev_user'@'192.168.1.%' IDENTIFIED BY 'DevPass456!';
CREATE USER 'readonly_user'@'%' IDENTIFIED BY 'ReadOnly789!';
`@`后面是允许登录的主机。`%`表示任意IP,生产环境别这么干。`localhost`只允许本机连接,适合跑在同一台机器上的应用。`192.168.1.%`限制内网段。 ### 修改密码
-- MySQL 5.7及之后
ALTER USER 'app_user'@'localhost' IDENTIFIED BY 'NewPass123!';
-- 或者直接更新mysql.user表(不推荐,容易出问题)
### 删除用户
DROP USER 'dev_user'@'192.168.1.%';
## 权限分配:给多少给多少 ### 基本权限类型 – `SELECT` – 查 – `INSERT` – 增 – `UPDATE` – 改 – `DELETE` – 删 – `CREATE` – 建表建库 – `DROP` – 删表删库 – `ALTER` – 改表结构 – `INDEX` – 索引操作 – `EXECUTE` – 执行存储过程 ### 按粒度分配
-- 1. 全局权限(整个MySQL实例)
GRANT SELECT ON *.* TO 'readonly_user'@'%';

-- 2. 数据库级权限
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp_db.* TO 'app_user'@'localhost';

-- 3. 表级权限
GRANT SELECT, INSERT ON myapp_db.orders TO 'order_service'@'10.0.0.%';

-- 4. 列级权限(很少用,但有时需要)
GRANT SELECT (id, name, email) ON myapp_db.users TO 'analyst'@'localhost';
原则:给最小必要权限。一个只读报表用户,只给SELECT就够了。一个订单服务,只给操作orders表的权限,别给DROP。 ### 回收权限
REVOKE DELETE ON myapp_db.* FROM 'app_user'@'localhost';
REVOKE ALL PRIVILEGES ON *.* FROM 'old_user'@'%';
## 实践中的坑 ### 权限不生效 改完权限记得刷新:
FLUSH PRIVILEGES;
或者用`GRANT`时自动刷新,但手动`FLUSH`更保险。 ### 查看权限
-- 看当前用户的权限
SHOW GRANTS;

-- 看指定用户的权限
SHOW GRANTS FOR 'app_user'@'localhost';
### 权限冲突 如果一个用户同时有数据库级和表级权限,MySQL会取并集。比如`app_user`对`myapp_db`有SELECT权限,对`myapp_db.orders`有INSERT权限,那么他可以对orders表做INSERT,但其他表只能SELECT。 ### 远程连接问题 用户创建时指定了`localhost`,想从其他机器连肯定报错。检查三件事:用户主机限制、MySQL绑定地址(`bind-address`)、防火墙。
-- 查看MySQL绑定地址
SHOW VARIABLES LIKE 'bind_address';
如果bind_address是127.0.0.1,只能本机连。改成0.0.0.0允许所有IP,或者具体IP。 ## 生产环境推荐配置 我在雨云服务器上部署MySQL时的习惯做法:
-- 应用账号,只连本机
CREATE USER 'app'@'localhost' IDENTIFIED BY 'xxx';
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'app'@'localhost';

-- 备份账号,只读
CREATE USER 'backup'@'localhost' IDENTIFIED BY 'xxx';
GRANT SELECT, LOCK TABLES, SHOW VIEW ON myapp.* TO 'backup'@'localhost';

-- 管理账号,只允许内网访问
CREATE USER 'admin'@'10.0.0.%' IDENTIFIED BY 'xxx';
GRANT ALL PRIVILEGES ON myapp.* TO 'admin'@'10.0.0.%';
雨云这台服务器性价比挺高,稳定用了两年没出过权限相关的问题,主要还是配置习惯好。 ## 一句话总结 `CREATE USER` + `GRANT` + `FLUSH PRIVILEGES`,记住最小权限原则,别偷懒用root。出事了再改权限,黄花菜都凉了。

雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容