《MYSQL数据库系统安全管理_4.docx》由会员分享,可在线阅读,更多相关《MYSQL数据库系统安全管理_4.docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、MYSQL数据库系统安全管理目录正文.错误!未定义书签。1研究的背景.错误!未定义书签。2研究的目的和意义.错误!未定义书签。3研究的内容.错误!未定义书签。MySQL数据库的安全配置.错误!未定义书签。系统内部安全.错误!未定义书签。外部网络安全.错误!未定义书签。MySQL用户帐号管理.错误!未定义书签。MD5加密.错误!未定义书签。数据库中数据加密的原因.错误!未定义书签。加密方式.错误!未定义书签。Md5加密原理.错误!未定义书签。详细算法.错误!未定义书签。4总结.错误!未定义书签。参考文献:.错误!未定义书签。附录:.错误!未定义书签。MySQL数据库安全管理摘要:MySQL是完全
2、网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系构造的分布式数据库管理系统。它具有功能强、使用简便、管理方便、运行速度快、安全可靠性强等优点,用户可利用很多语言编写访问MySQL数据库的程序,十分是与PHP更是黄金组合,运用特别广泛。由于MySQL是多平台的数据库,它的默认配置要考虑各种情况下都能适用,所以在用户本人的使用环境下应该进行安全加固。用户有责任维护MySQL数据库系统的数据安全性和完好性。关键词:MYSQL;数据库;数据库安全;访问控制;MD5加密正文MySQL数据库的安全配置必须从两个方面入手,系统内部安全和外部网络安全;MySQL用户帐号管理主要用grant(受权)
3、和revoke(撤权)两个SQL指令来管理;MD5在实际中的一个应用就是对数据库中的用户信息加密,当用户创立一个新的账号或者密码,他的信息不是直接保存到数据库,而是经过一次加密以后再保存,这样,即便这些信息被泄露,也不能立即理解这些信息的真正含义。有效的提高了前台和后台的数据安全性。1研究的背景随着计算机技术和信息技术的迅速发展。数据库的应用特别广泛,深化到各个领域,但随之而来产生了数据的安全问题。近年来,数据库供给商竞相为群众提供功能丰富的数据库环境,大多数主要系统都支持XML、Web服务、分布式复制、操作系统集成以及其他一些有用的功能。与以前相比,数据库愈加容易遭遭到攻击,它已经成为了更有
4、价值的攻击目的,所以需要配置更多的安全功能,管理也要愈加的慎重。2研究的目的和意义本文对MySQL数据库的安全配置、MySQL用户帐号管理以及使用MD5加密提高数据库前台和后台数据安全性做了具体研究。由于MySQL是多平台的数据库,它的默认配置要考虑各种情况下都能适用,所以用户需要根据详细的环境进行相关的安全配置,通过本文的研究,对怎样提高数据库的安全性有很大的帮助。3研究的内容MySQL数据库的安全配置3.1.1系统内部安全MySQL安装好,运行了mysql_db_install脚本以后就会建立数据目录和初始化数据库。假如我们用MySQL源码包安装,而且安装目录是/usr/local/mys
5、ql,那么数据目录一般会是/usr/local/mysql/var。数据库系统由一系列数据库组成,每个数据库包含一系列数据库表。MySQL是用数据库名在数据目录建立建立一个数据库目录,各数据库表分别以数据库表名作为文件名,扩展名分别为MYD、MYI、frm的三个文件放到数据库目录中。MySQL的受权表给数据库的访问提供了灵敏的权限控制,但是假如本地用户拥有对库文件的读权限的话,攻击者只需把数据库目录打包拷走,然后拷到本人本机的数据目录下就能访问窃取的数据库。所以MySQL所在的主机的安全性是最首要的问题,如果主机不安全,被攻击者控制,那么MySQL的安全性也无从谈起。其次就是数据目录和数据文件
6、的安全性,也就是权限设置问题。从MySQL主站一些老的binary发行版来看,版本中数据目录的属性是775,这样非常危险,任何本地用户都能够读数据目录,所以数据库文件很不安全。版本中数据目录的属性是770,这种属性也有些危险,本地的同组用户既能读也能写,所以数据文件也不安全。版本数据目录的属性是700,这样就比拟好,只要启动数据库的用户能够读写数据库文件,保证了本地数据文件的安全。假如启动MySQL数据库的用户是mysql,那么像如下的目录和文件的是安全的,请注意数据目录及下面的属性:shellls-l/usr/local/mysqltotal40drwxrwxr-x2rootroot4096
7、Feb2720:07bindrwxrwxr-x3rootroot4096Feb2720:07includedrwxrwxr-x2rootroot4096Feb2720:07infodrwxrwxr-x3rootroot4096Feb2720:07libdrwxrwxr-x2rootroot4096Feb2720:07libexecdrwxrwxr-x3rootroot4096Feb2720:07manshellls-l/usr/local/mysql/vartotal8drwx-2mysqlmysql4096Feb2720:08mysqldrwx-2mysqlmysql4096Feb2720:
8、08testshellls-l/usr/local/mysql/var/mysqltotal104-rw-1mysqlmysql0Feb2720:08-rw-1mysqlmysql1024Feb2720:08-rw-1mysqlmysql8778Feb2720:08-rw-1mysqlmysql302Feb2720:08-rw-1mysqlmysql3072Feb2720:08-rw-1mysqlmysql8982Feb2720:08-rw-1mysqlmysql0Feb2720:08-rw-1mysqlmysql1024Feb2720:08-rw-1mysqlmysql8641Feb2720
9、:08-rw-1mysqlmysql0Feb2720:08-rw-1mysqlmysql1024Feb2720:08-rw-1mysqlmysql8958Feb2720:08-rw-1mysqlmysql0Feb2720:08-rw-1mysqlmysql1024Feb2720:08假如这些文件的属主及属性不是这样,请用下面两个命令修正之:shellchown-R/usr/local/mysql/varshellchmod-Rgo-rwx/usr/local/mysql/var用root用户启动远程服务一直是安全大忌,由于假如服务程序出现问题,远程攻击者极有可能获得主机的完全控制权。MySQL
10、从3.23.15版本开场时作了小小的改动,默认安装后服务要用mysql用户来启动,不允许root用户启动。假如非要用root用户来启动,必须加上-user=root的参数(./safe_mysqld-user=root&)。由于MySQL中有LOADDATAINFILE和SELECT.INTOOUTFILE的SQL语句,假如是root用户启动了MySQL服务器,那么,数据库用户就拥有了root用户的写权限。不过MySQL还是做了一些限制的,比方LOADDATAINFILE只能读全局可读的文件,SELECT.INTOOUTFILE不能覆盖已经存在的文件。本地的日志文件也不能忽视,包括shell的
11、日志和MySQL本人的日志。有些用户在本地登陆或备份数据库的时候为了图方便,有时会在命令行参数里直接带了数据库的密码,如:shell/usr/local/mysql/bin/mysqldump-uroot-ptesttestshell/usr/local/mysql/bin/mysql-urootptest这些命令会被shell记录在历史文件里,比方bash会写入用户目录的.bash_history文件,假如这些文件不慎被读,那么数据库的密码就会泄漏。用户登陆数据库后执行的SQL命令也会被MySQL记录在用户目录的.mysql_history文件里。假如数据库用户用SQL语句修改了数据库密码,
12、也会因.mysql_history文件而泄漏。所以我们在shell登陆及备份的时候不要在-p后直接加密码,而是在提示后再输入数据库密码。另外这两个文件我们也应该不让它记录我们的操作,以防万一。shellrm.bash_history.mysql_historyshellln-s/dev/null.bash_historyshellln-s/dev/null.mysql_history上门这两条命令把这两个文件链接到/dev/null,那么我们的操作就不会被记录到这两个文件里了。3.1.2外部网络安全MySQL数据库安装好以后,Unix平台的user表是这样的:mysqlusemysql;Dat
13、abasechangedmysqlselectHost,User,Password,Select_priv,Grant_privfromuser;图3.1.2.1Unix平台的user表Windows平台的user表是这样的:mysqlusemysql;DatabasechangedmysqlselectHost,User,Password,Select_priv,Grant_privfromuser;图3.1.2.2Windows平台的user表实际上Unix平台的MySQL默认只允许本机才能连接数据库。但是缺省root用户口令是空,所以当务之急是给root用户加上口令。给数据库用户加口令有
14、三种方法:在shell提示符下用mysqladmin命令来改root用户口令:shellmysqladmin-urootpasswordtest这样,MySQL数据库root用户的口令就被改成test了。用setpassword修改口令:mysqlsetpasswordforrootlocalhost=password(test);这时root用户的口令就被改成test了。直接修改user表的root用户口令:mysqlusemysql;mysqlupdateusersetpassword=password(test)whereuser=root;mysqlflushprivileges;这样
15、,MySQL数据库root用户的口令也被改成test了。其中最后一句命令flushprivileges的意思是强迫刷新内存受权表,否则用的还是缓冲中的口令,这时非法用户还能够用root用户及空口令登陆,直到重启MySQL服务器。我们还看到user为空的匿名用户,固然它在Unix平台下没什么权限,但为了安全起见我们应该删除它:mysqldeletefromuserwhereuser=;Windows版本MySQL的user表有很大不同,我们看到Host字段除了localhost还有是%。这里%的意思是允许任意的主机连接MySQL服务器,这是非常不安全的,给攻击者造成可乘之机,我们必须删除Host
16、字段为%的记录:mysqldeletefromuserwherehost=%;默认root用户的空密码也是必须修改,三种修改方法和Unix平台一样。对user表操作以后不要忘了用flushprivileges来强迫刷新内存受权表,这样才能生效。MySQL的5个受权表:user,db,host,tables_priv和columns_priv提供非常灵敏的安全机制,从MySQL3.22.11开场引入了两条语句GRANT和REVOKE来创立和删除用户权限,能够方便的限制哪个用户能够连接服务器,从哪里连接以及连接后能够做什么操作。在3.22.11版本以前的MySQL受权机制不完善,和新版本也有较大的
17、不同,建议升级到最新版本的MySQL。我们先来了解受权表的构造。MySQL受权表的构造与内容:mysqldescuser;user表是5个受权表中最重要的一个,列出能够连接服务器的用户及其加密口令,并且它指定他们有哪种全局超级用户权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。所以我们不能给任何用户访问表的权限!权限讲明:图3.1.2.3权限讲明mysqldescdb;图3.1.2.4数据库db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。mysqldeschost;图3.1.2.5host表host表与db表结合使用在一个较好层次上控制特定
18、主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响。MySQL用户帐号管理MySQL用户帐号管理主要用grant(受权)和revoke(撤权)两个SQL指令来管理。这两个指令本质是通过操作user(连接权限和全局权限)、db(数据库级权限)、tables_priv(数据表级权限)、columns_priv(数据列级权限)四个权限表来分配权限的。host权限表不受这两个指令影响。下面将会具体介绍用户权限管理的内容。GRANT语法讲明:GRANTprivileges(columns)#privileges表示授予的权限,columns表示作用的列(可选)
19、ONwhat#设置权限级别,全局级、数据库级、数据表级和数据列级TOaccount#权限授予的用户,用user_namehost_name这种用户名、主机名格式IDENTIFIEDBYpassword#设置用户帐号密码REQUIREencryptionrequirements#设置经过SSL连接帐号WITHgrantorresourcemanagementoptions;#设置帐号的管理和资源(连接服务器次数或查询次数等)选项示例:mysqlgrantallondb.*totestlocalhostidentifiedbytest;上例运行后的效果是,test用户只能通过test密码从本机访问db数据库mysqlgrantallondb.*totest%identifiedbytest;上例运行后的效果是,test用户可通过test密码从任意计算机上访问db数据库。%代表任意字符,_代表一个任意字符。主机名部份还能够是IP地址。表3.2.1访问权限表