1.安全性问题
(1)数据库安全性的定义
数据库的安全性是指保护数据库,防止不合法的使用,以免数据的泄密、更改或破坏。
(2)安全性级别
由低到高分别是:
①环境级。计算机系统的机房和设备应加以保护,防止有人进行物理破坏。
②职员级。工作人员应清正廉洁,正确授予用户访问数据库的权限。
③操作系统级。应防止未经授权的用户从操作系统处着手访问数据库。
④网络级。由于大多数数据库系统都允许用户通过网络进行完成访问,因此网络软件内部的安全性是很重要的。
⑤数据库系统级。数据库系统的职责是检查用户的身份是否合法及使用数据库的权限是否正确。
(3)权限问题。
在数据库系统中,定义存取权限称为授权。关系数据库系统中,权限有两种:访问数据的权限和修改数据库结构的权限。
关系系统中的存取权限
访问数据的权限有4个:
①查找(select)权限:允许用户读取数据,但不能修改数据。
②插入(Insert)权限:允许用户插入新的数据,但不能修改数据。
③修改(update)权限:允许用户修改数据,但不能删除数据。
④删除(delete)权限:允许用户删除数据。
修改数据库模式的权限也有4个:
①索引(index)权限:允许用户创建和删除索引。
②资源(resource)权限:允许用户创建新的关系。
③修改(alteration)权限:允许用户再关系结构中加入或删除属性。
④撤销(drop)权限:允许用户撤销关系。
2.数据库安全性控制
(1)用户标识与鉴别
用户标识与鉴别是系统提供的最外层安全保护措施。其方法时由系统提供一定的方式让用户标识自己的名字或身份。
(2)存取控制
数据库安全性所关系的主要是DBMS的存取控制机制。存取控制机制主要包括两部分:
①定义用户权限,并将用户权限存放在数据字典中。
②合法权限检查,每当用户发出存取数据库的操作请求后,DBMS查找字典,根据安全规则进行合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作。
(3)自主存取控制方法
在自主存取控制中,用户对于不同的数据对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可以将其拥有的存取权限转授给其他用户。因此自主存取控制非常灵活。
用户权限是由两个要素组成的:数据对象和操作类型。定义一个用户的存取权限就是要定义这个用户可以在哪些数据对象上进行哪些类型的操作。在数据库系统中,定义存取权限称为授权。
(4)强制存取控制方法
在强制存取控制中,每一个数据对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。
(5)视图机制
视图(view)是从一个或多个基本表导出的表,进行存取权限控制时我们可以为不同的用户定义不同的视图,把数据对象限制在一定的范围内,也就是说,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
视图机制使系统具有三个优点:数据安全性、逻辑数据独立性和操作简单性。
(6)审计
审计追踪是一个对数据库进行更新(插入、删除、修改)的日志,还包括一些其他信息,如哪个用户执行了更新和什么时候执行更新等。如果怀疑数据库被篡改了,那么就开始执行DBMS的审计软件。该软件将扫描审计追踪中某一时间段内的日志,以检查所有作用于数据库的存取动作和操作。当发现一个非法的或未授权的操作时,DBA就可以确定执行这个操作的账号。
(7)数据加密
数据加密是防止数据库中数据在存储和传输中失密的有效手段。加密的基本思想是根据一定的算法将原始数据变换为不可直接识别的格式,从而使得不知道解密算法的人无法获知数据的内容。加密方法主要有两种:对称密钥加密法和公开密钥加密法。
①对称密钥加密法
对称密钥密码体制属于传统密钥密码系统。加密密钥与解密密钥相同或者由其中一个推出另一个。对称密钥加密算法的输入是源文和加密键,输出是密文。加密算法可以公开,但加密键是一定要保密的。密码文对于不知道加密键的人来说,是不容易解密的。
②公开密钥加密法
在这种方法中,每个用户有一个加密密钥和一个解密密钥,其中加密密钥不同于解密密钥,加密密钥公之于众,谁都可以用,解密密钥只有解密人自己知道,分别称为“公开密钥”和“私密密钥”。公开密钥密码体制也称为不对称密钥密码体制。
3.统计数据库的安全性
有一类数据库称为“统计数据库”,例如人口调查数据库,它包含大量的记录,但其目的只是向公众提供统计、汇总信息,而不是提供单个记录的内容。也就是查询仅仅是某些记录的统计值,例如求记录数、和、平均值等。
在统计数据库中,对查询应做下列限制:
(1)一个查询查到的记录个数至少是n;
(2)两个查询查到的记录的“交”数目至多是m。
系统可以调整n和m的值,使得用户很难在统计数据库中国获取其他个别记录的信息。
保证数据库安全性的另一个方法是“数据污染”,也就是在回答查询时,提供一些偏离正确值的数据,以免数据泄漏。当然,这个偏离要在不破坏统计数据的前提下进行。此时,系统应该在准确性和安全性之间作出权衡。
4.应用程序安全
虽然大型数据库管理系统(如oracle、DB2和SQL server)都提供了具体的数据库安全特性,但是这些特性本质上都只实现了常规性的安全保护。如果应用程序要求特别的安全措施,例如禁止用户查看某个表的行,或者禁止查看表连接中的其他职员的数据行,此时DBMS的安全机制就无能为力了。在这种情况下,必须通过数据库应用程序的特性来提高系统安全。
5.SQL server的安全性措施
(1)SQL server安全控制概述
数据的安全性是指保护数据以防止因不合法的使用而造成数据的泄密和破坏。这就要采取一定的安全保护措施。
SQL server采用四个等级的安全验证。
①操作系统安全验证;
②SQL server安全验证;
③SQL server数据库安全验证;
④SQL server数据库对象安全验证。
(2)安全模式
SQL server提供了两种不同方法来认证用户进入服务器。用户可以根据自己的网络配置,决定使用其中一种。
①windows认证;
②SQL server混合认证。
(3)服务器登录标识管理
sa和administrators是系统在安装时创建的分别用于SQL server混合认证模式和windows认证模式的系统登录名。如果用户想创建新的登录名或删除已有的登录名,可使用下列两种方法:
1)使用SQL server企业管理器管理登录名。
创建登录名的步骤如下:
①启动SQL server,单击要连接的服务器左侧的加号连接该服务器。
②单击“安全性”文件夹左侧的加号。
③右击“登录”图标,从弹出式菜单中选择“新建登录”菜单项,这时打开如图7-2所示的“SQL server登录属性——新建登录”对话框。
④在“名称”编辑框中输入登录名。
⑤在“身份验证”下选项栏中选择身份认证模式,如果正在使用SQL Server认证模式,那么再选择“SQL Server身份认证”单选按钮之后必须在“密码”中输入密码。如果正在使用WINDOWS认证模式,那么再选择“Windows身份认证”单选按钮之后,则必须在“域”中输入域名。
注意:
如果选择了WINDOWS认证模式,那么在“名称”输入的帐号必须是在windows server已经建立的登录者或组,“名称”的格式为:Windows server网络名称用户名称或windows server主机名用户名称。
如果选择了WINDOWS认证模式且使用了NT网络,那么在“域”中输入登录帐号或组所属的域;如果没有使用windows server网络则在“域”中输入登录帐号所属的windows server主机名。
如果选择了windows认证模式且登录帐号是windows serverNT中的内建用户组,例如administrators,那么必须在“域”中输入BUILTING,而不是windows server主机名或windows server网络域。
⑥在“默认设置”下的两个选项框中指出用户在登录时的默认数据库以及默认的语言。
⑦单击确定按钮,创建登录。
删除登录名的步骤如下:
①启动SQL Server,单击要连接的服务器左侧的加号连接该服务器。
②单击“安全性”文件夹左侧的加号。
③单击“登录”图标,显示所有已存在的登录名。
④右击您想删除的登录名,从弹出式菜单中选择“删除”菜单项。
2)使用SQL Server系统存储过程管理登录名。
在SQL Server中,一些系统存储过程提供了管理SQL Server登录名的功能,主要包括:
sp_addlogin、sp_droplogin、sp_helplogins、sp_grantlogin、sp_revokelogin、sp_denylogin
注意:这些系统存储过程必须在master数据库中使用。
①sp_addlogin
该系统存储过程的作用是创建新的使用SQL Server认证模式的登录名,其语法格式为:
sp_addlogin [@loginame=] 'login'
[,[@passwd=] 'password']
[,[@defdb=] 'database']
[,[@deflanguage=] 'language']
[,[@sid=] 'sid']
[,[@encryptopt=] 'encryptioni_option']
其中:
@loginame:登录名,它是唯一必须给定值的参数,而且它必须是有效的SQL Server对象名;
@passwd:登录密码;
@defdb:登录时缺省数据库;
@deflanguage:登录时缺省语言;
@sid:安全标识码,存在于每个数据库中的sysuser表中,用来将登录名和用户相连接,sid和登录名必须唯一;
@encryptopt:将密码存储到系统表时是否对其进行加密,@encryptopt参数有三个选项:
NULL表示对密码进行加密;
skip_encryption表示对密码不加密;
skip_encryption_old只在SQL Server升级时使用表示旧版本已对密码加密。
例:创建一个新登陆哟in过户:登录名是cmxu,密码是123,登录时缺省数据库是pubs。
exec sp_addlogin 'cmxu','123','pubs'
②sp_droplogin
该系统存储过程的作用是删除使用SQL Server认证模式的登录名,禁止其访问SQL Server,其语法格式为:
sp_droplogin [@loginame=] 'login'
例:删除SQL Server登录者cmxu。
exec sp_droplogin 'cmxu'
注意:不能删除系统管理者sa以及当前连接到SQL Server的登录。如果有用户名和这个登录名关联,SQL Server将返回提示信息告诉您哪个数据库中存在关联的对象,并提供关联的对象名。如果关联的对象存在,在删除登录名前您需要用sp_revokedbaccess在每个数据库中将它们清除。如果用户是数据库所有者,您需要使用sp_changedbowner将所有权授予其他的登录名。
③sp_grantlogin
设定一WINDOWS用户或用户组为SQL Server登录者,其语法格式为:
sp_grantlogin[@loginame=] 'login'
例:将windows用户 YZ-XCM YZ设定为SQL Server登录者。
exec sp_grantlogin 'YZ-XCM YZ'
④sp_denylogin
拒绝某一windows用户或用户组连接到SQL Server,其语法格式为:
sp_denylogin[@ loginame=] 'login'
例:拒绝windows用户YZ-XCM YZ登录到SQL Server。
exec sp_denylogin 'YZ-XCM YZ'
⑤sp_revokelogin
用来删除windows用户或用户组在SQL Server上的登录信息,其语法格式为:
sp_revokelogin[@loginame=] 'login'
例:删除windows用户YZ-XCM YZ登录到SQL Server的登录信息。
exec sp_revokelogin 'YZ-XCM YZ'
sp_grantlogin和sp_revokelogin只能使用与windows认证模式下对windows用户或用户组帐号做设定,而不能对SQL Server维护的登录帐号进行设定。
⑥sp_helplogins
sp_helplogins用来显示SQL Server所有登录者的信息,包括每一个数据库里与该登录者相对应的用户名,其语法格式为:
sp_helplogins[[@LoginNamePattern=] 'login']
如果未指定@LoginNamePattern,则当前数据库中所有登录者的信息包括windows登录者都将被
例:显示登录者cmxu的登录信息。
sp_helplogins @LoginNamePattern='cmxu'
(4)权限管理
权限管理用于控制用户在SQL Server里执行特定任务的能力。它们允许用户访问数据库里的对象并授权他们对那些对象进行某些操作。如果用户没有被明确地授予访问数据库里一个对象的权限,他们将不能访问数据库里的任何信息。
在SQL Server中有三种类型的权限,分别是语句权限、对象权限和隐含权限。其中语句权限和对象权限可以委派给其他用户,隐含权限只允许属于特定角色的人使用。.
例:把查询表SC和修改其学号的权限授给用户U2和U4(或全体)
GRANT SELECT,
UPDATE(Sno)
ON TABLE SC
TO U2,U4(PUBLIC);
例:把对表SC的INSERT权限授给用户U5,并允许将此权限再授予其他用户。
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
U5还可以将此权限授予U6:
GRANT INSERT
ON TABLE SC
TO U6;
GRANT语句可以:
一次向一个用户授权;
一次向多个用户授权;
一次传播多个同类对象的权限;
一次可以完成对基本表,视图和属性列这些不同对象的授权。