一些企业在安装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复制的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)