当你连接一个MySQL服务器时你通常应该使用一个口令口令不以明文在连接上传输
所有其它信息作为能被任何人读懂的文本被传输如果你担心这个你可使用压缩协议(MySQL和以上版本)使事情变得更难甚至为了使一切更安全你应该安装SSH用它你能在一个MySQL服务器与一个MySQL客户之间得到一个加密的TCP/IP连接
为了使一个MySQL系统安全强烈要求你考虑下列建议
对所有MySQL用户使用口令记住如果other_user没有口令任何人能简单地用mysql u other_user db_name作为任何其它的人登录对客户机/服务器应用程序客户可以指定任何用户名是常见的做法在你运行它以前你可以通过编辑mysql_install_db脚本改变所有用户的口令或仅仅MySQL root的口令象这样
shell> mysql u root mysql
mysql> UPDATE user SET Password=PASSWORD(new_password)
WHERE user=root;
mysql> FLUSH PRIVILEGES;
不要作为Unix的root用户运行MySQL守护进程mysqld能以任何用户运行你也可以创造一个新的Unix用户mysql使一切更安全如果你作为其它Unix用户运行mysqld你不需要改变在user表中的root用户名因为MySQL用户名与Unix 用户名没关系你可以作为其它Unix用户编辑mysqlserver启动脚本mysqld通常这用su命令完成对于更多的细节见 怎样作为一个一般用户运行MySQL
如果你把一个Unix root用户口令放在mysqlserver脚本中确保这个脚本只能对root是可读的
检查那个运行mysqld的Unix用户是唯一的在数据库目录下有读/写权限的用户
不要把process权限给所有用户mysqladmin processlist的输出显示出当前执行的查询正文如果另外的用户发出一个UPDATE user SET password=PASSWORD(not_secure)查询被允许执行那个命令的任何用户可能看得到mysqld为有process权限的用户保留一个额外的连接 以便一个MySQL root用户能登录并检查即使所有的正常连接在使用
不要把file权限给所有的用户
有这权限的任何用户能在拥有mysqld守护进程权限的文件系统那里写一个文件!为了使这更安全一些用SELECT INTO OUTFILE生成的所有文件对每个人是可读的并且你不能覆盖已经存在的文件
file权限也可以被用来读取任何作为运行服务器的Unix用户可存取的文件这可能被滥用例如通过使用LOAD DATA装载/etc/passwd进一个数据库表然后它能用SELECT被读入
如果你不信任你的DNS你应该在授权表中使用IP数字而不是主机名原则上讲secure选项对mysqld应该使主机名更安全在任何情况下你应该非常小心地使用包含通配符的主机名