原文:http://www.onlamp.com/pub/a/onlamp/2002/07/11/MySQLtips.html
作为一个优秀而又复杂的数据库软件Mysql,我们应该对它有基本了解。本文介绍了一套最佳做法,让MySQL管理员在MySQL下的安全,维修,以及性能等方面有所帮助。
1:为“root”用户设置密码,然后重新命名该用户。
完成一个干净的MySQL安装后,第一件事就是为root用户设置密码:
[01:19:00] george@firenze$ mysqladmin -u root password '密码'
设置完密码,还需要更改“root”用户的名称。MySQL服务器可能是黑客入侵的目标之一,因为root用户存在于大多数的系统上,它是一个已知的用户并且拥有数据库超级管理权限。通过改变“root”用户的名称,可以提高黑客攻击的难度。 使用下面的命令,将重新命名为“root”用户名称:
[01:25:29] george@firenze$ mysql -u root -p mysql Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 72 to server version: 4.0.0-alpha-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> UPDATE user set user = 'admin' where user = 'root'; Query OK, 2 rows affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0
mysql> quit; Bye [01:25:51] george@firenze$ mysqladmin -u root -p reload Enter password:
当然,您也可以选择一个比“admin”更有创意的替代名称 。
2:拒绝外网用户直接访问MySQL数据库
有安全的网络服务,才能为MySQL提供一个相当坚实的保障。我们需要把mysql从互联网上隐藏起来。mysql端口只针对内网开放;如果在外网开放端口,很有可能导致攻击。
3:保护MySQL安装目录,防止其他用户访问 使用“mysql”用户安装,保护mysql数据目录。其他账户,甚至是MySQL dba都不应该置于mysql用户组,dba可以通过MySQL工具管理数据库。
4:避免二进制数据直接存放到MySQL中 MySQL返回所有结果集到客户端,所以应该避免直接将二进制数据存放在MySQL中,比如文件可以存放在文件系统中,而仅仅在MySQL中保存文件路径等信息
5:坚持标准sql语句的书写
6:避免使用AUTO_INCREMENT 在某些情况下避免使用AUTO_INCREMENT,自己生成序列化数据,在分库分表的情况下可以避免主键的重复
7:避免混合显示代码和数据库代码
8:Normalize with zeal, denormalize sparingly.
9:web服务器和应用服务器应用中使用连接池
10:使用explain优化你的sql语句 |