数据库的安全管理主要是对数据库用户的合法性和操作权限的管理。数据库用户(在不至于引起混淆的情况下简称用户)是指具有合法身份的数据库使用者,角色是具有一定权限的用户组。SQL Server的用户或角色分为二级:一级为服务器级用户或角色;另一级为数据库级用户或角色。
SQL Server的安全性管理包括以下几个方面:数据库系统登录管理、数据库用户管理、数据库系统角色管理以及数据库访问权限的管理。
1. 登录账号
登录账号也称为登录用户或登录名,是服务器级用户访问数据库系统的标识。为了访问SQL Server系统,用户必须提供正确的登录账号,这些登录账号既可以是Windows登录账号,也可以是SQL Server登录账号,但它必须是符合标识符规则的惟一名字。登录账号的信息是系统信息,存储在master数据库的sysxlogins系统表中,用户如需要有关登录账号的信息可以到该表中查询。
SQL Server 2000有一个默认的登录账号sa(SystemAdministrator),在SQL Server系统中它拥有全部权限,可以执行所有的操作。
2.查看登录账号
使用企业管理器可以创建、查看和管理登录账号。“登录账号”存放在SQL服务器的安全性文件夹中。当进入企业管理器,打开指定的SQL服务器组和SQL服务器,并选择【安全性】文件夹的系列操作后,就会出现如图9-2所示的屏幕窗口。通过该窗口可以看出安全性文件夹包括4个文件夹:登录、服务器角色、连接服务器和远程服务器。单击【登录】可以看到当前数据库服务器的合法登录用户的一些信息。
3.创建一个登录账号
创建一个登录账号的操作步骤为:右击【登录】文件夹,在弹出的菜单中选择【新建登录】选项后,会出现图9-3所示新建登录对话框界面,回答相应信息即可。也可以通过此界面设定该登录用户的服务器角色和要访问的数据库,这样该登录账号同时也作为数据库用户。
4.编辑或删除登录账号
单击【登录】文件夹,在出现的显示登录账号的窗口中,用鼠标右击需要操作的登录号:选择【属性】便可对该用户已设定内容进行重新编辑;选择【删除】便可删除该登录用户。
进行上述操作需要对当前服务器拥有管理登录(Security Administrators)及其以上的权限。
图9-2 安全性文件夹的屏幕界面 图9-3 新建登录对话框
1. 用户账号
用户账号也称为用户名,或简称为用户。他是数据库级用户,即是某个数据库的访问标识。在SQL Server的数据库中,对象的全部权限均由用户账号控制。用户账号可以与登录账号相同也可以不想同。
数据库用户必须是登录用户。登录用户只有成为数据库用户(或数据库角色)后才能访问数据库。用户账号与具体的数据库有关。例如,MyDb数据库中的用户账号use1不同于STUDENTES数据库中的用户账号use1。
每个数据库的用户信息都存放在系统表sysusers中,通过查看该表可以看到当前数据库所有用户的情况。在该表中每一行数据表示一个SQL Server用户或SQL Server角色信息。创建数据库的用户称为数据库所有者(dbo),他具有这个数据库的所有权限。创建数据库对象的用户称为数据库对象的所有者(dbo),他具有该对象的所有权限。在每一个SQL Server 2000数据库中,至少有一个名称为dbo用户。系统管理员sa是他所管理系统的任何数据库的dbo用户。
2. 查看用户账号
使用企业管理器可以创建、查看和管理数据库用户。每个数据库中都有“用户”文件夹。当进入企业管理器,打开指定的SQL服务器组和SQL服务器,并打开【数据库】文件夹,选定并打开要操作的数据库后,单击【用户】文件夹就会出现如图9-4所示的用户信息窗口。通过该窗口可以看到当前数据库合法用户的一些信息。
图9-4 查看用户信息窗口
3. 创建新的数据库用户
创建新的数据库用户有两种方法。
一种方法是在创建登录用户时,指定他作为数据库用户的身份。例如,在图9-3新建登录对话框中,输入登录名称(如user1),单击【数据库访问】选项卡,在【指定此登录可以访问的数据库[S]】区域的【许可】栏目下指定访问数据库(如MyDb),如图9-5所示,登录用户user1同时也成为数据库MyDb的用户。
另一种方法是单独创建数据库用户,这种方法适于在创建登录账号时没有创建数据库用户的情况,操作步骤如下:右击【用户】文件夹,在弹出的菜单中选择【新建数据库用户】命令后,会出现图9-6所示新建用户对话框界面,在【登录名】下拉框中选择预创建用户对
图9-5 创建登录时指定登录用户同时作为数据库用户界面
图9-6 单独创建数据库用户对话框
应的登录名,然后在【用户名】的文本框中键入用户名即可。如图9-6所示。通过此界面也可以设定该数据库用户的权限和角色的成员。
4. 编辑或删除数据库用户账号
单击【用户】文件夹,在出现的显示用户账号的窗口中,右击需要操作的用户账号,选择【属性】命令,出现该用户的角色和权限窗口,可对该用户已设定内容进行重新编辑;选择【删除】便可删除该数据库用户。
进行上述操作需要对当前数据库拥有用户管理(db_accessadmin)及其以上的权限。
在SQL Server 2000中可以把某些用户设置成某一角色,这些用户称为该角色的成员。当对该角色进行权限设置时,其成员自动继承该角色的权限。这样,只要对角色进行权限管理就可以实现对属于该角色的所有成员的权限管理,大大减少了工作量。
SQL Server中有两种角色,即服务器角色和数据库角色。
1.服务器角色
一台计算机可以承担多个 SQL Server服务器的管理任务。固定服务器角色是对服务器级用户即登录账号而言的。它是指在登录时授予该登录账号对当前服务器范围内的权限。这类角色可以在服务器上进行相应的管理操作,完全独立于某个具体的数据库。
固定服务器角色的信息存储在master数据库的sysxlogins系统表中。SQL Server 2000提供了8种固定服务器角色,如图9-7所示。
图9-7固定服务器角色
可以使用企业管理器将登录账号添加到某一指定的固定服务器角色作为其成员。步骤如下:登录服务器后,展开【安全性】文件夹,单击【服务器角色】文件夹,则会出现图9-7所示的固定服务器角色窗口,右击某一角色,在弹出的菜单中选择【属性】命令,可以查看该角色的权限,并可以添加某些登录账号作为该角色的成员,也可以将某一登录账号从该角色的成员中删除。
注意:
(1) 固定服务器角色不能被删除、修改何增加;
(2) 固定服务器角色的任何成员都可以将其他的登录账号增加到该服务器角色中。
2.数据库角色
在一个服务器上可以创建多个数据库。数据库角色对应于单个数据库。数据库的角色分为固定数据库角色和用户定义的数据库角色。
固定数据库角色是指SQL Server 2000为每个数据库提供的固定角色。SQL Server 2000允许用户自己定义数据库角色,称为用户定义的数据库角色。
(1) 固定数据库角色
固定数据库角色的信息存储在sysuers系统表中。SQL Server 2000提供了10种固定数据库角色,如表9-3所示。
表9-3固定数据库角色
角色 |
|
描述 |
public |
|
维护默认的许可 |
db_ owner |
|
执行数据库中的任何操作 |
db_accessadmin |
|
可以增加或删除数据库用户、组和角色 |
db_addladmin |
|
增加、修改或删除数据库对象 |
db_securityadmin |
|
执行语句和对象权限管理 |
db_backupoperator |
|
备份和恢复数据库 |
db_#reader |
|
检索任意表中的数据 |
db_#writer |
|
增加、修改和删除所有表中的数据 |
db_deny#reader |
|
不能检索任意一个表中数据 |
db_deny#writer |
|
不能修改任意一个表中的数据 |
可以使用企业管理器查看固定数据库角色,还可以将某些数据库用户添加到固定数据库角色中,使数据库用户成为该角色的成员。也可以将固定数据库角色的成员删除。
将用户添加到某一数据库角色的步骤为:打开指定的数据库,单击【角色】文件夹,右击某个固定数据库角色,在出现的菜单中选择【属性】命令,就会出现图9-8所示的数据库角色属性对话框,单击【添加】按钮,则会出现该角色的非成员用户,按提示信息操作可以将他们添加到该角色中;选中某一用户后,单击【删除】按钮可以将此用户从该角色中删除。
图9-8 数据库角色属性对话框
注意:
●SQL Server 2000提供的10种固定数据库角色不能被删除和修改。
●固定数据库角色的成员可以增加其他用户到该角色中。
(2) 用户定义的数据库角色
在许多情况下,固定数据库角色不能满足要求,需要用户自定义数据库新角色。
使用企业管理器创建数据库角色的步骤为:在企业管理器中打开要操作的数据库文件夹,右击【角色】文件夹,并在弹出的菜单中选择【新建数据库角色】命令,则出现新建数据库角色对话框如图9-9所示,按提示回答角色名称等相应信息后,单击【确定】按钮即可。
在新建数据库角色对话框中可完成3种操作:在名称栏中输入新角色名;在用户栏中添加或删除角色中的用户;确定数据库角色的类型。
用户定义的数据库角色类型有两种:标准角色(Standard Role)和应用程序角色(Application Role)。标准角色用于正常的用户管理,它可以包括成员。而应用程序角色是一种特殊角色,需要指定口令,是一种安全机制。
图9-9 新增数据库角色对话框 图9-10 数据库角色权限设置对话框
对用户定义的数据库角色,可以设置或修改其权限。使用企业管理器进行操作的步骤为:打开操作数据库,选中用户定义的数据库角色,右击此角色在弹出的菜单中选择【属性】命令,然后单击【权限】按钮,则会出现当前数据库的全部数据对象以及该角色的权限标记(若对角色设置过权限,也可以仅列出该角色具有权限的数据对象)。如图9-10所示。单击数据库角色权限设置对话框中数据对象访问权限的选择方格有三种状况:
√:授予权限。表示授予当前角色对指定的数据对象的该项操作权限。
×:禁止权限。表示禁止当前角色对指定的数据对象的该项操作权限。
空:撤消权限。表示撤销当前角色对指定的数据对象的该项操作权限。
使用企业管理器也可以删除用户定义的数据库角色。步骤为:打开操作数据库,选中用户定义的数据库角色,右击此角色在弹出的菜单中选择【删除】命令即可。
1.权限的种类
SQL Server 2000使用权限来加强系统的安全性,通常权限可以分为三种类型:对象权限、语句权限和隐含权限。
(1) 对象权限
对象权限是用于控制用户对数据库对象执行某些操作的权限。数据库对象通常包括表、视图、存储过程。
对象权限是针对数据库对象设置的,它由数据库对象所有者授予、禁止或撤消。对象权限适用的数据库对象和Transact-SQL语句在表9-4中列出。
表9-4对象权限适用的对象和语句
Transact-SQL |
|
数据库对象 |
SELECT(查询) |
|
表、视图、表和视图中的列 |
UPDATE(修改) |
|
表、视图、表的列 |
INSERT(插入) |
|
表、视图 |
DELETE(删除) |
|
表、视图 |
EXECUTE(调用过程) |
|
存储过程 |
DRI(声明参照完整性) |
|
表、表中的列 |
(2) 语句权限
语句权限是用于控制数据库操作或创建数据库中的对象操作的权限。语句权限用于语句本身,它只能由SA或dbo授予、禁止或撤消。语句权限的授予对象一般为数据库角色或数据库用户。语句权限适用的 Transact-SQL语句和功能如表9-5所示。
表9-5 语句权限适用的语句和权限说明
Transact-SQL语句 |
权限说明 |
CREATE #BASE |
创建数据库,只能由SA授予SQL服务器用户或角色 |
CREATE DEFAULT |
创建缺省 |
CREATE PROCEDURE |
创建存储过程 |
CREATE RULE |
创建规则 |
CREATE TABLE |
创建表 |
CREATE VIEW |
创建视图 |
BACKUP #BASE |
备份数据库 |
BACKUP LOG |
备份日志文件 |
(3) 隐含权限
隐含权限指系统预定义而不需要授权就有的权限,包括固定服务器角色成员、固定数据库角色成员、数据库所有者(dbo)和数据库对象所有者(dboo)所拥有的权限。
例如,sysadmin固定服务器角色成员可以在服务器范围内做任何操作,dbo可以对数据库做任何操作,dboo可以对其拥有的数据库对象做任何操作,对他不需要明确的赋予权限。
2.权限的管理
对象权限的管理可以通过两种方法实现:一种是通过对象管理它的用户及操作权限,另一种是通过用户管理对应的数据库对象及操作权限。具体使用哪种方法要视管理的方便性来决定。
(1)通过对象授予、撒消或禁止对象权限
如果一次要为多个用户(角色)授予、撤消或禁止对某一个数据库对象的权限时,应采用通过对象的方法实现。在SQL Server的企业管理器中,实现对象权限管理的操作步骤如下:
1)展开企业管理器窗口,打开【数据库】文件夹,展开要操作的数据库(如MyDb),右击指定的对象(如readers表)。
2)在弹出的菜单中,选择【所有任务】,在弹出的子菜单中选择【管理权限】命令,此时会出现一个对象权限对话框,如图9-11所示。
3)对话框的上部,有两个单选框如图9-11所示,可以根据需要选择一个。一般选择【列出全部用户】→【用户定义的数据库角色/public】。
4)对话框的下面是有关数据库用户和角色所对应的权限表。这些权限均以复选框的形式表示。复选框有三种状态:“√”(授予权限)、“×”(禁止权限)、空(撤消权限)。在表中可以对各用户或角色的各种对象操作权限(SELECT、INSERT、UPDATE、DELETE、EXEC和DRI)进行授予、禁止或撤消,单击复选框可改变其状态。
5)完成后单击【确定】按钮。
图9-11 数据库对象权限对话框 图9—12 数据库角色权限属性对话框
(2)通过用户或角色授予、撤消或禁止对象权限
如果要为一个用户或角色同时授予、撤消或者禁止多个数据库对象的使用权限,则可以通过用户或角色的方法进行。例如要对“MyDb”数据库中的“数据输入”角色进行授权操作,在企业管理器中,通过用户或角色授权(或收权)的操作步骤如下:
1)扩展开SQL服务器和【数据库】文件夹,单击数据库【MyDb】,单击【用户】或【角色】。本例单击【角色】。在窗口中找到要选择的用户或角色,本例为【数据输入】角色,右击该角色,在弹出菜单中选择【属性】命令后,出现如图9-12所示数据库角色属性对话框。
2)在数据库角色属性对话框中,单击【 权限】按钮,会出现如图9-13所示的数据库角色权限属性对话框。
图9-13 数据库角色权限属性对话框
4)在对话框的权限列表中,对每个对象进行授予、撤消或禁止权限操作。在权限表中,权限SELECT、INSERT、UPDATE等安排在列中,每个对象的操作权用一行表示。在相应的复选框上,如果为“√”则为授权,为“×”则为禁止权限,如果为空白则为撤消权限。单击复选框可改变其状态。
5)完成后,单击【确定】按钮。返回数据库角色属性对话框后,再单击【确定】按钮。
3.语句权限的管理
SQL Server的企业管理器中还提供了管理语句权限的方法,其操作的具体步骤如下:
1)展开SQL服务器和【数据库】文件夹,右击要操作的数据库文件夹,如【MyDb】数据库,并在弹出菜单中选择【属性】命令,会出现数据库属性对话框。
2)在数据库属性对话框中,选择【权限】选项卡,出现数据库用户及角色的语句权限对话框,如图9-14所示。
图9-14 数据库用户和角色的语句权限对话框
在对话框的列表栏中,单击表中的各复选框可分别对各用户或角色授予、撤消或禁止数据库的语句操作权限。复选框内的“√”表示授予权限,“×”表示禁止权限,空白表示撤消权限。
3)完成后单击【确定】按钮。
4. 使用Transact-SQL语句管理权限
SQL Server 2000的安全性管理,不仅可以通过SQL Server的企业管理器的相应操作实现,还可以在查询分析器中通过Transact-SQL语句实现。这里只介绍用Transact-SQL语句实现权限管理,其语句格式与本章9.1.3小节中介绍的标准SQL的类似。
(1) 授予权限语句-GRANT
1) 语句授权
【例9.9】 语句授权:将创建数据库、创建表的权限授予用户user1和user2。
----将MyDb数据库设置为当前数据库----
USE MyDb
GRANT CREATE TABLE TO user2
通过查看数据库MyDb【属性】的【权限】项,可以看到用户user2拥有创建表的语句权限。
2) 对象授权
注意:SQL Server 与标准SQL的不同是省去了对象类型,直接写对象名称即可。
【例9.10】 对象授权:授予角色public对表readers的select权限,授予用户user1对表readers的insert和delete的权限。
GRANT SELECT ON readers TO public
GRANT INSERT,DELETE ON readers TO user1
通过查看角色public和用户user2的属性,可以看到他们已拥有对数据对象 readers的相应权限。
【例9.11】将对表readertype的属性“限借阅数量”和“借阅期限”的修改权限授予user2。
GRANT UPDATE(限借阅数量, 借阅期限) ON readertype TO user2
(2) 禁止权限语句-DENY
1)禁止语句权限
【例9.12】禁止用户user2的CREATE TABLE 语句权限。
DENY CREATE TABLE TO user2
通过查看数据库MyDb【属性】的【权限】项,可以看到该用户对数据库的创建表的语句权限被禁止。
2)禁止对象权限
【例9.13】禁止用户user2对表readers的DELETE权限。
DENY DELETE ON readers TO user2
通过查看用户user2的属性,可以看到该用户对数据对象 readers的DELETE的权限被禁止。
可以使用DENY语句限制用户或角色的某些权限。这样不禁删除了以前授予用户或角色的某些权限,而且还禁止这些用户或角色从其他角色继承禁止的权限。
(3)撤消权限语句-REVOKE
1) 撤消语句权限
【例9.14】撤消用户user2的CREATE TABLE 语句权限。
REVOKE CREATE TABLE TO user2
通过查看数据库MyDb【属性】的【权限】项,可以看到用户user2创建表的权限被撤消。
2)撤销对象权限
【例9.15】撤消用户user2对表readers的DELETE权限。
REVOKE DELETE ON readers TO user2
通过查看用户user2的属性,可以看到该用户对数据对象 readers的DELETE的权限被撤消。
注意:撤消权限的作用类似于禁止权限,它们都可以删除用户或角色的指定权限。但是撤消权限仅仅删除用户或角色拥有的某些权限,并不禁止用户或角色通过其它方式继承已被撤消的权限。
使用系统存储过程 sp_helprotect可以查看当前数据库中指定数据对象或语句上的权限信息。
【例9.16】以下批的执行结果表明,用户user1在books上的DELETE权限被禁止后,将其加入拥有books上的DELETE权限的角色group中后,被禁止的权限DELETE不能从group中继承。结果如表9-6所示。
--对user1授权--
GRANT INSERT,DELETE ON books TO user1
--查看表books上的权限情况--
EXEC sp_helprotect 'books'
--禁止user1对表books的DELETE权限--
DENY DELETE ON books TO user1
--查看表books上的权限情况--
EXEC sp_helprotect 'books'
--授予角色group权限--
GRANT INSERT,DELETE,UPDATE ON books TO group1
--将user1添加到角色group--
EXEC sp_addrolemember 'group1','user1'
--查看表books上的权限情况--
EXEC sp_helprotect 'books'
Go
表9-6 被禁止的权限不能通过角色继承