《数据库概论》实验指导书
通过对敏感数据进行加密存储能有效地防止数据泄密。通常由用户决定是否选用数据加密功能。
4.2 SQL Server 2005实现数据库安全性 (1)一台计算机上可以安装多个SQL Server,使得不同的应用程序可以拥有自己的SQL Server。SQL Server的每一个安装称为一个实例(instance),每个实例必须有属于自己的唯一的名字。
(2)在SQL Server中,有很多种方法来保证安全性。可以通过Windows验证来让Windows自己设置安全性;可以通过视图来限制用户对敏感数据的访问;还可以它通过特定的创建登录名、用户、角色以及授权来明确访问的许可权限。
(3)登录帐号与身份验证。如果用户准备建立与SQL Server的连接,就必须拥有相应的登录帐号。SQL Server提供两种身份验证模式:一种是Windows身份验证模式,由SQL Server系统管理员将Windows帐号或Windows组定义为合法的SQL Server登录帐号,只进行Windows身份验证,用户不必提供SQL Server登录帐号的用户名和密码。另一种是混合模式,如果用户准备建立与SQL Server的连接,那么既可以使用Windows身份验证,也可以使用SQL Server身份验证,对于后者,用户必须提供SQL Server登录帐号的用户名和密码(由SQL Server系统管理员预先定义登录帐号)。
(4)数据库用户帐号和角色。如果用户通过Windows或SQL Server身份验证,即可登录(连接)到SQL Server,但这并不意味着就能够访问SQL Server中的所有数据库,要想访问某个数据库,用户必须在该数据库中拥有用户帐号。数据库用户帐号和角色用来标识数据库中的用户,并控制数据库对象的所有权和执行语句的权限。角色允许将多个用户归类到某个单元中,之后便可对此单元实施一定的许可权限。SQL Server为常用的管理功能提供了预定义(或固定)的服务器角色和数据库角色,固定服务器角色是指在服务器级别提供的管理特权的分组,与用户数据库无关。固定数据库角色是指在数据库级别提供管理特权的分组。用户还可以创建自定义的数据库角色,来表达组织内部分组的工作,这样用户就不必为其中的各个成员分别授予或废除许可权限。如果某角色的职能发生了改变,那么也能非常容易地改变角色的许可权限,这种变更将自动应用于每个角色成员。 (5)许可权限验证。在每个数据库内部,可以为用户帐号和角色分配执行(或限制)某种动作的许可权限。然后按如下步骤进行许可权限验证:在用户执行某个动作之后,客户端将发送T-SQL语句给SQL Server;SQL Server接收到T-SQL语句后将检查用户是否具有执行该语句的许可权限;如果是,SQL Server执行相应的操作;否则,SQL Server返回错误信息。 (6)SQL Server 2005中的几个相关概念:架构(Schema)、用户(User)、角色(Role)和登录(Login)。其中,架构是一个独立数据库用户的非重复命名空间,可以被视为数据库对象的容器。 (7)SQL Server 2005 中数据库对象的引用形式为:
[DatabaseServer].[DatabaseName].[DatabaseSchema].[DatabaseObject]
5、实验步骤
5.1 实验准备:通过执行S_T.sql,在SQL Server 2005中创建一个建立示例数据库S_T。
5.2 利用SQL Server Management Studio进行安全性控制
5.2.1 使用系统管理员账号(如sa)设置SQL Server的安全认证模式,并添加SQL Server登录账户。
(1)设置SQL Server的安全认证模式。在对象资源管理器中展开服务器组,右击需要设
置的SQL服务器,从弹出的快捷菜单中选择“属性”命令。在弹出的窗口中,单击左上角“安全性”选项,右边显示安全性相关设置项目。选中“Windows身份验证模式”或“SQL Server和Windows身份验证模式”单选按钮。设置改变后,必须停止并重新启动SQL Server服务,新设置才能生效。
(2)添加SQL Server登录帐号。打开SQL服务器,选择“安全性”下的“登录名”文件
夹,右击“登录名”文件夹,在弹出的快捷菜单中选择“新建登录名”命令,在出现的窗口的“登录名”文本框中输入一个不带反斜杠的用户名(如tempuser),选中“SQL
21
《数据库概论》实验指导书
Server身份验证”单选按钮,并在“密码”与“确认密码”文本框中输入相同的口令(如qq),默认数据库为master(或改为S_T),默认语言为English,单击“确定”按钮完成创建。
(3)修改登录账号的属性。即双击要修改属性的登录账号,在其属性对话框中修改SQL
Server账号temp的口令(如将口令修改为tempqq)
(4)删除登录账号(如tempuser)。(注意:在实际操作时,先不要执行此项操作!)
使用上述方法,创建4个登录帐号:tempuser,temp1,temp2,temp3; 密码分别为:tempqq,qq1,qq2,qq3。
5.2.2 管理数据库用户 (1)添加数据库用户。展开要添加用户的某数据库(如S_T数据库),展开安全性,右击用户目录,从弹出的快捷菜单中选择“新建数据库用户”命令;打开“数据库用户”对话框;单击“登录名”文本框右边的按钮来选择一个登录账号(如tempuser);在“用户名”文本框中输入用户名,默认情况下它被设置为登录账号名;若需要可以指定数据库用户拥有的架构、数据库角色成员身份等;单击“确定”按钮完成数据库用户的创建。 (2)删除数据库用户。
使用上述方法,为S_T数据库添加4个用户:tempuser,temp1,temp2,temp3,与SQL Server登录帐号一一对应(映射)。
5.2.3 管理数据库角色
(1)添加数据库角色。展开要添加用户的某数据库(如S_T数据库),展开安全性,右击
角色目录,从弹出的快捷菜单中选择“新建数据库角色”命令;打开“数据库角色”对话框;单击“所有者”文本框右边的按钮来选择一个数据库用户(如dbo);在“角色名称”文本框中输入角色名(如db_operator),若需要可以指定数据库角色拥有的架构、此数据库角色的成员信息等;再将数据库用户temp2,temp3添加到数据库角色db_operator中。单击“确定”按钮完成数据库角色的创建。
(2)删除数据库角色。右击要删除的用户自定义角色,在跨界菜单中选择“删除”命令,
在提示对话框中确认,即可完成删除。注意:不能删除一个有成员的角色,在删除这样的角色之前,应先删除其成员;只能删除用户自定义角色,不能删除系统的固定角色!
5.2.4 权限管理
(1)语句权限的管理。右击要修改用户语句权限的数据库(如S_T数据库),在快捷菜单
中选择“属性”命令,打开S_T数据的属性对话框;单击“权限”标签,打开对话框中的“权限”选项卡;在“权限”选项卡中列出了数据库中所有的用户,以及所有的语句权限,可以单击用户与权限交叉点上的方框来选择权限,单击“确定”按钮设置生效。
按照如上方法,将创建表、创建视图的权限授予tempuser。
(2)对象权限的管理。右击要修改用户(或角色)对象权限的数据库(如S_T数据库),
选择“用户”(或“角色”)目录,在右边用户(或角色)列表中双击某用户(角色),打开该用户(或角色)的属性对话框;选择“安全对象”选项卡,添加安全对象并设置各自的权限,单击“确定”按钮设置生效。
22
《数据库概论》实验指导书
按照如上方法,将SELECT,UPDATE(Sname,Sage,Ssex,Sdept) ON Student的权限授予数据库用户temp1。将SELECT ON Student,Course,SC的权限授予数据库角色db_operator。
(3)收回权限。
检验效果:用创建的用户替换sa系统用户,来尝试与数据库服务器的连接,对数据表中的数据进行存取操作,并记录与分析可能会遇到的问题。尝试通过授予更高的权限来解决问题。
5.3 利用T-SQL进行安全性控制
5.3.1 使用系统管理员账户设置SQL Server的安全认证模式,并添加SQL Server登录账户。
(1)设置SQL Server的安全认证模式。(见4.2.1) (2)添加SQL Server登录帐号。
EXEC sp_addlogin 'testuser','qq','S_T','ENGLISH'
/*创建一个SQL Server登录名testuser,密码为qq,数据库为S_T,默认语言为英语*/ EXEC sp_addlogin 'test1','qq1','S_T','ENGLISH' EXEC sp_addlogin 'test2','qq2','S_T_1','ENGLISH' EXEC sp_addlogin 'test3','qq3','S_T_1','ENGLISH'
(3)修改登录账号的属性。
EXEC sp_password 'qq','testqq','testuser'
(4)删除登录账号(如testuser)。
EXEC sp_droplogin 'testuser'’
5.3.2 管理数据库用户
(1)添加数据库用户
/* sp_grantdbaccess为登录帐号在当前数据库中添加一个安全账户,即数据库用户。以下T-SQL代码将登录帐号添加到S_T数据库用户中。*/
USE S_T
EXEC sp_grantdbaccess 'testuser','testuser' EXEC sp_grantdbaccess 'test1','test1' EXEC sp_grantdbaccess 'test2','test2' EXEC sp_grantdbaccess 'test3','test3'
(2)删除数据库用户(如test3)
EXEC sp_revokedbaccess 'test3'
5.3.3 管理数据库角色
(1) 添加数据库角色
/* 在S_T数据库中创建一个新角色db_operator,并将数据库用户test2,test3添加到该角色中 */
USE S_T
EXEC sp_addrole 'db_operator'
EXEC sp_addrolemember 'db_operator', 'test2' EXEC sp_addrolemember 'db_operator', 'test3'
23
《数据库概论》实验指导书
(2) 删除数据库角色
/* 删除db_operator角色。 */
EXEC sp_droprole 'db_operator'
5.3.4 权限管理
(1)语句权限的管理
系统管理员授予用户testuser如下权限:CREATE TABLE、CREATE VIEW。
USE S_T
GRANT CREATE TABLE, CREATE VIEW TO testuser
(2)对象权限的管理
GRANT SELECT,UPDATE(Sname,Sage,Ssex,Sdept) ON Student TO test1 GRANT SELECT ON Student,Course,SC TO db_operator
(3)收回权限
REVOKE CREATE TABLE, CREATE VIEW FROM testuser
REVOKE SELECT UPDATE(Sname,Ssex,Sdept)ON Student FROM test1 REVOKE SELECT ON Student FROM db_operator
检验效果:用创建的用户替换sa系统用户,来尝试与数据库服务器的连接,对数据表中的数据进行存取操作,并记录与分析可能会遇到的问题。尝试通过授予更高的权限来解决问题。
附:实验内容提纲
利用S_T.sql建立示例数据库S_T。
设置SQL Server的安全认证模式:
(1) Windows身份验证模式;
(2) 混合模式(SQL Server和Windows身份验证模式) 添加SQL Server登录帐号:4个
tempuser, temp1, temp2, temp3; 密码分别为:tempqq, qq1, qq2, qq3。 为S_T数据库添加(数据库)用户:4个 tempuser, temp1, temp2, temp3
(与SQL Server登录帐号一一对应(映射))
为S_T数据库添加自定义(数据库)角色: 1个,即db_operator。
将数据库用户temp2和temp3添加到db_operator角色中,成为其角色成员。 将在S_T数据库中创建表、创建视图的权限授予数据库用户tempuser。
将SELECT,UPDATE(Sname,Sage,Ssex,Sdept) ON Student的权限授予数据库用户temp1。 将SELECT ON Student,Course,SC的权限授予数据库角色db_operator。
检验结果:用创建的登录账号替换sa系统账号,来尝试与数据库服务器建立连接,对数据表中的数据进行存取操作,并记录与分析可能会遇到的问题。尝试通过授予更高的权限来解决问题。 从数据库用户temp1回收UPDATE(Sname,Ssex,Sdept) ON Student的权限,从数据库角色db_operator回收SELECT ON SC的权限,然后检验结果的正确性。
24