4.4.8. 06. 安全

  • 基本安全:

    • 密码够好
    • 不给用户不需要的权限
    • 在应用程序端确保无sql注入
  • 安装本身安全:

    确保数据文件、日志文件以及其他所有安装文件对无权限用户是不可读不可写的

  • 在数据库系统本身用户的控制与安全

  • MySQL和你系统的网络安全:

    有安全权限的用户只能本地或限定到特定的主机!

6.3. 用户帐号管理:

用户名最多16字符
可以对某一mysql用户进行限定:
http://dev.mysql.com/doc/refman/5.5/en/user-resources.html

4.4.9. 6.1. 安全使用指南

  • 除了root用户外不要给任何其他用户mysql数据库的user表的访问权限(最重要)

  • 了解MySQL让系统工作的权限情况,用 GRANTREVOKE 語句控制到MySQL的权限。不要分配一些不必要的权限(注: 可以用 SHOW GRANTS 来查看权限,使用REVOKE把不必要的权限移除)

  • 不要使用明码密码

  • 不要使用简单密码

  • 使用防火墙

  • 应用程序要设法安全

  • 学会使用 tcpdumpstring 工具,它们可以帮你检查MySQL数据流是否被加密:

    shell> tcpdump -l -i eth0 -w - src or dst port 3306 | strings
    

说明: 如果你得到不是明文也不能说就一定加密了!你还需要更高级的检查!

  • 绝对不要用系统用户root来启动mysql服务。这很危险,因为任何一个有文件权限(即用命令 GRANT 赋值)的用户,都可以让MySQL服务以系统root用户创建文件(因此,除非用选项 --user=root 指定,否则mysqld拒绝以root运行)
  • 保证只有那个运行mysqld的系统用户可以读和写数据库目录
  • 如果你不相信你的DNS,直接用IP会更好一些
  • 如果你想限制一个帐号的连接次数可以在mysqld中使用 max_user_connections
  • 如果插件目录对mysql服务是可写的,mysql用户就可以使用 SELECT ... INTO DUMPFILE 命令往这个目录里写可执行文件!
  • MySQLd与安全相关的选项: http://dev.mysql.com/doc/refman/5.5/en/privileges-options.html

6.2. MySQL权限系统:

//有以下几项mysql权限系统不能做到:
* 你不能指定拒绝某一指定用户
* 你不能設定一用户,它能创建和删除某一DB中表的权限,但没有创建或删除DB本身的权限
* 密码对一用户是全局的,你不能对某一对象(DB,表或routine)指定一密码。

//权限改变生效时间:

* 如果你用帐号管理語句如GRANT, REVOKE, SET_PASSWORD或RENAME_USER来间接修改授权表,立即生效
* 如果你用語句INSERT,UPDATE和DELETE直接修改授权表时,这不会立即生效,需要重启服务或用如下方法重载这些表

    mysql> FLUSH PRIVILEGES
    or
    shell> mysqladmin flush-privileges
    or
    shell> mysqladmin reload

http://dev.mysql.com/doc/refman/5.5/en/security.html