5.1.7. 06. 安全¶
基本安全:
密码够好
不给用户不需要的权限
在应用程序端确保无sql注入
安装本身安全:
确保数据文件、日志文件以及其他所有安装文件对无权限用户是不可读不可写的
在数据库系统本身用户的控制与安全
MySQL和你系统的网络安全:
有安全权限的用户只能本地或限定到特定的主机!
6.3. 用户帐号管理:
用户名最多16字符
可以对某一mysql用户进行限定:
http://dev.mysql.com/doc/refman/5.5/en/user-resources.html
5.1.8. 6.1. 安全使用指南¶
除了root用户外不要给任何其他用户mysql数据库的user表的访问权限(最重要)
了解MySQL让系统工作的权限情况,用
GRANT
和REVOKE
語句控制到MySQL的权限。不要分配一些不必要的权限(注: 可以用SHOW GRANTS
来查看权限,使用REVOKE把不必要的权限移除)不要使用明码密码
不要使用简单密码
使用防火墙
应用程序要设法安全
学会使用
tcpdump
和string
工具,它们可以帮你检查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