前言
在数据库管理体系中,精细化控制用户权限与安全开启远程访问是保障数据安全的核心环节。本文档基于MySQL官方实践与生产环境经验,系统梳理以下关键操作:
权限最小化原则:通过创建专属用户、按需分配库表级权限(如SELECT/INSERT/UPDATE),避免直接使用root账户或授予全局权限,降低越权操作风险;
动态权限管理:提供权限授予(GRANT)与撤销(REVOKE)的标准化流程,支持灵活回收特定操作权限或完全清除访问权限;
安全远程连接配置:涵盖端口开放、防火墙规则配置及bind-address调优,确保远程访问既可用又可控;
操作可追溯性:每步命令均标注执行位置(如MySQL命令行或Shell终端),并强调FLUSH PRIVILEGES的强制生效机制,避免权限延迟生效问题。
本文适用于需快速实施MySQL权限隔离或远程连接配置的场景,如多团队协作开发、应用程序数据库访问控制等。强烈建议遵循“最小权限+IP白名单+SSL加密”三位一体策略,以平衡功能需求与安全合规性。
用户创建与授权
> mysql -uroot -p
> 输入你的密码
mysql> CREATE USER '你需要创建的新账户'@'%' IDENTIFIED BY '你需要创建的新账户密码';
mysql> GRANT SELECT, INSERT, UPDATE ON `你需要赋予权限的数据库名`.* TO '你刚刚创建的账户名'@'%';
mysql> FLUSH PRIVILEGES;
mysql> exit;
上述代码中,完成了如下功能:
- 登录Mysql
- 创建一个用于远程连接的新用户
- 给新用户在某个库中赋予了查询、新增和修改的权限
- 刷新权限
- 退出Mysql
权限撤销操作
如果你需要撤销权限的话,只需要修改下如下内容:
mysql> REVOKE ALL PRIVILEGES ON `你需要删除权限的数据库名`.* FROM '账户名'@'%';
mysql> REVOKE SELECT, INSERT, UPDATE ON `你需要删除权限的数据库名`.* FROM '账户名'@'%';
其中第一条命令是清除掉该账户对于该库的所有权限
第二条命令是仅清除掉查询、修改、新增权限
同样的 也需要使用FLUSH PRIVILEGES; 来刷新权限
开启端口号远程连接
[mysqld]
bind-address = 0.0.0.0 # 监听所有IP(或指定服务器IP)
skip_name_resolve = ON # 禁用DNS解析提升性能[3](@ref)
# 重启服务
sudo systemctl restart mysql
# 检查3306端口是否已开启(如果你的Mysql使用的是其他的端口修改即可)
> netstat -tunlp | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 16902/mysqld
tcp6 0 0 :::33060 :::* LISTEN 16902/mysqld
# 如果上述命令处于监听状态 则代表当前端口已开启 无需继续开启
# 配置3306端口进TCP
> firewall-cmd --permanent --add-port=3306/tcp
success
# 刷新防火墙
> firewall-cmd --reload
success
# 验证端口监听
> netstat -tunlp | grep 3306 # 应显示`0.0.0.0:3306`
1万+

被折叠的 条评论
为什么被折叠?



