数据库安全之Mysql数据库安全加固 |
您所在的位置:网站首页 › 安全加固的对象包括 › 数据库安全之Mysql数据库安全加固 |
转载来源 : 数据库安全之Mysql数据库安全加固 :http://www.safebase.cn/article-260336-1.html 账号加固 以普通帐户安全运行mysqld,禁止mysql以root帐号权限运行。防止攻击者可能通过mysql进行提权。 配置/etc/my.cnf [mysql.server] user=mysql 12
普通用户启动 禁止以root账号运行mysqld; 检测操作 检查进程属主和运行参数是否包含–user=mysql类似语句: GRANT ALL ON . TO ‘root’@’%’; 如上这种这其实是完全放开了所以ip对root的访问。所以应该把重要的操作限制给特定主机: GRANT ALL ON . TO ‘root’@‘localhost’; GRANT ALL ON . TO ‘root’@‘指定ip’ ; FLUSH PRIVILEGES;
应按照应用分配不同账号,避免不同用户间共享账号 创建用户 设定指定ip地址登陆数据库 create user vvera@'指定ip地址' identified by 'vv@122'; 1这样就创建了一个名为:vvera 密码为:vv@122 的用户。然后登录一下。 应删除或锁定与数据库运行、维护等工作无关的账号 移除匿名账户和废弃的账户 DROP USER语句用于删除一个或多个MySQL账户。要使用DROP USER,必须拥有mysql数据库的全局CREATE USER权限或DELETE权限。账户名称的用户和主机部分与用户表记录的User和Host列值相对应。使用DROP USER,您可以取消一个账户和其权限,操作如下: # ps –ef | grep mysqld #grep -i user /etc/my.cnf 12该语句可以删除来自所有授权表的帐户权限记录。红色标识的无用账户都可以删除。
DROP USER不能自动关闭任何打开的用户对话。而且,如果用户有打开的对话,此时取消用户,则命令不会生效,直到用户对话被关闭后才生效。一旦对话被关闭,用户也被取消,此用户再次试图登录时将会失败。 检测操作:mysql 查看所有用户 create user vvera@'指定ip地址' identified by 'safe6@2020!'; 1
注意:仔细核对,防止误删 口令策略加固 检查帐户默认密码和弱密码,建议使用5.7之后版本提高安全性 修改帐户弱密码如要修改密码,执行如下命令:检查本地密码:(注意,5.7之前管理帐号root默认是空密码) mysql> update user set password=password('vv@122') where user='root'; mysql> flush privileges; 12检测方法 mysql> use mysql; mysql> select Host,User,Password,Select_priv,Grant_priv from user; 12
有些应用程序是通过一个特定数据库表的用户名和口令连接到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 allON .to vvera授权vvera全库权限grant selectON tanggula.*to vvera授权vvera唐古拉数据库查看权限grant createON tanggula.*to vvera授权vvera数据库添加权限 授权并创建用户,并指定密码 grant 权限 on 权限范围 to 用户 identified by '密码' 回收权限revoke 权限 on 范围 from 用户 12日志审计加固 数据库配置日志功能(切记不要用root用户,防止日志写shell) show variables like 'log_%';查看所有的log命令 1
禁用或限制远程访问 尽可能的禁止远程网络连接,防止猜解密码攻击,溢出攻击和嗅探攻击。 远程访问 直接通过本机之外的计算机改变生产环境中的数据库是异常危险的。 有时,管理员会打开远程主机对数据库的访问(应当设置为指定ip): GRANT ALL ON . TO ‘root’@’%’; 如上这种这其实是完全放开了所以ip对root的访问。所以应该把重要的操作限制给特定主机: GRANT ALL ON . TO ‘root’@‘localhost’; GRANT ALL ON . TO ‘root’@‘指定ip’ ; FLUSH PRIVILEGES; 如果数据库不需远程访问,可以禁止远程tcp/ip连接, 通过在mysqld服务器中参数中添加 --skip-networking 启动参数来使mysql不监听任何TCP/IP连接,增加安全性。强迫MySQL仅监听本机,方法是在my.cnf的[mysqld]部分增加下面一行:bind-address=127.0.0.1 如果非要开启远程访问,建议设置指定ip连接。 移除测试自带的test数据库和禁用LOCAL INFILE OUTFILE 删除可以匿名访问的test数据库和防止非授权用户访问本地文件 移除自带的测试(test)数据库 在默认安装的MySQL中,匿名用户可以访问test数据库。我们可以移除任何无用的数据库,以避免在不可预料的情况下访问了数据库。因而,在MySQL控制台中,执行:
另一项改变是禁用”LOAD DATA LOCAL INFILE”命令,这有助于防止非授权用户访问本地文件。在PHP应用程序中发现有新的SQL注入漏洞时,这样做尤其重要。此外,在某些情况下,LOCAL INFILE命令可被用于访问操作系统上的其它文件(如/etc/passwd),应使用下现的命令: mysql> SELECT load_file("/etc/passwd") 1
查看是否可以导入导出 show variables like '%secure%' 1secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下 禁用LOCAL OUTFILE命令(对导入同样生效),应当在MySQL配置文件的[mysqld]部分增加下面的参数: secure_file_priv= null 1删除历史文件 MySQL服务器有一个历史文件,它可以帮助你在安装出错的时候找到问题所在。历史文件包含敏感信息,比如说密码,如果这些信息被攻击者获得,那么将会给 你的数据库带来巨大的安全隐患。在安装成功后,历史文件并没有什么用,因此你可以使用cat /dev/null > ~/.mysql_history指令来删除文件当中的内容。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |