一、MySQL服务器安全规范 1. 禁止应用直连DB,一般通过代理访问 2. 禁止DB公网访问。 3. 禁止生产和办公互通,需生产环境和办公环境隔离。 4. Linux系统初始化安全选项: 1)、一些alias,写入/etc/profile,防止误操作 alias c='clear' alias cp='cp -i' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias MySQL='MySQL -U' 其中MySQL -U,防止update和delete没有指定条件,拒绝操作。 2)、删除linux操作日志信息、MySQL操作历史记录,避免被拖库。 rm .bash_history .MySQL_history ln -s /dev/null .bash_history ln -s /dev/null .MySQL_history 3)、避免"Too many open files" OS限制:cat /etc/security/limits.conf,MySQL用户能够打开65535个文件描述符 MySQL soft nofile 65535 MySQL hard nofile 65535 my.cnf参数修改: open_files_limit = 65535 innodb_open_files=65535 5. MySQL初始化配置安全选项: 1)、合理规划目录结构,日志目录顺序写建议机械盘(binlog/slowlog/relaylog),数据目录随机写建议ssd。 2)、MySQL相关目录设置专用MySQL组和用户,MySQL后台启动方式不能以root来启动,比如通过MySQL用户 。 3)、设置bind-address为内网本机IP。 4)、修改MySQL默认服务端口号,不推荐使用3306,不同业务设置不同的端口号。 5)、通过修改max_connections和max_user_connections来控制最大连接数,过载保护。 6)、启用safe-user-create,用户不能用GRANT语句创建新用户,除非用户有MySQL.user表的INSERT权限。 7)、禁止local-infile=1,打开load data local file权限,避免数据泄漏和黑客攻击。 8)、禁止skip-grant-tables启动,防止MySQL绕过权限系统 9)、配置加上skip-name-resolve,防止主机名不被解析。 10)、禁止skip-networking,其它机器不能使用tcp/ip连接。 11)、禁止symbolic-links=1,关闭软链接功能。
二、MySQL帐号管理安全策略和MySQL权限相关的系统表: 1. MySQL.USER表 2. MySQL.DB表 3. MySQL.TABLES_PRIV表 4. MySQL.COLUMNS_PRIV表 自上而下,逐级验证,逐级进行账户权限的粒度控制 MySQL初始化: 1. 删除线上密码长度小于16的帐号。 2. 删除非root账户 3. 删除非localhost和127.0.0.1账户。 4. 删除test数据库 5. 账号区分:监控帐号、管理帐号、复制帐号、备份帐号、应用帐号 1)、监控帐号(localhost和127.0.0.1): GRANT SELECT,PROCESS,REPLICATION CLIENT 2)、备份帐号(localhost和127.0.0.1): GRANT SELECT,LOCK TABLES,RELOAD 3)、复制帐号(对应主库ip): GRANT REPLICATION SLAVE,REPLICATION CLIENT 4)、管理帐号(对应代理ip): GRANT ALL PRIVILEGES 5)、root帐号 root密码采用强密码策略,至少32位随机密码,推荐使用pwgen和makepasswd来生成32位随机密码,包含大小写、数字、字母、特殊字符。 root帐号只授权localhost和127.0.0.1,不得授予%权限。 root帐号建议每3个月修改一次,不同实例,设置不同的root密码。 6)、应用帐号 a. 应用帐号不得拥有Super、Create、Drop、File,Grant,Reload,Shutdown,Process等权限。 b. 最小权限原则:select,insert,update,delete权限,禁止应用帐号权限设置为all。 c. 应用帐号不得拥有系统数据库(MySQL)的任何权限,不能使用*.*来授权。 d. 应用帐号只给所属应用的数据库授权,只给其所属应用的IP或代理授权。 e. MySQL从库必须添加read-only,只给select权限,严禁all,导致只读失效。 f. 应用帐号密码策略同root,建议每3个月修改一次。