APP下载

数据库安全机制的探讨与实现

2014-05-08陈功平

河北省科学院学报 2014年3期
关键词:触发器语句密钥

王 红,陈功平

(六安职业技术学院 信息工程系,安徽 六安237158)

网络应用技术的发展,让人们可以随时随地与好友交流、上网购物、管理网上银行等业务,你登录各种账户所用到的用户名、密码以及你所管理的各项业务的数据都存储在网络中的某个节点计算机上。

计算机时代,使用数据库技术来存储和管理庞大的数据,如何保证数据库中的数据安全有效的运行,能够自我保护[1],同时免疫外界的觊觎,这些都属于数据库安全要解决的问题。

数据库管理系统开发者在设计时都会考虑到数据库安全保护机制方面的需求,设计许多的安全管理接口,同时用户也可以根据需求自己配置数据库安全措施。本文以微软的SQL Server数据库管理系统为例,介绍其在数据库安全机制方面的接口以及实现方法。

1 数据库安全措施

微软产品的市场占有率非常高,SQL Server作为微软最核心、复杂的商业数据库管理系统软件,得到了许多用户的支持,版本更新很快,管理能力强,在安全配置方面有着独特的机制和实现方法。

1.1 数据库文件安全机制

微软的数据库产品很多,Visual FoxPro和ACCESS数据库的数据以文件形式直接存储在计算机中,Visual FoxPro数据库文件扩展名为“.dbf”,ACCESS数据库文件的扩展名为“.mdb”,只要用对应的软件就可以将文件打开,即使文件设置了密码,也很容易破解,文件打开后,所有的数据都可以展示在用户面前,数据的隐私性无从谈起,因此它们在商业运用中较少。SQL Server数据库在操作系统中也是以文件形式存储,文件分为数据文件和日志文件两种类型。

(1)数据文件

SQL Server中的数据文件又分为“主数据文件”和“次数据文件”两类,数据库必须有且只能有一个主数据文件,次数据文件可以没有,也可以有多个,它们共同存储所有数据库对象,但用户无法得知每个数据库对象存储在哪个文件中,这有利于保护数据。

主数据文件的推荐扩展名为“.mdf”,次数据文件的推荐扩展名为“.ndf”,若用户在创建数据库或为数据库添加文件时,没有使用推荐扩展名,使用其他字符作扩展名或未使用扩展名,都不影响数据库的运行。

(2)日志文件

日志文件存储用户对数据库的所有操作,推荐扩展名为“.ldf”,数据库至少要有一个日志文件。

当数据库在SQL Serve系统中存在时,即使关闭SQL Server软件,但SQL Server服务是启动状态时,该数据库所属的各个数据库文件都不能被拷贝、删除,除非你将数据库从管理系统中分离或停止、暂停SQL Server服务,才能够实现数据库文件的拷贝、删除等操作。这是数据库文件的自我安全保护机制之一,防止用户无意中删除文件而使得数据库不可用,同时也防止不法人员拷贝文件而获取信息。

当用户获取到数据库文件后,即使系统安装了相应的数据库软件,也无法直接双击打开数据库文件,只有将数据库文件在数据库系统中附加或还原后方可查看数据库中的数据,若你得到的数据文件有缺失,附加和还原操作也将不能进行,这是数据库文件的自我安全保护机制之二,防止用户得到部分文件后造成信息泄露。

同时,数据库文件的扩展名用户可以自己定义,这是数据库文件的自我安全保护机制之三,可以起到隐藏身份的作用。

1.2 3道安全关卡

数据库文件只有在数据库系统中才可以查看、修改和配置,受到层层保护。可以将数据库中的数据比作博物馆中的藏品,不法分子要想得到藏品,首先要能够进入博物馆大门,然后要能够进入藏品的房间,最后还要看你是否有得到藏品的权限,基于此原理,SQL Server软件为数据库中的数据设置了3道关卡。

第1关,用户必须登录到SQL Server的服务器实例上。要登录到服务器实例,首先要有一个登录账户,即登录名。SQL Server提供了一个不能被删除、修改且权限最大的登录名“sa”,可以为“sa”配置密码或取消其登录资格来保护数据库。

第2关,登录服务器后,登录名在数据库中要有对应的用户账号,才有访问数据库的资格,否则无法打开用户数据库。默认情况下,每个数据库中都有一个权限最高的用户账户dbo,它对应“sa”的登录名。

第3关,连接到数据库后,要管理数据库中的对象,用户账户要具有相应的权限。

1.3 2种安全验证机制

安全验证机制是针对3道关卡中的第1关,有“Windows验证机制”和“SQL Server验证机制”两种。

用户在登录操作系统时需要提供身份验证信息,因此Windows验证机制是借助Windows的验证机制,只要指用户通过操作系统即可使用数据库系统;SQL Server验证机制是数据库系统自带的验证机制,如1.2中介绍的“sa”登录名以及对应的用户账户,属于SQL Server的验证机制[2]。

1.4 2种身份验证模式

在2种安全验证机制的基础上,SQL Server数据库系统提供了“仅Windows身份验证模式”和“混合验证模式”2种身份验证模式[3]。

将SQL Server服务器设置为“仅Windows身份验证模式”后,只能采用“Windows验证机制”来验证用户的身份;“混合验证模式”指既可以使用“Windows验证机制”又可以使用“SQL Server验证机制”来验证用户身份。

2 安全机制的实现

根据3道关卡、2种安全机制和2种身份验证模式的安全机制,SQL Server能够实现由大到小、由粗到细的不同级别的安全保护措施。

2.1 服务器级安全性

SQL Server是以服务的形式保证数据库的运行,用户可以在一台计算机上安装多个名字不同的服务器实例,每个服务器实例独立存在,可以拥有各自的数据库及数据库对象。服务器级的安全影响范围最广,设计时要慎重。

(1)登录账户

“登录账户”是打开数据库服务器的钥匙,成功登录服务器后,可以在“安全性”的“登录名”项下看到当前服务器中所有登录账户,如图1所示。

可以在登录账户中创建新的登录名,新建时会询问你选择何种验证机制,如果是“Windows验证机制”,必须基于操作系统中的用户方可建立,如果是“SQL Server验证机制”,需要用户输入登录密码。

图1 登录账户信息

有登录名后就可以在连接到服务器的“数据库引擎”服务时时选择“身份验证”机制,正确时就可以连接到服务器,如图2所示。

图2 用登录名连接到服务器

通过登录名的属性面板中的“状态”项,可以“启用”和“禁用”登录名,禁用那些高权限的登录名也可以起到保护数据库安全的作用。

(2)服务器角色

服务器角色有9种,每个角色的操作权限不一样,所有登录账户都必须属于“public”服务器角色,可以为public角色赋予权限,方便让所有账户具备统一功能,默认情况下“public”角色只可登录服务器,不具备访问用户数据库的权限。服务器各角色及其功能如表1所示。

表1 服务器角色及功能描述

在新建登录账户或配置登录账户属性时,赋予账户服务器角色,简化用户的设置,其中“sysadmin”服务器角色的权限最高,若登录账户是该角色成员,即使没有在数据库中创建“数据库用户”,因具备最高权限,可执行任何操作。

2.2 数据库级安全性

(1)数据库用户

数据库用户是登录名在数据库中的映射,若登录名不属于“sysadmin”角色,通常都要在数据库中为登录名创建对应用户,否则登录名不能访问用户数据库,数据库用户在“安全性”中的“用户”项下,如图3所示。

在数据库的“用户”项中可以创建用户,创建时要选择用户所基于的“登录名”,同时也可以设置用户的“数据库角色”。

(2)数据库角色

数据库设计者可以新建“数据库角色”,开发者也为数据库设计了10种固定数据库角色,如图4所示。

图3 数据库用户

图4 固定数据库角色

固定数据库角色名及说明见表2所示。

表2 固定数据库角色一览表

“db_owner”角色拥有数据库级的最高权限,赋予用户角色时要慎重。

用户创建的角色称为“用户自定义数据库角色”,创建角色时要赋予角色相应的权限,实现角色的功能。

(3)权限

权限是数据库安全管理最细致的一项,不同的对象所具备的权限不同,常用的权限如表3所示。

表3 常用的权限

可以将权限授予角色、数据库用户。使用权限设置用户或角色的功能可以更好的保护数据库安全,同时要求设计者要具备良好的权限认知能力。

3 数据加密

第2节介绍的登录名、用户、权限、角色能够起到保护数据的作用,但仍无法避免数据被获取。SQL Server从2000版本开始提供数据加密,在2005版本中又增加了列级加密,2008版本引入了透明数据加密(TDE),有了数据加密技术,即使得到数据,也要解密才可以查看到正确信息,为数据安全加了一层保护[4]。

SQL Server支持对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption)两种,对称加密是指加密和解密的密钥相同,SQL Server提供RC4、RC2、DES和AES等加密算法,非对称加密是指加密和解密的密钥不同,如RSA加密算法、数字证书等。

与1.2节介绍的3道关卡一样,数据加密在数据库管理系统中也是分层级的,从加密影响范围的广窄依次为服务主密钥(Service Master Key)、数据库主密钥(Database Master Key)、对称密钥或非对称密钥或证书,服务主密钥影响整个的服务器实例,在安装服务器实例时自动生成。

3.1 数据库主密钥

数据库主密钥由服务主密钥进行加密,每个数据库只能有一个数据库主密钥,可以用于为创建数据库级别的证书或非对称密钥提供加密[5],只能通过T-SQL语句创建。

如下T-SQL语句创建密码为“123456”的数据库主密钥。

CREATE MASTER KEY ENCRYPTION BY PASSWORD ='123456'

创建成功后,数据库主密钥由“123456”的密码和服务主密钥共同保护。删除数据库主密钥的T-SQL语句如下。

3.2 创建对称密钥、非对称密钥和证书

当数据库主密钥创建成功后,我们就可以使用这个密钥创建对称密钥,非对称密钥和证书。

(1)创建证书

证书是一个数据库级的安全对象,可以基于数据库主密钥创建,也可以在无数据库主密钥的情况下创建证书。

下面语句的作用是创建名为Cer_1的证书,它的私钥是由密码“123”来保护,该语句可以在无数据库主密钥的数据库中创建证书。

CREATE CERTIFICATE Cer_1ENCRYPTION BY PASSWORD=′123′WITH SUBJECT =′Cer1′

WITH SUBJECT项表示证书的“主题”,是指证书的元数据中的字段。

如下语句是创建名为Cer_2的证书,该语句创建的证书必须基于数据库主密钥方可实现。

(2)非对称密钥

创建名为Asy_1基于RSA_2048算法的非对称密钥,使用密码“111”保护私钥,可以在无数据库主密钥的数据库中实现,语句如下。

如下语句是创建名为Asy_2基于RSA_512算法的非对称密钥,该语句只能在有数据库主密钥的数据库中方可实现。

(3)对称密钥

对称密钥不能直接基于数据库主密钥创建,可以基于密码、非对称密钥、对称密钥、证书等。

创建名为Sym_1基于AES_256算法的对称密钥,使用密码“321”保护私钥,可以在无数据库主密钥的数据库中实现,语句如下。

创建名为Sym_2的对称密钥,使用证书Cer_1对该对称密钥进行加密,语句如下。

创建后,可以在数据库的“安全性”选项下查看创建成功的非对称密钥、证书和对称密钥,并可以执行“删除”等操作,如图5所示。

图5 查看非对称密钥、证书和对称密钥

3.3 列级加密(Column-level Encryption)

SQL Server在2005版本引入了列加密的功能,可以利用证书,对称密钥和非对称密钥对需要保护的列进行加密,根据加密解密的方式不同,内置了4对函数用于加密解密[6],如表4所示。

表4 列级加密解密函数

列级加密和解密时首先需要将列数据类型转换成VARBINARY类型,且需要将加密和解密的密钥打开,打开Sym_2密钥的命令如下。

密钥打开后,利用INSERT或UPDATE操作加密数据,假定表student中的“密码”列的数据类型为VARBINARY,加密语句如下。

UPDATE student SET 密码= EncryptByKey(Key_GUID(′abc′),′123′)where 1<>1

INSERT student(密码)values(EncryptByKey(KEY_GUID(′aa′),′123′))

列被加密后,直接查询查看不到数据,必须解密后才可以看到实际内容;也无法直接录入数据到该列。

4 使用触发器对象来巩固安全性

触发器是SQL Server数据库中的一类特殊的数据库对象,当用户执行某项操作时会触发某些操作,触发器内容用户可以自己定义。

SQL Server中的触发器分为数据操纵(DML)触发器和数据定义(DDL)触发器两类。INSERT、UPDATE、DELETE关键字可定义DML触发器,CREATE、ALTER、DROP关键字可定义DDL触发器。

使用触发器保护数据属于巩固性质的,可以屏蔽数据库中的某些操作,让非法用户的操作不能被正确执行。

4.1 DML触发器保护数据安全

DML触发器根据功能的不同,分为AFTER和INSTEAD OF两种类型[7]。AFTER型先执行INSERT、UPDATE、DELETE语句,然后再执行触发器语句;INSTEAD OF触发器也叫做替代触发器,如果INSERT、UPDATE、DELETE语句定义了INSTEAD OF触发器,当执行INSERT、UPDATE、DELETE语句时,真正被执行的是触发器语句,而非执行增、改、删。这类触发器在保护数据表方面有一定的作用。

用AFTER型触发器保护数据的常用方法是在触发器语句中定义事务回滚,以阻止语句被真正执行;INSTEAD OF型触发器可以将表记录的增加、修改、删除操作引向触发器语句,阻止操作被真正执行。由此可见,DML触发器保护数据限制多、功能单一,只能作为补充。创建触发器的命令格式如下。

CREATE TRIGGER触发器名称

ON {表|视图}{FOR|AFTER|INSTEAD OF}{[INSERT][,][UPDATE][,][DELETE]}

AS

触发器语句

FOR与AFTER关键字定义的触发器执行方式相同。下列代码所创建触发器的功能可防止student表中的记录被删除。

CREATE TRIGGER tr_student_delete ON student FOR DELETE

AS

ROLLBACK TRANSACTION--事务回滚

4.2 DDL触发器保护数据安全

DDL触发器只有AFTER类型,没有INSTEAD OF型,创建DDL触发器的语句格式如下。

CREATE TRIGGER触发器名ON{All Server|DATABASE}{FOR|AFTER}{DDL触发语句}

AS

触发器语句

说明:ON关键字后若是DATABASE,表示数据库级触发器,即将触发器作用到当前数据库,该数据库执行DDL触发语句时将触发该触发器;若为ALL SERVER,表示服务器级触发器,即将触发器作用到当前服务器上,因此当服务器上任何一个数据库的DDL出发语句都能激活该触发器。常用的DDL触发语句见表5所示。

下列触发器TR_DDL_1的功能可阻止在当前数据库中删除数据表和修改数据表。

CREATE TRIGGER TR_DDL_1ON DATABASE FOR DROP_TABLE,ALTER_TABLE

AS

ROLLBACK TRANSACTION

下列触发器TR_DDL_2的功能可阻止在当前服务器实例中创建数据表和修改数据表。

CREATE TRIGGER TR_DDL_2ON ALL SERVER FOR CREATE_TABLE,ALTER_TABLE

AS

ROLLBACK TRANSACTION

表5 常用的DDL触发语句

5 总结

数据库设计者和使用者要将保护数据的安全性放在第一位,在设计和配置数据库时,应采用各种方式合理的保护数据库,既要合理的防止合法用户的误操作,更要有效的防止非法用户的恶意窃取。

[1] 吴溥峰,张玉清.数据库安全综述[J].计算机工程,2006,32(12):85-88.

[2] 王凤玲.SQL数据库安全性研究[J].电子技术,2012,39(6):19-20.

[3] 何斌颖,刘荣.Oracel和SQL Server数据库安全基线审查[J].云南大学学报(自然科学版),2013,35(S2):63-68.

[4] 李光师,孟祥茹.Oracle中矢量数据安全保护方法[J].计算机工程,2012,38(10):102-104.

[5] 郝文宁,赵恩来,刘玉栋,黄亚,刘军涛.异构数据库加解密系统的关键技术研究与实现[J].计算机应用,2010,30(9):2339-2343.

[6] Erez Shmueli,Ronen Vaisenberg,Ehud Gudes,Yuval Elovici.Implementing a database encryption solution,design and implementation issues[J].Computers &Security,2014,44(3):33-50.

[7] Wai Yin Mok,Charles F.Hickman,Christopher D.Allport.Implementing Business Processes:A Database Trigger Approach[J].IGI Global Journal,2013,3(2):671-687.

猜你喜欢

触发器语句密钥
密码系统中密钥的状态与保护*
重点:语句衔接
TPM 2.0密钥迁移协议研究
一种对称密钥的密钥管理方法及系统
使用触发器,强化安全性
如何搞定语句衔接题
几种常见触发器工作方式的讨论
对触发器逻辑功能转换的分析
触发器逻辑功能转换的两种方法
移动支付密钥体系研究