主从数据库访问权限安全建议

腾讯云MySQL(主库)+ 群晖MariaDB(从库)的部署场景,从「账号权限、网络访问、操作管控、审计监控」四个维度给出可落地的安全建议,兼顾易用性和安全性:

一、账号权限管控(核心)

1. 复制账号最小权限原则

  • 仅授予必要权限:复制账号(如同步用户名)只需要REPLICATION SLAVEREPLICATION CLIENT权限,禁止授予ALL/WRITE/ALTER等高危权限,且仅授权同步所需的主机范围:
    -- 正确授权(仅群晖IP可访问,仅复制权限)
    CREATE USER '同步用户名'@'群晖公网IP' IDENTIFIED WITH mysql_native_password BY '强密码';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '同步用户名'@'群晖公网IP';
    FLUSH PRIVILEGES;
  • 拒绝通配符主机:避免同步用户名@'%'(允许任意IP访问),仅授权群晖的固定公网IP;若群晖IP动态,可缩小网段范围(如123.45.0.0/16)。
  • 强密码策略:复制账号密码需满足「大小写+数字+特殊字符」,长度≥12位,且定期(每3个月)更换。

2. 业务/管理账号权限隔离

  • 主库账号分类
    • 业务账号:仅授予同步数据库库的SELECT/INSERT/UPDATE/DELETE权限,禁止DROP/ALTER等结构修改权限;
    • 管理账号:仅允许从公司内网IP访问,授予同步数据库库的完整权限,且开启多因素认证(腾讯云MySQL支持)。
  • 从库账号只读化:从库仅用于容灾和读查询,所有业务账号在从库仅授予SELECT权限,禁止任何写操作(INSERT/UPDATE/DELETE/DROP):
    -- 从库业务账号授权(仅读)
    GRANT SELECT ON 同步用户名.* TO 'biz_user'@'业务服务器IP';

3. 禁用高危默认账号

  • 主从库均删除/禁用root@%空用户名test等默认账号:
    -- 删除无用默认账号
    DROP USER IF EXISTS ''@'localhost';
    DROP USER IF EXISTS 'root'@'%';
    -- 仅保留root@localhost(本地管理)
    RENAME USER 'root'@'%' TO 'root'@'localhost';
  • 定期执行SELECT user, host FROM mysql.user;检查账号列表,清理非必要账号。

二、网络访问安全

1. 端口与IP白名单

  • 主库3306端口限制
    • 腾讯云安全组:仅放行「群晖IP(从库)+ 业务服务器IP + 管理员内网IP」访问3306端口,拒绝所有其他IP;
    • 宝塔防火墙:同步配置IP白名单,且禁止3306端口暴露到公网(若业务允许,可将主库3306端口改为非默认端口)。
  • 从库网络隔离:群晖MariaDB仅允许内网/指定IP访问,若需公网访问,通过VPN/跳板机中转,禁止直接暴露3306端口。

2. 加密传输(必做)

主从复制的binlog传输和客户端访问均开启SSL/TLS加密,避免数据明文传输:

  • 主库开启SSL:腾讯云MySQL默认开启SSL,需强制复制账号使用SSL连接:
    -- 主库:强制同步用户名使用SSL
    ALTER USER '同步用户名'@'群晖IP' REQUIRE SSL;
  • 从库配置SSL复制:修改从库同步配置,指定SSL参数(群晖MariaDB需先开启SSL):
    CHANGE MASTER TO
    MASTER_HOST='主库IP',
    MASTER_USER='同步用户名',
    MASTER_PASSWORD='密码',
    MASTER_SSL=1,  -- 开启SSL加密
    MASTER_SSL_CA='/path/to/ca.pem';  -- 腾讯云SSL证书路径

三、操作与配置安全

1. 禁止从库手动写操作

  • 从库my.cnf中配置read_only=1(超级用户仍可写),若需完全禁止所有写操作,配置super_read_only=1
    [mysqld]
    read_only = 1
    super_read_only = 1  # 禁止root等超级用户写操作
  • 仅在主库执行数据修改操作,从库的同步仅依赖binlog,禁止手动修改从库pcwnas库数据(避免主从不一致)。

2. 权限变更审计

  • 主从库开启权限操作日志:主库(腾讯云MySQL)开启「审计日志」功能,记录所有GRANT/REVOKE/ALTER USER等权限操作;
  • 定期(每周)检查权限变更记录,确认无未授权的权限调整:
    -- 查看最近权限操作(主库)
    SELECT * FROM mysql.general_log WHERE argument LIKE '%GRANT%' OR argument LIKE '%ALTER USER%';

四、监控与应急

1. 权限异常监控

  • 主库监控指标:配置告警规则,当出现「新账号创建、权限变更、3306端口异常访问」时,立即推送告警(腾讯云可配置短信/邮件告警);
  • 从库同步监控:监控Slave_IO_RunningSlave_SQL_Running状态,若变为No或出现权限相关错误,及时告警。

2. 应急处理

  • 权限泄露:立即删除泄露的账号/重置密码,执行FLUSH PRIVILEGES刷新权限,同时检查是否有异常数据操作;
  • 同步异常:若从库被恶意修改,暂停同步(STOP SLAVE),从主库重新全量备份恢复从库,再重启同步。

总结

  1. 最小权限:复制账号仅授复制权限,从库账号仅授只读权限,禁止通配符IP和高危权限;
  2. 网络隔离:3306端口仅放行必要IP,所有传输开启SSL加密;
  3. 操作管控:从库强制只读,权限变更审计,禁用默认高危账号;
  4. 监控告警:覆盖权限变更、同步状态、端口访问,确保异常及时发现。

这些建议可直接落地到你的主从库配置中,既保障同步功能正常,又能大幅降低权限泄露、数据篡改的风险。