如何在企业内网中快速完成MySQL环境搭建 内网数据库环境搭建与访问权限控制

4次阅读

mysql 5.7/8.0 在 centos 7 内网离线安装应使用官方二进制包,创建 mysql 用户、–initialize-insecure 初始化,绑定内网 IP,创建带 host 限定的应用账号,配置 firewalld 和 SElinux 放行,并按最小权限原则授权。

如何在企业内网中快速完成MySQL环境搭建 内网数据库环境搭建与访问权限控制

MySQL 5.7/8.0 在 CentOS 7 内网离线安装

内网环境通常无法直接 yum install mysql-server,必须走离线部署。优先选官方二进制包(mysql-5.7.42-linux-glibc2.12-x86_64.tar.gzmysql-8.0.33-linux-glibc2.12-x86_64.tar.gz),比 RPM 包更可控,不依赖系统级服务注册。

关键步骤:

  • 用外网机器下载对应版本二进制包,校验 sha256sum 防止传输损坏
  • 解压到 /opt/mysql,创建专用用户 mysql(不要用 root 启动)
  • 初始化必须加 --initialize-insecure(避免随机 root 密码丢失在日志里,内网调试期省事)
  • mysqld --defaults-file=/etc/my.cnf 启动前务必确认 my.cnfbind-address = 127.0.0.1 已改为内网 IP(如 192.168.10.5),否则其他机器连不上

创建应用账号并限制访问来源

默认 root@localhost 无法从内网其他机器登录,必须显式创建带 host 限定的账号。不要用 %,哪怕是在内网——一旦防火墙策略松动或跳板机暴露,风险陡增。

实操命令示例:

CREATE USER 'app_user'@'192.168.10.%' IDENTIFIED BY 'StrongPass123!'; GRANT select,INSERT,UPDATE ON mydb.* TO 'app_user'@'192.168.10.%'; FLUSH PRIVILEGES;

注意点:

  • host 段用 192.168.10.%% 更安全,且兼容大多数内网子网划分
  • MySQL 8.0 默认认证插件是 caching_sha2_password,老应用连接可能报 Client does not support authentication protocol;建号时加 IDENTIFIED WITH mysql_native_password 兼容
  • 权限粒度按最小够用原则给,比如报表库只给 SELECT,写入库禁用 DROPALTER

防火墙与 SELinux 的实际放行逻辑

即使 MySQL 绑定了内网 IP、账号也开了对应 host,仍连不上?八成卡在系统层。CentOS 7 默认 firewalld 和 SELinux 双启用,必须都过一遍。

firewalld 放行:

  • 别只加端口:运行 firewall-cmd --permanent --add-port=3306/tcp 后,必须 firewall-cmd --reload
  • 更稳妥的做法是加 rich rule,限定源 IP 段:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port=3306 protocol=tcp accept'

SELinux 放行(常被忽略):

  • 检查状态:sestatus,若为 enforcing,需允许 mysqld 网络连接:setsebool -P mysqld_connect_any on
  • 若数据目录不在 /var/lib/mysql(比如放在 /data/mysql),还要恢复上下文:semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?",再 restorecon -Rv /data/mysql

验证连通性时最容易漏掉的三个点

用另一台内网机器执行 mysql -h 192.168.10.5 -u app_user -p 连不上?先别改配置,快速排查这三项:

  • 从客户端机器执行 telnet 192.168.10.5 3306 —— 如果不通,问题在网络或防火墙,不是 MySQL 配置
  • 数据库服务器上执行 netstat -tlnp | grep :3306,确认监听的是 *:3306 或具体内网 IP,不是仅 127.0.0.1:3306
  • 查 MySQL 错误日志:tail -f /opt/mysql/data/hostname.err,常见提示如 access denied for user 'app_user'@'192.168.10.22',说明账号 host 不匹配,不是密码错

内网环境容易高估“物理隔离”的安全性,但账号、防火墙、SELinux 三层中任意一层配置疏漏,都会导致服务不可用或越权访问。尤其是多实例共存时,my.cnf 加载顺序和 socket 路径冲突,比公网环境更难定位。

text=ZqhQzanResources