MySQL 数据库一直以高性能、高可用性和易用性着称。它已成为世界上最受欢迎的开源数据库。大量个人、Web 开发人员和大公司在其网站、关键系统和软件包中广泛使用 MySQL 数据库。
通常,当许多公司部署产品时,安全性往往得不到应有的重视。对于企业来说,最重要的是让他们尽快运转起来,这样企业也能尽快盈利。
但是有些公司在安装MySQL时使用默认选项,导致他们的数据不安全,服务器也有被攻破的风险,短时间内可能会出现性能问题。以下将提供确保 MySQL 安全的最佳方法。
1、避免从互联网访问MySQL数据库,确保只有特定主机有访问权限
通过本地网络以外的计算机直接更改生产环境中的数据库是极其危险的。有时,管理员会打开主机访问数据库:
> 全部授予 *。 * 到;根’@’%’
这实际上完全释放了对 root 的访问权限。因此,将重要操作限制在特定主机上非常重要:
> 全部授予 *。 * TO ‘root’@”;
> 全部授予 *。 * TO ‘root’@’myip.’
> 冲洗
此时您仍然拥有完全访问权限,但只能访问指定的IP(无论是否为静态)。
2、定期备份数据库
灾难可能发生在任何系统上。服务器和 MySQL 也可能会崩溃,可能会受到威胁,数据可能会被删除。只有为最坏的情况做好了充分的准备,才能在事后迅速从灾难中恢复过来。企业最好将备份过程视为服务器的日常任务。
3、禁用或限制远程访问
如前所述,如果使用远程访问,请确保只有定义的主机才能访问服务器。这通常是通过 TCP 或任何其他防火墙软件或硬件来实现的。
为了限制网络的开启,管理员应该在f或my.ini的[]部分添加如下参数:
跳过-
这些文件位于 C: FilesMySQLMySQL 5.1 文件夹中,或者在 Linux 中,f 位于 /etc/,或者位于 /etc/mysql/。此命令禁用 MySQL 启动期间网络连接的初始化。请注意,这里仍然可以建立到 MySQL 服务器的本地连接。
另一个可行的解决方案是通过在 f 的 [] 部分添加以下行来强制 MySQL 仅监控本地机器:
绑定-= 127.0。 0.1
如果企业用户从他们自己的机器连接到服务器或安装到另一台机器上的 Web 服务器,您可能不愿意禁用网络访问。此时,考虑以下有限的权限访问:
mysql> 授予,在 mydb 上。 * TO;’@”
这里需要将用户名替换为对应的主机。
4、设置root用户密码并修改登录名
在 Linux 中,root 用户拥有对所有数据库的完全访问权限。因此,在Linux安装过程中,必须设置root密码。当然mysql数据库入侵,要更改默认的空密码,方法如下:
MySQL 控制台:
$ mysql -u root -p
在 MySQL 控制台中执行:
> SET FOR ‘root’@” = (”);
实际操作时,只需将上一行替换为实际密码即可。
另一种在 Linux 控制台中更改 root 密码的方法是使用工具:
$-u 根
此时只需将上一行替换为实际密码即可。
当然,这需要使用强密码来避免暴力破解。
为了更有效地提高root用户的安全性,另外一个好办法就是改名。为此,您必须更新表 user 中的 mySQL 数据库。在 MySQL 控制台中操作:
> 使用 mysql;
> user SET user = “” WHERE user = “root” ;
> 冲洗;
然后,要通过 Linux 访问 MySQL 控制台,将使用新的用户名:
$ mysql-u-p
5、删除测试数据库
在默认的 MySQL 安装中,匿名用户可以访问测试数据库。我们可以删除任何无用的数据库,以避免在意外情况下访问数据库。因此,在 MySQL 控制台中,执行:
> DROP 测试;
6、禁用本地
另一个更改是禁用“LOAD DATA LOCAL”命令,这有助于防止未经授权的用户访问本地文件。当在 PHP 应用程序中发现新的 SQL 注入漏洞时,这一点尤其重要。
另外,在某些情况下,可以使用LOCAL命令访问操作系统上的其他文件(如/etc/),应使用以下命令:
mysql> 将数据本地 ‘/etc/’ 加载到表中
更简单的方法是:
mysql> (“/etc/” )
要禁用LOCAL命令,需要在MySQL配置文件的[]部分添加以下参数:
设置-= 本地-= 0
7、删除匿名账户和废弃账户
某些 MySQL 数据库的匿名用户密码为空。因此,任何人都可以连接到这些数据库。您可以使用以下命令进行检查:
mysql> * from mysql.user where user = “” ;
在安全系统中,不会返回任何信息。另一种方式是:
mysql> SHOW FOR ”@”;
mysql> SHOW FOR;’@”
如果存在,那么任何人都可以访问该数据库,至少可以使用默认数据库“test”。检查方法如下:
shell> mysql -u
如果要删除账号,执行命令:
mysql> 删除用户””;
从 MySQL 0 版开始支持 DROP USER 命令。如果您使用的是旧版本的 MySQL,您可以像这样删除帐户:
mysql> 使用 mysql;
mysql> FROM user WHERE user = “” ;
mysql> 刷新;
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
> 显示;用户’@”
要定义用户的访问权限,请使用 GRANT 命令。在下面的例子中,user1 只能从数据库中的一个表中选择:
> 授予。 TO ‘user1’@”;
> 冲洗;
这样user1就不能改变这个表和数据库中其他表的任何数据了。
另一方面,如果您想删除用户的访问权限,您应该使用类似于 GRANT 命令的命令:
> 开启。 FROM ‘user1’@”;
> 冲洗;
10、删除和禁用 .files
当用户访问 MySQL 控制台时,所有命令历史记录都记录在 ~/.. 如果攻击者访问此文件,他可以知道数据库的结构。
$猫~/.
为了删除和禁用这个文件,日志应该发送到/dev/null。
$ =/dev/null
以上命令导致所有日志文件被定向到/dev/null,您应该从主文件夹中删除。:$ rm ~/.,并创建一个指向/dev/null的符号链接。
11、安全补丁
请务必使数据库保持最新。因为攻击者可以利用之前版本的已知漏洞访问公司的数据库。
12、启用日志
如果您的数据库服务器不执行任何查询,建议您启用跟踪日志记录。可以在/etc/f文件的[Mysql]部分添加:log =/var/log/.
对于生产环境中任务繁重的MySQL数据库,会造成高昂的服务器成本。
此外,您必须确保只有 root 和 mysql 才能访问这些日志文件。
错误日志
确保只有 root 和 mysql 可以访问 .err 日志文件。该文件存储在 mysql 数据历史记录中。该文件包含非常敏感的信息,如密码、地址、表名、存储过程名、代码等,可用于信息收集,在某些情况下,还可为攻击者提供利用数据库漏洞的信息。攻击者还可以知道安装数据库的机器或内部数据。
MySQL 日志
确保只有root和mysql可以访问日志文件,日志文件存放在mysql的目录中。
13、更改根目录
在 Unix 操作系统中,您可以更改当前运行的进程及其子进程的根目录。在另一个目录中重新获得 root 权限的程序无法访问或命名该目录外的文件。这个目录被称为“监狱”。
通过使用环境,可以限制MySQL进程及其子进程的写操作mysql数据库入侵,增加服务器的安全性。
您需要为环境确保一个专用目录,例如//mysql。另外,为了方便数据库管理工具的使用,可以在MySQL配置文件的[]部分更改如下参数:
[]
= //mysql/tmp/mysql.sock
14、禁用本地命令
LOAD DATA LOCAL 可以从文件系统中读取文件并将它们显示在屏幕上或将它们保存在数据库中。如果攻击者能够在应用程序中发现 SQL 注入漏洞,则该命令是相当危险的。可以从 MySQL 控制台操作以下命令:
> (“/etc/” );
此命令列出所有用户。解决这个问题最好的办法是在MySQL配置中禁用它,在/etc/mysql/f中找到/etc/f,在[]部分添加如下一行:set-=local-=0。完成它。
当然,唇齿留香,保护服务器的安全也是保证MySQL数据库安全的关键。服务器的安全关系到数据库的生死。
文章来源:https://blog.csdn.net/younger_z/article/details/37039867
感谢您的来访,获取更多精彩文章请收藏本站。

暂无评论内容