如何提高mysql的安全性

author author     2023-03-25     108

关键词:

一 作为最流行的开源数据库引擎,MySQL本身是非常安全的。即便如此,你仍然需要添加额外的安全层来保护你的MySQL数据库不受攻击,毕竟任何经营网上
在线业务的人都不想冒数据库受到损坏的风险。接下来,我们将介绍一些实用的办法,你可以利用这些办法来保护MySQL数据库,以便加强网站的安全性。

二 保护操作系统

确保操作系统的安全是保护数据库安全的前提,因为如果整个运行环境不安全,那么网站上所有的东西都脆弱,很容易暴露于攻击者。为了维护操作系统和MySQL服务器,你可以使用以下方法:

2.1 主机数据库服务器和web服务器分别在不同的物理机器上,如果可能,在一个单独的服务器上运行数据库服务器,以预防由其他应用程序或服务的漏洞造成的服务器问题。

安装杀毒软件,防火墙以及所有推荐的补丁和更新,防火墙能有效地把流量过滤到MySQL服务器。为了更好的提高安全性,你还可以实行入口封锁。

禁用所有不必要的服务,而且这样的服务越少越好。

2.2 保护所有帐户和密码

攻击者侵入MySQL数据库最常见的一种方法是窃取有安全隐患的账户信息。为了降低出现这种风险的可能性,你不妨试一试下面的方法:

2.2.1. 给所有MySQL账户设置密码

客户程序并不是每次都能识别用户,因此,如果用户知道数据库名但是没有这个用户名的密码,那他可以指定任何其他用户名连接到MySQL数据库。让每个MySQL用户名都设置密码,这样一来,要想利用匿名账户建立连接将会变得很困难。

2.2.2. 不要使用根用户运行MySQL服务器

在安装MySQL的时候,默认情况下创建了一个命名为“root”的管理用户。每个人都知道这一点,所以攻击者通常试图侵入这个“root”用户来获取访问权限。为了保障这个重要帐户的安全,你需要给它重新命名,然后更改一个长并且复杂的密码。

2.2.3你可以在MySQL控制台使用mysql> RENAME USER root TO new_username;
指令给根用户重命名,使用mysql> SET PASSWORD FOR 'username'@'%hostname' =
PASSWORD('newpassword');//这是很重要的一条命令

指令来修改密码。

三. 减少管理员账户

管理员账户越多,风险越大,所以你应该保持尽可能最少的帐户数量,只有为那些真正需要它的人创建账户。此外,记得要删除未使用的和匿名的账户。如果你有很多管理员账户,那你需要定期检查并清理那些不必要的账户。

四. 加强所有的密码

除了管理员帐户,你还需要加强所有其他用户的密码。你可以检查所有的用户名和密码,必要的时候你还可以重置安全强度低的账户密码。虽说这样做会有点费时,但却是有必要的。

五 限制数据库权限

每个用户都应该被授予适当的权限以便数据库能够正常运行,但这样一来也加大了数据库的安全隐患。就数据库权限而言,我们有以下几点建议:

5.1. 不要授予非管理员用户文件/高级/程序权限

文件,高级和程序权限都不应该被滥用。文件权限让用户可以在文件系统中的任何一个地方编写文件,而程序权限让用户在任何时候都能够查看服务器活动,终止客户端连接甚至更改服务器操作。为了你的数据库安全,这些权限只能授予给管理员账户。

5.2. 限制或禁用显示数据库权限

显示数据库特权可以用于收集数据库信息,所以攻击者通常利用它来窃取数据并准备进一步攻击。你应该把这个权限授予那些真正需要的人,或者直接禁用这个权
限,你只需要把skip-show-database添加到MySQL数据库中的/etc/my.cnf配置文件中。对于Windows操作系统来说,则
需要添加到my.ini文件中。

5.3. 限制管理员和所有其他用户的权限

即使是管理员,也不要在同一账户中授予所有权限。因此我们建议你最好降低管理员账户访问数据的权限。至于其他的用户,你最好检查所有他们拥有的权限,以确保一切都是合适的。

六 删除风险组件

MySQL数据库的默认配置有一些不必要的组件,你可以考虑以下建议:

6.1. 禁用LOAD DATA LOCAL INFILE指令

这个命令允许用户读取本地文件甚至访问其他操作系统上的文件,这可能帮助攻击者收集重要的信息并利用应用程序的漏洞侵入你的数据库。你需要做的是把set-variable=local-infile=0插入到MySQL数据库的my.cnf文件中,来禁用这个指令。

6.2. 删除测试数据库

有一个默认的“测试”数据库用于测试目的。由于这个数据库有安全风险,匿名用户也可以访问,你应该使用mysql> DROP database test;指令尽快把它清除掉。

6.3. 删除历史文件

MySQL服务器有一个历史文件,它可以帮助你在安装出错的时候找到问题所在。历史文件包含敏感信息,比如说密码,如果这些信息被攻击者获得,那么将会给
你的数据库带来巨大的安全隐患。在安装成功后,历史文件并没有什么用,因此你可以使用cat /dev/null >
~/.mysql_history指令来删除文件当中的内容。

七 限制远程访问MySQL服务器

对于大多数用户来说,不需要通过不安全的开放网络来访问MySQL服务器。你可以通过配置防火墙或硬件,或者迫使MySQL只听从localhost来限制主机。此外,需要SSH隧道才能进行远程访问。

八 如果你想仅仅从本地主机来限制用户建立连接,你需要在在配置文件中添加bind-address=127.0.0.1。

8.1利用日志记录

启用日志记录让你可以检测服务器上的活动,这样你就可以分析失败的登录尝试和敏感文件的访问记录,以便了解是否存在向你的服务器和数据库发起的恶意活动。
你只需要把log =/var/log/mylogfile指令添加到MySQL配置文件中,就可以手动启用日志记录功能。

8.2至于日志记录,需要注意以下两点:

8.2.1日志记录仅适用于查询数量有限的数据库服务器。对于信息量大的服务器,这可能会导致高过载。

8.2.2由于“hostname.err”文件包含敏感数据表名和密码,只有“root”和“mysql”才有访问和记录这个文件的权限。
参考技术A

你可以这样操作。

    如果MYSQL客户端和服务器端的连接需要跨越并通过不可信任的网络,那么需要使用ssh隧道来加密该连接的通信。

    使用set password语句来修改用户的密码,先“mysql -u root”登陆数据库系统,然后“mysql> update mysql.user set password=password(‘newpwd’)”,最后执行“flush privileges”就可以了。

    Mysql需要提防的攻击有,防偷听、篡改、回放、拒绝服务等,不涉及可用性和容错方面。对所有的连接、查询、其他操作使用基于acl即访问控制列表的安全措施来完成。也有一些对ssl连接的支持。

    设置除了root用户外的其他任何用户不允许访问mysql主数据库中的user表;加密后存放在user表中的加密后的用户密码一旦泄露,其他人可以随意用该用户名/密码相应的数据库;

    使用grant和revoke语句来进行用户访问控制的工作;

    不要使用明文密码,而是使用md5()和sha1()等单向的哈系函数来设置密码;

    不要选用字典中的字来做密码;

    采用防火墙可以去掉50%的外部危险,让数据库系统躲在防火墙后面工作,或放置在dmz区域中;

    从因特网上用nmap来扫描3306端口,也可用telnet server_host 3306的方法测试,不允许从非信任网络中访问数据库服务器的3306号tcp端口,需要在防火墙或路由器上做设定;

    为了防止被恶意传入非法参数,例如where id=234,别人却输入where id=234 or 1=1导致全部显示,所以在web的表单中使用”或”"来用字符串,在动态url中加入%22代表双引号、%23代表井号、%27代表单引号;传递未检查过的值给mysql数据库是非常危险的;

    在传递数据给mysql时检查一下大小;

    应用程序需要连接到数据库应该使用一般的用户帐号,开放少数必要的权限给该用户;

    在各编程接口(c c++ php perl java jdbc等)中使用特定‘逃脱字符’函数;在因特网上使用mysql数据库时一定少用传输明文的数据,而用ssl和ssh的加密方式数据来传输;

    学会使用tcpdump和strings工具来查看传输数据的安全性,例如tcpdump -l -i eth0 -w -src or dst port 3306 strings。以普通用户来启动mysql数据库服务;

    不使用到表的联结符号,选用的参数 –skip-symbolic-links;

    确信在mysql目录中只有启动数据库服务的用户才可以对文件有读和写的权限;

    不许将process或super权限付给非管理用户,该mysqladmin processlist可以列举出当前执行的查询文本;super权限可用于切断客户端连接、改变服务器运行参数状态、控制拷贝复制数据库的服务器;

    file权限不付给管理员以外的用户,防止出现load data ‘/etc/passwd’到表中再用select 显示出来的问题;

    如果不相信dns服务公司的服务,可以在主机名称允许表中只设置ip数字地址;

    使用max_user_connections变量来使mysqld服务进程,对一个指定帐户限定连接数;

    grant语句也支持资源控制选项;

    启动mysqld服务进程的安全选项开关,–local-infile=0或1 若是0则客户端程序就无法使用local load data了,赋权的一个例子grant insert(user) on mysql.user to ‘user_name’@'host_name’;若使用–skip-grant-tables系统将对任何用户的访问不做任何访问控制,但可以用 mysqladmin flush-privileges或mysqladmin reload来开启访问控制;默认情况是show databases语句对所有用户开放,可以用–skip-show-databases来关闭掉。

    碰到error 1045(28000) access denied for user ‘root’@'localhost’ (using password:no)错误时,你需要重新设置密码,具体方法是:先用–skip-grant-tables参数启动mysqld,然后执行 mysql -u root mysql,mysql>update user set password=password(‘newpassword’) where user=’root’;mysql>flush privileges;,最后重新启动mysql就可以了。

参考技术B 其实这个和jsp没啥关系,只要你的代码没有比如爆源码或者直接上传shell这些弱智的漏洞就行了,一般的做法其实很简单,就是给mysql分配一个单独的账号,而不要使用root权限,而且只能针对目标数据库操作,其他的数据库没有操作权限,如果要附加上jsp的话,那么就是别让你的程序出现注入之类的漏洞,因为只要存在注入,那么至少可以肯定你的数据库会全部泄露,这样会使别人进一步入侵你甚至控制你的服务器,当然了linux和windows的服务器还是有差别的,上面给你说的只是最一般的方法本回答被提问者和网友采纳

如何关闭mysql打开的3306端口防止系统被入侵

...接就可以让Mysql关闭3306端口,既提高了访问速度,又提高了安全性.避免远程连接mysql数据库.本地程序可以通过mysql.sock来连接,不影响使用.SSH到主机上输入下面的命令:vi/etc/my.cnf在[mysqld]下添加:skip-networking最后重启Mysqlservicemysqldrestart... 查看详情

应该使用哪种 PDO 绑定方法来提高安全性?

】应该使用哪种PDO绑定方法来提高安全性?【英文标题】:WhichPDObindapproachshouldbeusedforgreatersecurity?【发布时间】:2015-03-2014:38:35【问题描述】:我知道在PHP中使用PDO更新MySQL数据库记录的两种方法。请有人解释一下我应该使用哪... 查看详情

如何提高MYSQL查询的性能?

】如何提高MYSQL查询的性能?【英文标题】:HowtoimprovetheperformanceofMYSQLquery?【发布时间】:2013-03-2100:32:58【问题描述】:我目前正在将数据馈送上传到我的数据库中。由于存在超过1千万条记录,我的数据库中被转储了。我需要改... 查看详情

如何提高这个 MySQL 查询的性能?

】如何提高这个MySQL查询的性能?【英文标题】:HowcanIimprovetheperformanceofthisMySQLquery?【发布时间】:2010-10-1515:21:11【问题描述】:我有一个MySQL查询:SELECTDISTINCTc.id,c.company_name,cd.firstname,cd.surname,cis.descriptionASindustry_sectorFROM(clientsc)... 查看详情

如何提高安全性?

底盘装甲真的有必要吗?看看老司机说的话。我相信在您购买新车之后,您都会把新车当成宠物,并为您的汽车做各种保护措施,例如给汽车贴个膜,装甲底盘等等。汽车贴膜许多人都知道,像手机薄膜这样的汽车中会添加一层... 查看详情

如何提高这个 MySQL 查询的速度?

】如何提高这个MySQL查询的速度?【英文标题】:HowcanIimprovethespeedofthisMySQLquery?【发布时间】:2013-10-0715:34:58【问题描述】:这是查询:SELECTu.uidasUID,fuo.uidasFUO_UID,fo.pridasFO_NAMEFROMusersuLEFTOUTERJOINfirstpoint_users_organisationsfuoON(u.uid=fuo. 查看详情

如何提高网络安全指数

黑客在入侵时常常会扫描你的计算机端口,如果安装了端口监视程序(比如Netwatch),该监视程序则会有警告提示。如果遇到这种入侵,可用工具软件关闭用不到的端口,比如,用“NortonInternetSecurity”关闭用来提供网页服务的80... 查看详情

如何提高账户密码存储的安全性——passwordsalt的使用

使用Salt+Hash将密码加密后再存储进数据库如果你需要保存密码(比如网站用户的密码),你要考虑如何保护这些密码数据,象下面那样直接将密码写入数据库中是极不安全的,因为任何可以打开数据库的人,都将可以直接看到这... 查看详情

如何简化/提高这个 MySQL 查询的性能?

】如何简化/提高这个MySQL查询的性能?【英文标题】:HowcanIsimplify/improvetheperformanceofthisMySQLquery?【发布时间】:2011-11-2911:56:04【问题描述】:我是MySQL的新手,多亏了这里更有经验的人的大力支持,我正在努力奋斗,同时在这个... 查看详情

定位技术提高无线局域网安全性

定位技术提高无线局域网安全性网络的使用是我们几乎天天用到的,所以网络的安全也就也就是我们关注的重点的了,这里就为我们说明一下提高网络的安全性。随着网络技术的发展,我们要如何进行网络安全性能的... 查看详情

如何提高这个mysql查询的速度

】如何提高这个mysql查询的速度【英文标题】:Howtoimprovethismysqlqueryinspeed【发布时间】:2010-07-0221:26:08【问题描述】:这里是SELECTtbl_rls.*,(SELECTcount(*)FROM`comments`WHERE`post_id`=`tbl_rls`.`id`)AS`t_comments`FROM`tbl_rls`WHERE1=1AND`status`<> 查看详情

服务器linux文件系统的安全性如何提高?

1.锁定系统重要文件系统运维人员有时候可能会遇到通过root用户都不能修改或者删除某个文件的情况,产生这种情况的大部分原因可能是这个文件被锁定了。在Linux下锁定文件的命令是chattr,通过这个命令可以修改ext2、ext3、ext4... 查看详情

如何提高此 PHP/MySQL 代码的性能?

】如何提高此PHP/MySQL代码的性能?【英文标题】:HowcanIimprovetheperformanceofthisPHP/MySQLcode?【发布时间】:2012-06-1618:30:11【问题描述】:以下是更大的PHP脚本的一部分,它使用CSV文件和clientid字段作为输入从MySQL数据库添加或禁用用... 查看详情

如何强制连接顺序以提高 MYSQL 中的查询性能?

】如何强制连接顺序以提高MYSQL中的查询性能?【英文标题】:HowtoforcetheorderofthejoinstoimprovequeryperformanceinMYSQL?【发布时间】:2020-06-1116:51:09【问题描述】:我有一条sql语句SELECTcount(*)Fromtable1innerjointable2oncondition1..innerjointableNoncondi... 查看详情

看雷诺公司如何提高提高基于模型的开发效率

...管理和电池管理系统。确保这类技术的完整性、稳固性和安全性是一项极具挑战的任务。对于雷诺来说,安全始终位于第一位,是公司产品开发 查看详情

如何提高使用odbc连接mysql数据库的效率?

使用VB开发,MYSQL数据库5.1版,ODBC也是5.1的,用VB连ODBC来连接MYSQL的数据库,发现操作记录稍多(2万条)的数据表时,效率非常低,请问怎么提高ODBC连接MYSQL数据库的操作效率?参考技术A没有太好的办法,数据大,慢是正常的 查看详情

如何提高数据安全性与可用性——行云管家堡垒机

众所周知,堡垒机的产生是为了数据安全,有数据显示,网站数据70%故障均来自内部人员的操作失误。作为企业的运维人员,其掌握着数据应用服务器的最高权限,一旦运维人员的操作出现任何问题,那么将给企业带来巨大的损... 查看详情

如何提高城市的公共安全

在上一周,我们走过了历史名城圣地亚哥·德·克雷塔罗和米却肯州首府莫雷利亚市,这次我们从墨西哥北部城市开始我们的旅途。圣佩德罗·加尔扎·加西亚在墨西哥北部,当代城市圣佩德罗·加尔扎·加西亚是墨西哥... 查看详情