数据库安全有两个方面:一是数据库的物理安全,是指运行数据库的服务器、数据传输线路等设备的正常运行,并将不受外力破坏或因网络拥塞而损坏不可用,防止元器件老化造成损失;第二,数据库逻辑安全。数据库中最重要的是数据。需要确保数据不因黑客攻击或程序崩溃而丢失或泄露。数据存储方式合理有效。顺序,访问方便。数据安全包括几个方面,即数据独立性、数据安全性、数据完整性、并发控制和故障恢复。数据独立性包括物理独立性和逻辑独立性两个方面。物理独立性是指用户的应用程序独立于磁盘上数据库存储的数据,逻辑独立性是指用户的应用程序独立于数据库的逻辑结构。数据安全要求数据按要求按照一定的结构合理存储,使用访问控制增加数据被窃取的可能性,使用加密存储增加数据窃取的犯罪成本,从而降低风险。数据完整性包括数据的正确性、有效性和一致性。正确性是指数据的输入值与数据表中相应字段的值和类型相同;有效性是指数据库中的数值约束在实际应用中满足数值段的理论范围;一致性是指不同的用户对于相同的数据,使用和理解应该是相同的。并发性:当多个用户同时访问数据库的同一个资源时,多个资源的不同读写顺序会导致不同的结果,因此需要进行并发控制。当一个用户在不断操作数据,而另一个用户中途读出变化的数据时,就会读取到不正确的数据,称为数据脏读。这时就需要对并发操作进行控制,杜绝和避免此类错误的发生,保证数据的正确性。故障恢复:由于软件原因(如计算机病毒、网络不稳定、程序错误、误操作等)或物理原因(如突然停电、自然灾害、硬件老化等)造成数据库损坏,应有做个恢复机制,把损失降到最低。01MySQL安全配置1、修改root用户密码,删除空密码。在MySQL控制台执行以下代码,将newpass替换为实际密码。mysql>SETPASSWORDFOR'root'@'localhost'=PASSWORD('newpass');QueryOK,0rowsaffected,1warning(0.01sec)2.删除默认数据库和数据库用户mysql默认安装了test,其他数据库用于测试,这可能包含不安全因素,去掉,如下:mysql>DROPDATABASEtest;QueryOK,0rowsaffected(0.00sec)MySQL数据库部分匿名用户密码为空。因此,任何人都可以连接到这些数据库。可以使用如下命令查看:mysql>select*frommysql.userwhereuser="";3、要更改默认的MySQL管理员帐号,首先要创建一个与Root用户具有相同权限的用户。如下:mysql>GRANTALLPRIVILEGESON*.*TO'new_admin'@'127.0.0.1'IDENTIFIEDBY'password';QueryOK,0rowsaffected,1warning(0.02sec)删除默认Root用户,如下。mysql>dropuserroot@'127.0.0.1';mysql>dropuserroot@'localhost';mysql>dropuserroot@'::1';QueryOK,0rowsaffected(0.04sec)4.使用单独的用户运行MySQL以在a中使用权限安全系统较低的独立系统用户运行MySQL,即使MySQL存在安全问题,也能有效防止黑客进一步入侵。5.禁止远程连接数据库。在my.cnf或my.ini的[mysqld]段配置如下参数,关闭对TCP/IP端口的监听,达到保证安全的效果。通过在my.cnf的[mysqld]部分添加以下行,skip-networking也可以只监视本地机器。bind-address=127.0.0.1如果必须启用远程连接数据库,可以给目标主机有限的访问权限。mysql>GRANTSELECT,INSERTONmydb.*TO'username'@'host_ip';6、限制连接用户数限制最大连接数,可以增加黑客对数据库进行暴力攻击所需的时间,增加攻击被发现的可能性,从而增加安全性。可以在my.ini或者my.cnf中找到max_connections=100,修改为max_connections=1000,然后在服务中重启MySQL。或者使用以下命令修改最大连接数。mysql>setGLOBALmax_connections=100;QueryOK,0rowsaffected(0.00sec)7.用户目录权限限制安装MySQL时以Root用户权限安装,软件默认为Root权限。安装完成后,需要将数据目录权限设置为实际运行MySQL的用户权限,如下。chown–Rmysql:mysql/home/mysql/data8、命令历史保护MySQL会在用户的主目录下生成一个.mysql_history文件,记录了用户输入的每条命令。该文件可能会泄露数据库结构甚至密码等敏感信息,因此需要及时清除或阻止该文件的生成。可以通过将日志文件定向到/dev/null来防止日志文件的生成。$exportMYSQL_HISTFILE=/dev/null9。禁止MySQL访问本地文件。LOADDATALOCALINFILE可以从文件系统中读取文件并将其显示在屏幕上或保存在数据库中。结合注入漏洞可以实现进一步的攻击。您可以通过将以下行添加到my.cnf配置文件的[mysqld]部分来禁用此功能。设置变量=本地输入文件=010。MySQL服务器权限控制数据库结构是在服务器上进行的,服务器安全是数据库安全的基本保证。很多软件对服务器的权限控制是合理的,这也是数据库安全的必要保证。11、MySQL数据库权限控制不仅服务器有不同的权限控制,MySQL数据库也应该有严格的权限控制机制。应该为不同的用户设置不同的权限。MySQL内置控制CREATE、DROP、GRANTOPTION、REFERENCES等26种操作权限,面向表、列、过程等对象,让每个用户的每一次查询都有一个清晰的权威定义,永不越界。出于安全考虑,在设置权限时需要遵循以下原则。(1)只授予满足需要的最小权限,防止用户做坏事。比如用户只需要查询,那么只需要select权限即可,不要授予用户update、insert、delete权限。(2)创建用户时,限制用户的登录主机,一般为指定IP或内网IP段。(3)初始化数据库时删除没有密码的用户。安装数据库时,会自动创建一些用户,这些用户默认没有密码。(4)为每个用户设置一个满足密码复杂度的密码。(5)定期清理不需要的用户,回收权限或删除用户。02MySQL数据库对数据库中的很多敏感字段进行了加密,不允许随意查看,开发人员、运维人员甚至数据库管理员都不允许查看。因此,要对数据库数据进行加密存储,最重要的是要防止黑客离开数据库。开发人员负责程序和加密算法的开发和部署,运维人员负责安装配置程序和配置密钥,但与数据库没有直接接触,数据库管理员负责数据库的维护和管理,但不知道密钥和加密算法,无法解密数据库中的数据内容。通过这样的块管理,保证了数据库数据的安全。运行以下SQL语句:INSERTINTO`admin`(`id`,`name`,`pass`)VALUES('1','admin',AES_ENCRYPT('admin','key'))将数据插入到表中如下图1所示。图1插入表中的数据通过查询语句:SELECT`id`,`name`,AES_DECRYPT(`pass`,'key')FROM`admin`可以看到表的内容,如图2.图2查询表中的内容。通常密钥是通过配置文件获取的,数据库管理是无法知道密钥的。因此,即使可以看到数据集,也无法获取到用户密码。即使黑客离开了数据库,用户数据在没有密钥的情况下仍然处于相对安全的状态。03数据库审计数据库审计(DBAudit)是一种实时记录数据库活动,分析和审查数据库操作,发现可能或正在进行的攻击并及时处理的安全措施。审核记录包括有关被审核的操作、执行操作的用户以及操作的时间和日期的信息。审计记录可以存储在数据库审计跟踪中或操作系统上的文件中。标准审计包括对权限、模式、对象和语句的操作。通过审计分析,可以了解数据库的运行状态、数据库命令的执行情况、最慢的SQL语句、访问最多的SQL语句、最大吞吐量、最大并发数等,进行系统优化。可以准确定位错误和入侵,便于系统维护和加固,便于取证和问责。04数据库漏洞扫描数据库漏洞扫描是一种对数据库系统进行自动安全评估的专业技术。在获得能够全面覆盖数据库安全风险的知识库的前提下,对应每一条安全漏洞知识,使用一套预定义的扫描策略。匹配目标数据库系统,找出其中的问题和缺陷。根据现有知识库中的知识,判断漏洞的危害性,并给出参考修复方案。该技术将繁琐缓慢的人工查漏改成更高效的机器查漏,变被动等待攻击为主动模拟攻击寻找漏洞,将抽象的漏洞情况以报表的形式有序呈现给用户方式,使用户更加清楚地意识到漏洞的危害和系统当前状态的安全状况,将复杂的查漏过程简化为补丁形式,极大地方便了用户构建和管理安全高效的数据库系统.05数据库防火墙数据库防火墙系统(DBFirewall)是一种基于数据库协议分析和控制技术的数据库安全防护系统。DBFirewall基于主动防御机制,实现数据库访问行为控制、危险操作阻断、可疑行为审计。它使用SQL特性来捕获和阻止SQL注入行为,防止Web应用程序中SQL注入漏洞造成的进一步损害。限制数据查询和下载次数,限制访问敏感数据的用户、地点和时间,防止敏感数据大量泄露,跟踪核实违法行为,详细记录违法行为,以便及时追究责任。06数据库脱敏数据库脱敏是指通过脱敏规则对某些敏感信息进行改造,实现对敏感隐私数据的可靠保护。对于客户安全数据或一些商业敏感数据,在不违反系统规则的情况下,对真实数据进行改造并提供测试,其有效性仍能得到保证(保持原有数据类型和业务格式要求))、完整性(保证长度不变,数据内容不丢失),关系型(维护表与表之间的数据关联关系和表内的数据关联关系)。身份证号、手机号、卡号、客户号等个人信息都需要进行脱敏处理。
