mysql安装完成后,默认的权限配置往往无法满足实际业务的安全需求,需要我们手动调整用户权限并完善安全管理规则,才能保障数据库的数据安全和访问可控。

一、mysql权限配置基础操作
1. 登录mysql服务
首先使用安装时设置的管理员账户登录mysql服务,默认管理员账户为root,登录命令如下:
# 本地登录mysql服务 mysql -u root -p # 输入安装时设置的root账户密码后回车即可登录
2. 创建新用户
不建议直接使用root账户进行日常业务操作,应该为不同业务创建独立的用户。创建用户的语法如下:
-- 创建用户,设置密码,允许本地访问 CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'Test_123456'; -- 创建用户,允许192.168.0.100这个IP远程访问 CREATE USER 'remote_user'@'192.168.0.100' IDENTIFIED BY 'Remote_123456'; -- 创建用户,允许所有IP远程访问(不推荐生产环境使用) CREATE USER 'all_user'@'%' IDENTIFIED BY 'All_123456';
3. 分配权限
mysql的权限分为全局权限、数据库级权限、表级权限、列级权限等,我们可以根据实际需求分配最小必要权限。常用权限分配示例如下:
-- 授予test_user用户对test_db数据库的所有权限 GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'localhost'; -- 授予remote_user用户对test_db数据库的查询、插入、更新权限 GRANT SELECT, INSERT, UPDATE ON test_db.* TO 'remote_user'@'192.168.0.100'; -- 授予all_user用户对所有数据库的查询权限 GRANT SELECT ON *.* TO 'all_user'@'%'; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
4. 回收权限与删除用户
当业务调整或者用户不再需要时,要及时回收权限或者删除用户,避免权限滥用:
-- 回收remote_user用户对test_db数据库的更新权限 REVOKE UPDATE ON test_db.* FROM 'remote_user'@'192.168.0.100'; -- 删除test_user用户 DROP USER 'test_user'@'localhost'; -- 刷新权限 FLUSH PRIVILEGES;
二、mysql安全管理设置
1. 密码策略配置
mysql默认可能密码策略较为宽松,我们可以通过配置密码策略提升账户安全性,相关配置参数如下:
| 参数名 | 说明 | 推荐值 |
|---|---|---|
| validate_password.length | 密码最小长度 | 8 |
| validate_password.policy | 密码强度策略,LOW仅校验长度,MEDIUM校验长度、数字、大小写、特殊字符,STRONG额外校验字典文件 | MEDIUM |
| validate_password.number_count | 密码最少包含数字个数 | 1 |
| validate_password.special_char_count | 密码最少包含特殊字符个数 | 1 |
设置密码策略的sql语句如下:
-- 设置密码最小长度为8 SET GLOBAL validate_password.length = 8; -- 设置密码策略为MEDIUM SET GLOBAL validate_password.policy = 'MEDIUM'; -- 永久生效需要修改my.cnf配置文件,添加以下内容 -- [mysqld] -- validate_password.length=8 -- validate_password.policy=MEDIUM
2. 限制远程访问
生产环境的mysql服务尽量不要开放公网访问,仅允许业务服务器所在的IP段访问,修改用户host字段即可实现限制:
-- 将允许所有IP访问的all_user限制为仅允许192.168.0.0/24网段访问 RENAME USER 'all_user'@'%' TO 'all_user'@'192.168.0.%'; -- 刷新权限 FLUSH PRIVILEGES;
3. 禁用危险权限与功能
尽量避免给普通用户授予FILE、PROCESS、SUPER等高危权限,同时可以关闭一些不必要的功能:
- 关闭本地文件加载功能,避免通过
LOAD DATA LOCAL INFILE读取服务器文件:在my.cnf中添加local-infile=0 - 禁止mysql监听公网IP,修改my.cnf中
bind-address为127.0.0.1或者内网IP
4. 开启日志审计
开启mysql的日志功能,便于后续排查异常访问和安全事件:
-- 开启通用查询日志,记录所有sql操作 SET GLOBAL general_log = 'ON'; -- 设置通用日志文件路径 SET GLOBAL general_log_file = '/var/log/mysql/general.log'; -- 开启慢查询日志,记录执行时间超过阈值的sql SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 2;
三、权限配置验证
完成配置后,我们可以通过新创建的用户登录验证权限是否生效:
# 使用test_user用户登录 mysql -u test_user -p # 登录后尝试访问其他数据库,验证是否只有test_db的权限 SHOW DATABASES;
如果登录后只能看到test_db数据库和默认的information_schema,说明权限配置符合预期。日常使用中要定期梳理用户权限,及时回收不必要的权限,同时关注mysql官方的安全补丁,及时升级版本修复已知漏洞。