保障MySQL数据安全的14个最佳方法

保障MySQL数据安全的14个最佳方法,第1张

保障MySQL数据安全的14个最佳方法

一些企业在安装MySQL时使用默认选项,导致其数据不安全,服务器也面临被***,短时间内可能出现性能问题的风险。本文将提供确保MySQL安全性的最佳方法。


MySQL数据库一直以高性能、高可用性和易用性著称。它已经成为世界上最受欢迎的开源数据库。大量的个人、WEB开发者、大公司等。在他们的网站、关键系统和软件包中广泛使用MySQL数据库。


通常,当许多企业部署一个产品时,安全性常常被忽视。企业最关心的是让它尽快运行起来,让企业尽快盈利。


但是有些企业在安装MySQL时使用了默认选项,导致其数据不安全,服务器也面临被***,短时间内可能出现性能问题的风险。


下面将提供保护MySQL的最佳方法:


1。避免从互联网访问MySQL数据库,并确保特定主机具有访问权限


直接通过局域网外的计算机更改生产环境中的数据库是极其危险的。有时,管理员会打开主机对数据库的访问权限:


>在*上授予全部权限。*到“根”@“%”;


实际上,这是完全释放了对root的访问。因此,将重要 *** 作限制在特定主机上非常重要:


>在*上授予全部权限。*TO'root'@'localhost


>在*上授予全部权限。*到“root”@“myip.athome”


>刷新权限


此时,您仍然拥有完全访问权限,但是只有指定的IP(无论是否静态)可以访问它。


2。定期备份数据库


任何系统都可能发生灾难。服务器和MySQL也会崩溃,可能会遭遇***,数据可能会被删除。只有做好最坏情况的充分准备,才能在事后迅速从灾难中恢复过来。企业最好将备份过程作为服务器的日常工作。目前国内软件多备份在这方面做得比较好。基于Cloud5技术,实现多个云平台的数据交换和自动备份,帮助企业或个人保护和管理数据。当出现任何问题时,可以立即一键恢复所有原始数据,实现‘带血原地复活’。


3。禁用或限制远程访问


如前所述,如果使用远程访问,请确保只有定义的主机可以访问服务器。通常,这是通过TCP包装器、iptables或任何其他防火墙软件或硬件来实现的。


要限制网络套接字的打开,管理员应该在my.cnf或my.ini的[mysqld]部分添加以下参数:


跳过网络


这些文件在windows中位于c:\programfiles\MySQL\MySQLserver5.1文件夹中,或者在Linux中my.cnf位于/etc/或/etc/mysql/中。这个命令在MySQL启动时禁用网络连接的初始化。请注意,这里仍然可以建立与MySQL服务器的本地连接。


另一个可行的解决方案是通过在my.cnf的[mysqld]部分添加下面一行来强制MySQL只监听这台机器:


绑定地址=127.0.0.1


如果企业的用户从他们自己的机器连接到服务器,或者安装到另一台机器上的web服务器,您可能不愿意禁用网络访问。此时,考虑以下有限权限访问:


mysql>授予SELECT,在mydb上插入。*TO'someuser'@'somehost


这里,您必须将someuser改为username,将somehost改为相应的主机。


4。设置root用户的密码并更改其登录名


在linux中,根用户拥有对所有数据库的完全访问权。因此,在安装Linux的过程中,必须设置root密码。当然,要更改默认的空密码,方法如下:


访问MySQL控制台:$mysql-uroot-p


在MySQL控制台中执行:


>为'root'@'localhost'=PASSWORD('new_PASSWORD')设置密码;


在实际 *** 作中,只需将上面一行中的new_password更改为实际密码即可。


在Linux控制台中更改root密码的另一种方法是使用mysqladmin工具:


$mysqladmin-uroot密码new_password


此时,还需要将上面一行中的new_password替换为实际的密码。


当然,为了避免暴力破解,使用强密码是必要的。


为了更有效地提高root用户的安全性,另一个好办法就是重命名。为此,您必须更新users表中的mySQL数据库。在MySQL控制台中 *** 作:


>使用mysql


>更新用户集user="another_username"其中user="root


>刷新权限;


然后,需要使用新的用户名通过Linux访问MySQL控制台:


$mysql-uanother_username-p


5。移除测试数据库


在默认安装的MySQL中,匿名用户可以访问测试数据库。我们可以删除任何无用的数据库,以避免在意外情况下访问数据库。因此,在MySQL控制台中,执行:


>删除数据库测试;


6。禁用本地INFILE


另一个变化是禁用“加载数据本地INFILE”命令,这有助于防止未经授权的用户访问本地文件。当在PHP应用程序中发现新的SQL注入漏洞时,这一点尤其重要。


此外,在某些情况下,本地INFILE命令可用于访问 *** 作系统上的其他文件(如/etc/passwd),应使用以下命令:


mysql>将文件'/etc/passwd'中数据本地加载到表table1中


更简单的方法是:


mysql>选择加载文件("/etc/passwd")


要禁用本地INFILE命令,应将以下参数添加到MySQL配置文件的[mysqld]部分:


set-variable=local-infile=0


7。删除匿名账户和废弃账户


一些MySQL数据库中匿名用户的密码是空。因此,任何人都可以连接到这些数据库。您可以使用以下命令检查它:


mysql>select*frommysql.user其中user=


在安全系统中,不返回任何信息。另一种方式是:


mysql>显示对“@”本地主机的授权;


mysql>显示“@”myhost的授权;


如果存在授权,那么任何人都可以访问数据库,至少可以使用默认的数据库“test”。检验方法如下:


shell>mysql-ublablabla


如果要删除帐户,请执行以下命令:


mysql>删除用户“”;


从MySQL版本5.0开始就支持DROPUSER命令。如果您使用旧版本的MySQL,您可以按如下方式删除帐户:


mysql>使用mysql


mysql>从用户处删除,其中用户="";


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控制台中使用SHOWGRANT命令。


>显示对“用户”@“本地主机”的授权;


要定义用户的访问权限,请使用GRANT命令。在以下示例中,只能从电商数据库的计费表中选择user1:


>将billing.dianshang上的SELECT权限授予“user1”@“localhost”;


>刷新权限;


这样,user1就不能更改这个表和数据库中其他表的任何数据。


另一方面,如果要删除用户的访问权限,应该使用类似于GRANT命令的REVOKE命令:


>从“user1”@“localhost”中撤销对billing.ecommerce的选择;


>刷新权限;


10。移除并禁用。mysql_history文件


当用户访问MySQL控制台时,所有的命令历史都记录在~/中。mysql_历史。如果***访问这个文件,他就可以知道数据库的结构。


$猫~/。mysql_历史


要删除和禁用该文件,应该将日志发送到/dev/null。


$exportMYSQL_histfile=/dev/null


上述命令将所有日志文件定向到/dev/null。你应该移除。mysql_history:$rm~/。mysql_history,并创建一个指向/dev/null的符号链接。


11,安全补丁


确保数据库保持最新。因为***用户可以利用上一版本的已知漏洞访问企业数据库。


12。启用日志记录


如果您的数据库服务不执行任何查询,建议您启用跟踪。可以在/etc/my.cnf文件的[Mysql]部分添加:log=/var/log/mylogfile。


对于生产环境下任务繁重的MySQL数据库,因为会造成服务器成本高。


此外,只有root和mysql可以访问这些日志文件。


错误日志


确保只有root和mysql可以访问hostname.err日志文件。该文件存储在mysql数据历史中。该文件包含非常敏感的信息,如密码、地址、表名、存储过程名、代码等。它可以用来收集信息,在某些情况下,它还可以向***提供有关利用数据库漏洞的信息。***用户还可以知道安装数据库的机器或内部数据。


MySQL日志


确保只有root和mysql可以访问logfileXY日志文件,该文件存储在mysql的历史目录中。


十三。更改根目录


Unix *** 作系统中的Chroot可以改变当前运行的进程及其子进程的根目录。重新获取另一个目录的root权限的程序无法访问或命名该目录之外的文件,称为“chroot监狱”。


通过使用chroot环境,可以限制MySQL进程及其子进程的写 *** 作,增加服务器的安全性。


您应该确保chroot环境的专用目录,比如/chroot/mysql。此外,为了方便使用数据库管理工具,您可以在MySQL配置文件的[client]部分更改以下参数:


[客户]


socket=/chroot/MySQL/tmp/MySQL.sock


14。禁用本地INFILE命令


LoadLocalInfile可以从文件系统中读取文件并显示在屏幕上或者保存在数据库中。如果***能从应用程序中找到SQL注入漏洞,这个命令是相当危险的。可以从MySQL控制台 *** 作以下命令:


>SELECTLOAD_FILE("/etc/passwd");


该命令列出所有用户。解决这个问题最好的办法就是在MySQL配置中禁用它,在CentOS中找到/etc/my.cnf或者在Ubuntu中找到/etc/mysql/my.cnf,在[mysqld]部分添加下面一行:set-variable=local-infile=0。完成了。


当然,保护服务器的安全对MySQL数据库的安全也至关重要。服务器的安全是数据库的生死问题。多给备份,给你安全可靠的数据保障!


请指出它是否是从www.dbfen.com复制的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/783893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存