MySQL数据库安全配置规范操作
1.账号
以普通帐户安全运⾏mysqld,禁⽌mysql以root帐号权限运⾏,攻击者可能通过mysql获得系统root超级⽤户权限,完全控制系统。配置/etc/myf
[mysql.server]
user=mysql
补充操作说明
直接通过本地⽹络之外的计算机改变⽣产环境中的数据库是异常危险的。有时,管理员会打开主机对数据库的访问:
> GRANT ALL ON *.* TO 'root'@'%';
这其实是完全放开了对root的访问。所以,把重要的操作限制给特定主机⾮常重要:
> GRANT ALL ON *.* TO 'root'@'localhost';
> GRANT ALL ON *.* TO 'root'@'myip.athome' ;
> FLUSH PRIVILEGES;
判定条件
禁⽌以root账号运⾏mysqld;
检测操作
检查进程属主和运⾏参数是否包含--user=mysql类似语句:
# ps –ef | grep mysqld
#grep -i user /etc/myf
⽤户权限
应按照⽤户分配账号,避免不同⽤户间共享账号
创建⽤户设定指定ip地址登陆数据库
create user vvera@'指定ip地址'  identified by 'vv@122';
这样就创建了⼀个名为:vvera 密码为:vv@122 的⽤户。
然后登录⼀下。
检测⽅法
判定条件
不⽤名称的⽤户可以连接数据库;使⽤不同⽤户连接数据库
应删除或锁定与数据库运⾏、维护等⼯作⽆关的账号
移除匿名账户和废弃的账户
DROP USER语句⽤于删除⼀个或多个MySQL账户。要使⽤DROP USER,必须拥有mysql数据库的全局CREATE USER权限或DELETE 权限。账户名称的⽤户和主机部分与⽤户表记录的User和Host列值相对应。
使⽤DROP USER,您可以取消⼀个账户和其权限,操作如下:
DROP USER user;
该语句可以删除来⾃所有授权表的帐户权限记录。红⾊标识的⽆⽤账户都可以删除。
使⽤操作命令之后的结果
drop user ''@'mysql',''@'localhost','root'@'::1','root'@'mysql';
补充操作说明
要点:
DROP USER不能⾃动关闭任何打开的⽤户对话。⽽且,如果⽤户有打开的对话,此时取消⽤户,则命令不会⽣效,直到⽤户对话被关闭后才⽣效。⼀旦对话被关闭,⽤户也被取消,此⽤户再次试图登录时将会失败。
检侧操作:
mysql 查看所有⽤户的语句
输⼊指令
select user();
select user ,host ,password from mysql.user;
依次检查所列出的账户是否为必要账户,删除⽆⽤户或过期账户。
2.⼝令
检查帐户默认密码和弱密码
修改帐户弱密码
如要修改密码,执⾏如下命令:
检查本地密码:(注意,管理帐号root默认是空密码)
mysql> update user set password=password('vv@122') where user='root';
mysql> flush privileges;
检测⽅法
mysql> use mysql;
mysql> select Host,User,Password,Select_priv,Grant_priv from user;
3.权限设置
在数据库权限配置能⼒内,根据⽤户的业务需要,配置其所需的最⼩权限。
合理设置⽤户权限
补充操作说明
有些应⽤程序是通过⼀个特定数据库表的⽤户名和⼝令连接到MySQL的,安全⼈员不应当给予这个⽤户完全的访问权。
如果攻击者获得了这个拥有完全访问权的⽤户,他也就拥有了所有的数据库。查看⼀个⽤户许可的⽅法是在MySQL控制台中使⽤命令SHOW GRANT
>SHOW GRANTS FOR ; 'vvera'@'localhost'
为定义⽤户的访问权,使⽤GRANT命令。在下⾯的例⼦中,vvera仅能从tanggula数据库的mserver表中选择:
> GRANT SELECT ON tanggula. mserver TO 'vvera'@'localhost';
> FLUSH PRIVILEGES;
vvera⽤户就⽆法改变数据库中这个表和其它表的任何数据。
如果你要从⼀个⽤户移除访问权,就应使⽤⼀个与GRANT命令类似的REVOKE命令:
> REVOKE SELECT ON tanggula. mserver FROM 'vvera'@'localhost';
> FLUSH PRIVILEGES;
权限权限范围给谁授权权限范围
grant all ON .to vvera授权vvera全库权限
grant select ON tanggula.*to vvera授权vvera唐古拉数据库查看权限
grant create ON tanggula.*to vvera授权vvera唐古拉数据库添加权限
授权并创建⽤户,并指定密码
grant 权限 on 权限范围  to ⽤户 identified by '密码'
回收权限php远程连接mysql数据库
revoke 权限 on 范围 from ⽤户
4.⽇志审计
数据库应配置⽇志功能,
show variables like 'log_%';查看所有的log命令
show variables like 'log_bin';查看具体的log命令
5.禁⽤或限制远程访问
禁⽌⽹络连接,防⽌猜解密码攻击,溢出攻击和嗅探攻击。(仅限于应⽤和数据库在同⼀台主机)
参考配置操作
如果数据库不需远程访问,可以禁⽌远程tcp/ip连接, 通过在mysqld服务器中参数中添加 --skip-networking 启动参数来使mysql不监听任何TCP/IP连接,增加安全性。强迫MySQL仅监听本机,⽅法是在myf的[mysqld]部分增加下⾯⼀⾏:bind-address=127.0.0.1
6.移除测试(test)数据库和禁⽤LOCAL INFILE
删除可以匿名访问的test数据库和防⽌⾮授权⽤户访问本地⽂件
移除测试(test)数据库
在默认安装的MySQL中,匿名⽤户可以访问test数据库。我们可以移除任何⽆⽤的数据库,以避免在不可预料的情况下访问了数据库。因⽽,在MySQL控制台中,执⾏:
> DROP DATABASE test;
禁⽤LOCAL INFILE
另⼀项改变是禁⽤”LOAD DATA LOCAL INFILE”命令,这有助于防⽌⾮授权⽤户访问本地⽂件。在PHP应⽤程序中发现有新的SQL注⼊漏洞时,这样做尤其重要。此外,在某些情况下,LOCAL INFILE命令可被⽤于访问操作系统上的其它⽂件(如/etc/passwd),应使⽤下现的命令:
mysql> SELECT load_file("/etc/passwd")
为禁⽤LOCAL INFILE命令,应当在MySQL配置⽂件的[mysqld]部分增加下⾯的参数:
set-variable=local-infile=0
检查操作
Mysql>show databases;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。