mysql数据库的一些安全配置

为了更有效地改进root用户的安全性 , 另一种好方法是为其改名 。为此 , 你必须更新表用户中的MySQL数据库 。在MySQL控制台中进行操作:
> USE mysql;
> Update user SET user="another_username" Where user="root";
> FLUSH PRIVILEGES;
然后 , 通过linux访问MySQL控制台就要使用新用户名了:
$ mysql -u another_username -p
5、移除测试(test)数据库
在默认安装的MySQL中 , 匿名用户可以访问test数据库 。我们可以移除任何无用的数据库 , 以避免在不可预料的情况下访问了数据库 。因而 , 在MySQL控制台中 , 执行:
> Drop DATABASE test;
6、禁用LOCAL INFILE
另一项改变是禁用”LOAD DATA LOCAL INFILE”命令 , 这有助于防止非授权用户访问本地文件 。在php应用程序中发现有新的SQL注入漏洞时 , 这样做尤其重要 。
此外 , 在某些情况下 , LOCAL INFILE命令可被用于访问操作系统上的其它文件(如/etc/passwd) , 应使用下现的命令:
mysql> LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE table1
更简单的方法是:
mysql> Select load_file("/etc/passwd")
为禁用LOCAL INFILE命令 , 应当在MySQL配置文件的[mysqld]部分增加下面的参数:
set-variable=local-infile=0
7、移除匿名账户和废弃的账户
有些MySQL数据库的匿名用户的口令为空 。因而 , 任何人都可以连接到这些数据库 。可以用下面的命令进行检查:
mysql> Select * From mysql.user Where user="";
【mysql数据库的一些安全配置】在安全的系统中 , 不会返回什么信息 。另一种方法是:
mysql> SHOW GRANTS FOR ''@'localhost';
mysql> SHOW GRANTS FOR ''@'myhost';
如果grants存在 , 那么任何人都可以访问数据库 , 至少可以使用默认的数据库“test” 。其检查方法如下:
shell> mysql -u blablabla
如果要移除账户 , 则执行命令:
mysql> Drop USER "";
从MySQL的5.0版开始支持Drop USER命令 。如果你使用的老版本的MySQL , 你可以像下面这样移除账户:
mysql> use mysql;
mysql> Delete From user Where user="";
mysql> flush privileges;
8、降低系统特权
常见的数据库安全建议都有“降低给各方的特权”这一说法 。对于MySQL也是如此 。一般情况下 , 开发人员会使用最大的许可 , 不像安全管理一样考虑许可原则 , 而这样做会将数据库暴露在巨大的风险中 。
为保护数据库 , 务必保证真正存储MySQL数据库的文件目录是由”mysql” 用户和” mysql”组所拥有的 。
shell>ls -l /var/lib/mysql
此外 , 还要确保仅有用户”mysql”和root用户可以访问/var/lib/mysql目录 。
Mysql的二进制文件存在于/usr/bin/目录中 , 它应当由root用户或特定的”mysql”用户所拥有 。对这些文件 , 其它用户不应当拥有“写”的访问权:
shell>ls -l /usr/bin/my*
9、降低用户的数据库特权
有些应用程序是通过一个特定数据库表的用户名和口令连接到MySQL的 , 安全人员不应当给予这个用户完全的访问权 。
如果攻击者获得了这个拥有完全访问权的用户 , 他也就拥有了所有的数据库 。查看一个用户许可的方法是在MySQL控制台中使用命令SHOW GRANT
>SHOW GRANTS FOR 'user'@'localhost';
为定义用户的访问权 , 使用GRANT命令 。在下面的例子中 , user1仅能从dianshang数据库的billing表中选择:
> GRANT Select ON billing.dianshang TO 'user1'@'localhost';
> FLUSH PRIVILEGES;
如此一来 , user1用户就无法改变数据库中这个表和其它表的任何数据 。
另一方面 , 如果你要从一个用户移除访问权 , 就应使用一个与GRANT命令类似的REVOKE命令:
> REVOKE Select ON billing.ecommerce From 'user1'@'localhost';
> FLUSH PRIVILEGES;
10、移除和禁用.mysql_history文件
在用户访问MySQL控制台时 , 所有的命令历史都被记录在~/.mysql_history中 。如果攻击者访问这个文件 , 他就可以知道数据库的结构 。
$ cat ~/.mysql_history


推荐阅读