mysql强化安全

mysql强化安全

本节将描述一些常见的需要注意的安全问题,以及一些可以使 MySQL 安装更加安全的、防止黑客和误操作的措施。
强化安全的目的有如下三点。

  • 保护好 MySQL 主机的安全,同时也需要关注其他能访问数据库的主机的安全。
  • 确保 MySQL 自身的安全,包括生产库和备份,应使用强密码,尽可能分配最小的权限给用户。
  • 确保网络、物理的安全,同时也需要关注信息内容的保密。

下面是一些安全的指导原则和注意事项。

  • 加强安全意识。比如加密办公电脑、个人笔记本上的重要数据,不要将未加密的数据上传到各种公共云存储中。在不安全的网络环境下,比如一些公共 Wi-Fi 中,涉及账号的操作可能会泄露你的信息。
  • 一般将所有数据库都部署于内网(仅监听内网 IP ),需要慎重对待跨 IDC 的数据库同步, MySQL 自身并没有很好的方式加密数据传输。
  • 开放外网访问的 MySQL 服务器,需要有相应的访问控制策略,例如通过部署防火墙来限制来源 IP 。
  • 如果条件允许,应该增加网络安全团队进行安全检查和审计。
  • 在不安全的网络环境中访问公司或远程维护机器,建议使用 VPN 。
  • 不要让任何人(除了 MySQL root 账户)访问 MySQL 数据库中的 mysql 系统库!
  • 用 GRANT 和 REVOKE 语句来控制对 MySQL 的访问。不要授予超过需求的权限。绝对不能为所有主机授权。
  • 不要给程序账号授予 SUPER 权限。
  • 生产库上不要留研发人员的账号。
  • 隔离生产环境、开发环境和测试环境,不允许研发、测试人员有权限更改生产环境或知道生产环境的账号密码。
  • 初始安装后应该移除匿名和空密码账号,可以尝试用 “mysql-u root” ,如果你能够成功连接服务器而没有要求 / 输入任何密码,则说明有问题。
  • 不要将纯文本密码保存到数据库中,不要从字典中选择密码,如果你的程序是一个客户端,必须用可读的方式存储密码,那么建议使用可解码的加密办法来存储。一些工具,如 telnet 、 ftp ,使用的是明文传输密码,建议不要使用,使用 ssh 、 sftp是更安全的方式。
  • 使用更安全的算法加密密码,一些流行算法,如 MD5 已经被证明是弱加密,不适合用于加密密码。曾经比较流行的散列算法SHA-1 也被证明不够安全。推荐的方式是在将密码传入散列函数进行加密之前,将其和一个无意义的字符串拼接在一起,这样即使用户选择了一个在字典中存在的单词作为密码,攻击者也很难使用字典攻击的手段破解密码。
  • 试试从 Internet 上使用工具扫描端口,或者使用 shell 命令 shell>telnet server_host 3306 ,如果得到连接并得到一些垃圾字符,则端口是打开着的,这种情况应从防火墙或路由器上关闭端口,除非你有足够合理的理由让它开着。
  • 避免 SQL 注入,不要信任应用程序的用户输入的任何数据。
  • 有时候人们会认为如果数据库只包含供公共使用的数据,则不需要保护。这是不正确的。即使允许显示数据库中的任何记录,也仍然应该保护和防范、拒绝服务攻击。
  • 不要向非管理用户授予 FILE 权限。拥有 FILE 权限的任何用户都能在拥有 mysqld 守护进程权限的文件系统里写入一个文件!
  • FILE 权限也可以被用来读取任何作为运行服务器的 Unix 用户可读取或访问的文件。使用该权限,可以将任何文件读入数据库表。这可能会被滥用,例如,通过使用 LOAD DATA 装载 “/etc/passwd” 进入一个数据库表,然后就能用 SELECT 显示它。也可以考虑加密传输 HTTPS 和 SSH tunnnel 等方案,这些措施将会更安全,但成本比较高,实施起来往往会受制于其他因素。相对来说,从应用层做一些安全措施、在硬件防火墙中设置规则及 MySQL 权限控制则是更经济、更标准化的做法,总之,需要在安全和方便上达到一个平衡。研发人员、测试人员也有必要熟悉目前常用的一些攻击手段的原理和预防,如会话( session )劫持、中间人攻击、 SQL 注入、跨站脚本攻击等。

留下评论