MYSQL数据库系统安全管理Word格式.docx

上传人:b****5 文档编号:20028557 上传时间:2023-01-16 格式:DOCX 页数:16 大小:197.86KB
下载 相关 举报
MYSQL数据库系统安全管理Word格式.docx_第1页
第1页 / 共16页
MYSQL数据库系统安全管理Word格式.docx_第2页
第2页 / 共16页
MYSQL数据库系统安全管理Word格式.docx_第3页
第3页 / 共16页
MYSQL数据库系统安全管理Word格式.docx_第4页
第4页 / 共16页
MYSQL数据库系统安全管理Word格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

MYSQL数据库系统安全管理Word格式.docx

《MYSQL数据库系统安全管理Word格式.docx》由会员分享,可在线阅读,更多相关《MYSQL数据库系统安全管理Word格式.docx(16页珍藏版)》请在冰豆网上搜索。

MYSQL数据库系统安全管理Word格式.docx

如果我们用MySQL源码包安装,而且安装目录是/usr/local/mysql,那么数据目录一般会是/usr/local/mysql/var。

数据库系统由一系列数据库组成,每个数据库包含一系列数据库表。

MySQL是用数据库名在数据目录建立建立一个数据库目录,各数据库表分别以数据库表名作为文件名,扩展名分别为MYD、MYI、frm的三个文件放到数据库目录中。

MySQL的授权表给数据库的访问提供了灵活的权限控制,但是如果本地用户拥有对库文件的读权限的话,攻击者只需把数据库目录打包拷走,然后拷到自己本机的数据目录下就能访问窃取的数据库。

所以MySQL所在的主机的安全性是最首要的问题,如果主机不安全,被攻击者控制,那么MySQL的安全性也无从谈起。

其次就是数据目录和数据文件的安全性,也就是权限设置问题。

从MySQL主站一些老的binary发行版来看,3.21.xx版本中数据目录的属性是775,这样非常危险,任何本地用户都可以读数据目录,所以数据库文件很不安全。

3.22.xx版本中数据目录的属性是770,这种属性也有些危险,本地的同组用户既能读也能写,所以数据文件也不安全。

3.23.xx版本数据目录的属性是700,这样就比较好,只有启动数据库的用户可以读写数据库文件,保证了本地数据文件的安全。

如果启动MySQL数据库的用户是mysql,那么像如下的目录和文件的是安全的,请注意数据目录及下面的属性:

shell>

ls-l/usr/local/mysql

total40

drwxrwxr-x2rootroot4096Feb2720:

07bin

drwxrwxr-x3rootroot4096Feb2720:

07include

07info

07lib

07libexec

07man

ls-l/usr/local/mysql/var

total8

drwx------2mysqlmysql4096Feb2720:

08mysql

08test

ls-l/usr/local/mysql/var/mysql

total104

-rw-------1mysqlmysql0Feb2720:

08columns_priv.MYD

-rw-------1mysqlmysql1024Feb2720:

08columns_priv.MYI

-rw-------1mysqlmysql8778Feb2720:

08columns_priv.frm

-rw-------1mysqlmysql302Feb2720:

08db.MYD

-rw-------1mysqlmysql3072Feb2720:

08db.MYI

-rw-------1mysqlmysql8982Feb2720:

08db.frm

08func.MYD

08func.MYI

-rw-------1mysqlmysql8641Feb2720:

08func.frm

08host.MYD

08host.MYI

-rw-------1mysqlmysql8958Feb2720:

08host.frm

08tables_priv.MYD

08tables_priv.MYI

如果这些文件的属主及属性不是这样,请用以下两个命令修正之:

chown-Rmysql.mysql/usr/local/mysql/var

chmod-Rgo-rwx/usr/local/mysql/var

用root用户启动远程服务一直是安全大忌,因为如果服务程序出现问题,远程攻击者极有可能获得主机的完全控制权。

MySQL从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的日志和MySQL自己的日志。

有些用户在本地登陆或备份数据库的时候为了图方便,有时会在命令行参数里直接带了数据库的密码,如:

/usr/local/mysql/bin/mysqldump-uroot-ptesttest>

test.sql

/usr/local/mysql/bin/mysql-uroot–ptest

这些命令会被shell记录在历史文件里,比如bash会写入用户目录的.bash_history文件,如果这些文件不慎被读,那么数据库的密码就会泄漏。

用户登陆数据库后执行的SQL命令也会被MySQL记录在用户目录的.mysql_history文件里。

如果数据库用户用SQL语句修改了数据库密码,也会因.mysql_history文件而泄漏。

所以我们在shell登陆及备份的时候不要在-p后直接加密码,而是在提示后再输入数据库密码。

另外这两个文件我们也应该不让它记录我们的操作,以防万一。

rm.bash_history.mysql_history

ln-s/dev/null.bash_history

ln-s/dev/null.mysql_history

上门这两条命令把这两个文件链接到/dev/null,那么我们的操作就不会被记录到这两个文件里了。

3.1.2外部网络安全

MySQL数据库安装好以后,Unix平台的user表是这样的:

mysql>

usemysql;

Databasechanged

selectHost,User,Password,Select_priv,Grant_privfromuser;

图3.1.2.1Unix平台的user表

Windows平台的user表是这样的:

usemysql;

图3.1.2.2Windows平台的user表

实际上Unix平台的MySQL默认只允许本机才能连接数据库。

但是缺省root用户口令是空,所以当务之急是给root用户加上口令。

给数据库用户加口令有三种方法:

在shell提示符下用mysqladmin命令来改root用户口令:

mysqladmin-urootpasswordtest

这样,MySQL数据库root用户的口令就被改成test了。

用setpassword修改口令:

setpasswordforroot@localhost=password('

test'

);

这时root用户的口令就被改成test了。

直接修改user表的root用户口令:

updateusersetpassword=password('

)whereuser='

root'

;

flushprivileges;

这样,MySQL数据库root用户的口令也被改成test了。

其中最后一句命令flushprivileges的意思是强制刷新内存授权表,否则用的还是缓冲中的口令,这时非法用户还可以用root用户及空口令登陆,直到重启MySQL服务器。

我们还看到user为空的匿名用户,虽然它在Unix平台下没什么权限,但为了安全起见我们应该删除它:

deletefromuserwhereuser='

'

Windows版本MySQL的user表有很大不同,我们看到Host字段除了localhost还有是%。

这里%的意思是允许任意的主机连接MySQL服务器,这是非常不安全的,给攻击者造成可乘之机,我们必须删除Host字段为%的记录:

deletefromuserwherehost='

%'

默认root用户的空密码也是必须修改,三种修改方法和Unix平台一样。

对user表操作以后不要忘了用flushprivileges来强制刷新内存授权表,这样才能生效。

MySQL的5个授权表:

user,db,host,tables_priv和columns_priv提供非常灵活的安全机制,从MySQL3.22.11开始引入了两条语句GRANT和REVOKE来创建和删除用户权限,可以方便的限制哪个用户可以连接服务器,从哪里连接以及连接后可以做什么操作。

在3.22.11版本以前的MySQL授权机制不完善,和新版本也有较大的不同,建议升级到最新版本的MySQL。

我们先来了解授权表的结构。

MySQL授权表的结构与内容:

descuser;

user表是5个授权表中最重要的一个,列出可以连接服务器的用户及其加密口令,并且它指定他们有哪种全局(超级用户)权限。

在user表启用的任何权限均是全局权限,并适用于所有数据库。

所以我们不能给任何用户访问mysql.user表的权限!

权限说明:

图3.1.2.3权限说明

descdb;

图3.1.2.4数据库

db表列出数据库,而用户有权限访问它们。

在这里指定的权限适用于一个数据库中的所有表。

deschost;

图3.1.2.5host表

host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。

这个表不受GRANT和REVOKE语句的影响。

3.2MySQL用户帐号管理

MySQL用户帐号管理主要用grant(授权)和revoke(撤权)两个SQL指令来管理。

这两个指令实质是通过操作user(连接权限和全局权限)、db(数据库级权限)、tables_priv(数据表级权限)、columns_priv(数据列级权限)四个权限表来分配权限的。

host权限表不受这两个指令影响。

下面将会详细介绍用户权限管理的内容。

GRANT语法说明:

GRANTprivileges(columns)#privileges表示授予的权限,columns表示作用的列(可选)

ONwhat#设置权限级别,全局级、数据库级、数据表级和数据列级

TOaccount#权限授予的用户,用"

user_name"

@"

host_name"

这种用户名、主机名格式

IDENTIFIEDBY'

password'

#设置用户帐号密码

REQUIREencryptionrequirements#设置经由SSL连接帐号

WITHgrantorresourcemanagementoptions;

#设置帐号的管理和资源(连接服务器次数或查询次数等)选项

示例:

grantallondb.*to'

@'

localhost'

identifiedby'

上例运行后的效果是,test用户只能通过‘test’密码从本机访问db数据库

上例运行后的效果是,test用户可通过‘test’密码从任意计算机上访问db数据库。

‘%’代表任意字符,‘_’代表一个任意字符。

主机名部份还可以是IP地址。

表3.2.1访问权限表

权限

权限说明

CREATETEMPORARYTABLES

创建临时数据表

EXECUTE

执行存储过程(暂不支持)

FILE

操作系统文件

GRANTOPTION

可把本帐号的权限授予其它用户

LOCKTABLES

锁定指定数据表

PROCESS

查看运行着的线程信息

RELOAD

重新加载权限表或刷新日志及缓冲区

REPLICATIONCLIENT

可查询主/从服务器主机名

REPLICATIONSLAVE

运行一个镜像从服务器

SHOWDATABASES

可运行SHOWDATABASES指令

SHUTDOWN

关闭数据库服务器

SUPER

可用kill终止线程以及进行超级用户操作

ALTER

可修改表和索引的结构

CREATE

创建数据库和数据表

DELETE

删除数据表中的数据行

DROP

删除数据表和数据行

INDEX

建立或删除索引

INSERT

插入数据行

REFERENCES

(暂时不支持)

SELECT

查询数据行

UPDATE

更新数据行

ALL

所有权限,但不包括GRANT。

USAGE

无权限权限

表3.2.2权限作用范围(由ON子句设置)

权限限定符

作用范围

ON*.*

全局级权限,作用于所有数据库

ON*

全局级权限,若未指定默认数据库,其作用范围是所有数据库,否则,其作用范围是当前数据库

ONdb_name.*

数据库级权限,作用于指定数据库里的所有数据表

ONdb_name.tbl_name

数据表级权限,作用于数据表里的所有数据列

ONtbl_name

数据表级权限,作用于默认数据库中指定的数据表里的所有数据列

USAGE权限的用法:

修改与权限无关的帐户项,如:

GRANTUSAGEON*.*TOaccountIDENTIFIEDBY'

new_password'

#修改密码

GRANTUSAGEON*.*TOaccountREQUIRESSL;

#启用SSL连接

GRANTUSAGEON*.*TOaccountWITHMAX_CONNECTIONS_PER_HOUR10;

#设置资源

拥有WITHGRANTOPTION权限的用户可把自已所拥用的权限转授给其他用户,如:

GRANTALLONdb.*TO'

IDENTIFIEDBY'

WITHGRANTOPTION;

这样test用户就有权把该权限授予其他用户。

限制资源使用,如:

GRANTALLONdb.*TOaccountIDENTIFIEDBY'

WITHMAX_CONNECTIONS_PER_HOUR10MAX_QUERIES_PER_HOUR200MAX_UPDATES_PER_HOUR50;

允许account用户每小时最多连接20次服务器,每小时最多发出200条查询命令(其中更新命令最多为50条)

默认都是零值,即没有限制。

FLUSHUSER_RESOURCES和FLUSHPRIVILEGES可对资源限制计数器清零。

REVOKE语法说明:

REVOKEprivileges(columns)ONwhatFROMaccount;

REVOKESELECTONdb.*FROM'

删除test帐号从本机查询db数据库的权限

REVOKE可删除权限,但不能删除帐号,即使帐号已没有任何权限。

所以user数据表里还会有该帐号的记录,要彻底删除帐号,需用DELETE命令删除user数据表的记录,如:

%mysql-uroot-p

usemysql

DELETEFROMuserwhereUser='

andHost='

mysqlfulshprivileges;

REVOKE不能删除REQUIRE和资源占用的配置。

他们是要用GRANT来删除的,如:

GRANTUSAGEON*.*TOaccountREQUIRENONE;

#删除account帐号的SSL连接选项

3.3MD5加密

3.3.1数据库中数据加密的原因

现在网络上一般的网站,稍微完善一点的,往往都需要用户先注册,提供诸如电子邮件、账号、密码等信息以后,成为网站栏目的注册用户,才可以享受网站一些特殊栏目提供的信息或者服务,比如免费电子邮件、论坛、聊天等,都需要用户注册。

而对于电子商务网站,比如igo5等大型电子商务网站,用户需要购买商品,就一定需要详细而准确的注册,而这些信息,往往是用户很隐秘的信息,比如电话、电子邮件、地址等,所以,注册信息对于用户和网站都是很重要的资源,不能随意透露,更加不能存在安全上的隐患。

一般将用户资料直接保存在数据库中,并没有进行任何的保密措施,对于一些文件型数据库比如Access等,如果有人得到这个文件,岂不是所有的资料都泄露无疑?

更加重要的是,如果一个不负责任的网管,不需要任何技术手段,就可以查看网站中的任何资料,如果我们的用户信息在数据库中没有加密,对于网管而言,查看这些信息是太简单了。

所以,为了增加安全性,我们有必要对数据库中的资料进行加密,这样,即使有人得到了整个数据库,如果没有解密算法,也一样不能查看到数据库中的用户信息。

3.3.2加密方式

在现阶段,我们一般认为存在两种加密方式,单向加密和双向加密。

双向加密是加密算法中最常用的,它将我们可以直接理解的明文数据加密为我们不可直接理解的密文数据,然后,在需要的时候,可以使用一定的算法将这些加密以后的密文解密为原来可以理解的明文。

双向加密适合于隐秘通讯。

单向加密刚好相反,只能对数据进行加密,也就是说,没有办法对加密以后的数据进行解密。

MD5就是采用单向加密的加密算法,对于MD5而言,有两个特性是很重要的,第一是任意两段明文数据,加密以后的密文不能是相同的;

第二是任意一段明文数据,经过加密以后,其结果必须永远是不变的。

前者的意思是不可能有任意两段明文加密以后得到相同的密文,后者的意思是如果我们加密特定的数据,得到的密文一定是相同的。

3.3.3Md5加密原理

对MD5算法简要的叙述可以为:

MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余的结果等于448。

因此,信息的字节长度(BitsLength)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。

填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。

然后,在在这个结果后面附加一个以64位二进制表示的填充前信息长度。

经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。

这样做的原因是为满足后面处理中对信息长度的要求。

  MD5中有四个32位被称作链接变量(ChainingVariable)的整数参数,他们分别为:

A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。

  当设置好这四个链接变量后,就开始进入算法的四轮循环运算。

循环的次数是信息中512位信息分组的数目。

  将上面四个链接变量复制到另外四个变量中:

A到a,B到b,C到c,D到d。

  主循环有四轮(MD4只有三轮),每轮循环都很相似。

第一轮进行16次操作。

每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。

再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一。

最后用该结果取代a、b

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1