实验四 数据库安全性技术
【实验目的】
1、理解安全性的概念。
2、在理解用户及相关概念的基础上掌握自主存取控制机制(DAC)。
3、熟悉MS SQL SERVER的安全性技术。
【实验性质】
综合性实验
【实验导读】
1、安全性概述
数据库的安全性是指保护数据库,防止不合法的使用所造成的数据泄露和破坏。数据库系统中保证数据安全性的主要措施是进行存取控制,即规定不同用户对于不同数据对象所允许执行的操作,并控制各用户只能存取他有权(操作权力)存取的数据。存取控制机制分为自主存取控制 (DAC)与强制存取控制(MAC),主要包括两部分:
一是定义用户权限,并将用户权限登记到数据字典中;
二是合法权限检查。
常见数据库的安全性控制技术有:
(1)用户标识与鉴别。
(2)自主存取控制 (DAC):用户对于不同的数据对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。因此自主存取控制非常灵活。
(3)强制存取控制(MAC):每一个数据对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。强制存取控制因此相对比较严格。
(4)视图:进行存取权限控制时我们可以为不同的用户定义不同的视图,把数据对象限制在一定的范围内即通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。视图机制间接地实现了支持存取谓词的用户权限定义。
(5)审计
(6)加密:对于高度敏感性数据,例如财务数据、军事数据、国家机密,除以上安全性措施外,还可以采用数据加密技术。
2、MS SQL Server安全性控制技术
详细内容参阅 “联机丛书”中“管理SQL Server”->“安全管理”
MS SQL Server的安全性建立在认证和访问许可两种机制上即用户要经过两个安全性阶段:身份验证和授权(权限验证)。身份验证阶段使用登录帐户(login)标识用户并只验证用户连接MS SQL Server 实例的能力。如果身份验证成功,用户即可连接到MS SQL Server 实例。然后用户需要访问服务器上数据库的权限,为此需授予每个数据库中映射到用户登录的帐户访问权限。权限验证阶段控制用户在MS SQL Server 数据库中所允许进行的活动。
MS SQL Server的安全模式中包括登陆(login)、数据库用户(user)、权限、角色(role)等。用户(user)与登陆(login)是两个不同的概念,其中所有的数据库用户(user)必须与某一登陆(login)相匹配。MS SQL Server身份验证在两种安全验证模式之一下工作:
(1)Windows 身份验证模式(Windows 身份验证):Windows 身份验证模式使用户得以通过 Microsoft Windows NT 4.0 或 Windows 2000 用户帐户进行连接。
(2)混合模式(Windows 身份验证和 SQL Server 身份验证):混合模式使用户得以使用 Windows 身份验证或 SQL Server 身份验证与 SQL Server 实例连接。
为了灵活起见,一般采用混合模式。设置MS SQL Server认证模式可以用“企业管理器”选择服务器,用右键单击服务器的弹出菜单选择“属性”,如图1,点击“安全性”页。
图1
3、定义登陆与用户
方法一:图形界面:通过“企业管理器”。在选择服务器的“安全性”-> “登陆”右键“添加新登陆”,输入登录名称logqixin,选择SQL Server身份验证,如图2。
图2
单击“数据库访问”页面,注意允许访问数据库“test”,如图3。
图3
此时,企业管理器会自动在数据库qixin的“用户”中添加一个与登陆同名的用户logqixin。这样登陆logqixin与同名用户logqixin(访问数据库qixin)就建立起来了。
如果单独创建某个数据库(如qixin)用户,可在“企业管理器”-> 服务器 -> “数据库” -> “用户”右键单击用户的弹出菜单选择“新建数据库用户”,如图4。(注意,在此之前必须先建立一个登陆,然后新建用户与此登陆关联。)
图4
方法二:通过系统存储过程
(1)添加登陆,如图5。
图5
(2)添加用户,如图6。
图6
4、完成授权/撤销权限。观察授权前后的变化(以表“部门”与用户“logqixin”为例)。
(1)授权
方法一:图形界面,通过“企业管理器” -> 服务器 -> “数据库” -> “用户” -> “logqixin”->右键“所有任务” -> “管理权限”,如图7、图8。
图7
图8
方法二:GRANT命令。
(2)分别以登陆“sa”(连接1)、“logtest” (连接2)连接数据库“qixin”,如图9。
图9
(3)在连接2执行查询,如图10。
图10
(4)在连接1执行授权,如图11。
图11
(5)在连接2执行查询,结果显然不同,见图12。
图12
(6)在连接1执行撤销授予的权限,再执行查询,其结果如图10。
5、设计安全机制使得用户“test”只能查询年龄在40岁以上(包括)职工。
(1)如果用户“test”不存在的话,按照前述方法定义用户“test”。
exec sp_addlogin 'test','','qixin'
exec sp_adduser 'test','test'
(2)创建基于表“职工”年龄在40岁以上(包括)的职工视图。
create view 职工_年龄 as
select * from 职工
where 年龄>=40
(3)将“技术科”职工视图查询权限授予用户“test”。
grant select on 职工_年龄 to test
6、设计角色“student”,可以查看“职工”的职工号与姓名。
角色(ROLE):一组权限的集合。数据库管理员将数据库的权限赋予角色,然后将角色再赋予给数据库用户或登录帐户,从而使数据库用户或登录帐户拥有相应的权限。
MS SQL Server提供了固定服务器角色和数据库角色,用户可以修改固定数据库角色的权限,也可以自己创建新的数据库角色,再分配权限给新的角色。除了系统预定义的角色外也可以定义(CREATE ROLE)。public 角色是一个特殊的数据库角色,每个数据库用户都属于它。
(1)定义角色“学生”。
exec sp_addrole 'student'
(2)创建基于表“职工”且只包含“职工”的职工号与姓名的职工视图。
create view 职工_角色 as
select 职工号,姓名 from 职工
(3)将只包含“职工”的职工号与姓名的职工视图查询权限授予角色“student”。
grant select on 职工_角色 to student
(4)将用户“test”作为成员加入角色“学生”,这样用户“test”只能查看“职工”的职工号与姓名。
--添加用户test到角色student中
exec sp_addlogin 'test'
exec sp_adduser 'test','test'
exec sp_addrolemember 'student','test'