配色: 字号:
《SQL Server 2005基础教程及上机指导》第5章 SQL Server 2005安全性
2023-05-25 | 阅:  转:  |  分享 
  
第5章 SQL Server 2005安全性管理5.1 SQL Server 2005身份验证过程5.2 SQL Server 200
5的授权过程5.3 创建和管理登录名5.4 创建和管理数据库用户5.5 上机实验 习题  对任何数据库而言,安全性都是其整体
中一个相当重要的环节,尤其是对于SQL Server 2005这样的大型数据库。   要获取数据库中的信息,用户必须具备相应的权限
,必须要经过数据库的验证和授权。SQL Server 2005数据库有一套完整的用户验证授权机制。当然,就SQL Server 2
005的安全性而言,并不仅仅包含验证授权机制,SQL Server 2005的安全性是一个相当广泛的概念,包含相当宽广的内容,本章
仅对其验证授权机制进行阐述。     本章学习目标:   (1) 了解SQL Server 2005安全机制体系
。   (2) 掌握SQL Server 2005的验证方式及过程,登录名的作用及其创建,服务器角色的作用。   (3) 掌握SQ
L Server 2005的授权体系,用户的作用及其创建,数据库角色的作用及其创建,如何对用户及数据库角色授权。   5.1.1
身份验证过程概述   通过前面的学习我们知道,在一台数据库服务器内可以安装多个数据库实例,在每个实例中可以创建多个数据库。用户
若要访问某个数据库实例中的某个数据库,首先要接受该数据库所属的数据库实例的验证(Authentication),用户需要向该数据库
实例出示登录名和密码,这对应着图5-1中的第1步。验证就是数据库实例验证用户是否具有有效的登录名(Login)以连接到该数据库实例
的过程。5.1 SQL Server 2005身份验证过程     图5-1 用户访问SQL Server数据库的过程  当用
户成功地通过了数据库实例的验证之后,并不等于该用户就可以访问此数据库实例中的数据库了,通过数据库实例的验证仅仅表明该用户可以连接到
此数据库实例,如果要访问其中的数据库,还需要向数据库出示正确的用户名(User Name),然后获取相应的授权,这就是数据库的授权
(Authorization)过程,这对应着图5-1中的第2步。授权就是当用户通过数据库实例验证之后,决定该用户可以在其要访问的数
据库中执行哪些操作(例如访问表、创建表、插入记录等)的过程。  为了更好地理解,可以对以上数据库实例的验证及授权过程打一个通俗的比
方。数据库实例引擎就好比是一幢大的写字楼,该实例引擎中的数据库就好比是进驻于该写字楼中的各个公司。用户要访问某个公司,首先得进入写
字楼的大门,而要进入写字楼的大门得先通过大门口保安的检验核实,此时大门保安对用户的检验核实相当于数据库实例引擎对用户的验证。经过保
安的检验核实之后,用户就可以进入该写字楼了,但并不意味着用户可以随便访问写字楼内的任何公司,保安的检验核实并没有赋予该用户访问写字
楼内任何公司的权限,仅仅是表明该用户可以进入写字楼而已。此时用户要访问某家公司必须首先取得访问该公司的权限,经过公司的检验授权之后
,如果表明该用户是该公司的总经理,那他当然可以对此公司做他总经理有权能做的任何事情;如果表明该用户仅仅是该公司的一个普通访客,那他
就只能参观参观该公司,这就相当于数据库对用户的授权过程。5.1.2 身份验证方式   通过上一小节的介绍我们知道,用户必须具有有
效的登录名才可以与数据库实例建立连接。登录名由数据库管理员创建,管理员在创建登录名时可赋予该登录名一定的权限以使用户能访问相应的数
据库。   登录名可以映射到Windows系统中的帐户或组,也可以在SQL Server 2005数据库实例中创建。有关登录名的详
细内容参见5.3节。   SQL Server 2005共有两种验证模式,当用户向数据库实例出示登录名以请求验证时,可以选择这两种
验证模式中的任意一种。下面对此两种验证作一简要介绍。  1.Windows身份验证   Windows身份验证是指SQL Serv
er 2005利用Windows系统的身份验证机制来代替其自身的身份验证机制。Windows系统的验证机制具有很高的安全性,尤其是
自Windows 2000以后,其验证机制默认采用Kerberos协议,该验证协议可以达到相当高的安全级别。读者可查阅有关Wind
ows Server 2003的书籍以获取Kerberos协议的详情。另外,在Windows系统中还可以启用最小密码长度、强密码机
制、审核以及其他安全机制等。  如果某用户已经使用其Windows帐户登录到Windows域中或Windows Server系统中
,则该用户在连接到SQL Server实例时,可以选择Windows验证方式,例如当用户通过SQL Server Manageme
nt Studio连接到数据库时,在“连接到服务器”对话框中选择“身份验证(A)”为“Windows身份验证”,此时用户不需要再输
入用户名和密码(可以看到该对话框下部的“用户名”和“密码”已经变成不可用的灰色),单击“确定”按钮时可自动将该用户的Windows
身份凭据(Kerberos票据)传送给SQL Server以验证。SQL Server检查登录名与该用户帐户的映射情况以决定是否允
许该用户访问SQL Server。   这种Windows身份验证模式也称为信任连接。  2.SQL Server身份验证   如
果请求连接到SQL Server实例的用户没有经过Windows域或系统的验证(例如通过Internet对数据库实例进行远程连接)
,或者该用户希望使用SQL Server内建的安全帐户(登录名)来连接到SQL Server实例,则该用户可以选择“SQL Ser
ver身份验证”方式来连接到数据库实例,此时用户需要出示用户名和密码。SQL Server使用其自身的验证机制来对此用户名和密码进
行检验以决定是否允许该用户访问SQL Server实例。5.1.3 设置SQL Server 2005身份验证模式   通过上一
小节的讲解,我们知道用户在连接到SQL Server 2005时,可以请求“Windows身份验证”,也可以请求“SQL Serv
er身份验证”。当用户请求“SQL Server身份验证”时(例如在“连接到服务器”对话框中,选择身份验证为“SQL Server
身份验证”,输入用户名“sa”以及密码。有关登录名“sa”的更多内容,参见5.3节),有可能会遇到图5-2所示的提示。如果能确认输
入的用户名及密码都正确而仍然出现这样的提示,则说明SQL Server此时已被配置为不接受“SQL Server身份验证”连接。 
 图5-2 请求“SQL Server身份验证”连接失败  在默认情况下,SQL Server 2005只允许“Windows身
份验证”连接,在安装SQL Server 2005时,可以看到这一点,参见1.3.2节“安装过程及步骤”第(5)步的描述。SQL
Server 2005有两种服务器身份验证模式可供选择,这两种模式分别为“Windows身份验证模式”和“混合验证模式”。  1.
Windows身份验证模式   如果SQL Server配置为该验证模式,则只接受“Windows身份验证”连接。假若此时用户连接
时选择“SQL Server身份验证”,则会遇到图5-2所示的连接错误消息提示。这是SQL Server 2005身份验证模式的默
认配置。  2.混合验证模式   如果SQL Server配置为该验证模式,则既可接受“Windows身份验证”连接,也可接受“S
QL Server身份验证”连接。如果用户需要从异类网络环境(例如UINX、LINUX等)或Internet连接到SQL Serv
er 2005,则适宜采用该项“混合验证模式”,因为从这些网络环境连接到SQL Server 2005时,只能采用“SQL Ser
ver身份验证”连接。当用户连接到SQL Server 2005时如果遇到图5-2所示的错误消息提示,则可以将SQL Server
2005实例的身份验证模式更改为“混合验证模式”以解决这个问题。注意,启用“混合验证模式”会降低SQL Server 2005的
整体安全性,故只在绝对需要的情况下才启用该模式。  可以按照以下步骤来更改SQL Server 2005实例的身份验证模式:   
(1) 首先通过SQL Server Management Studio连接到SQL Server 2005实例。   (2) 在
对象资源管理器中,右击该实例名称,在右键菜单中选择“属性”。   (3) 在弹出的“服务器属性”对话框中单击“安全性”,然后在右方
的“服务器身份验证”栏中单击“Windows身份验证模式(W)”以启用Windows身份验证,单击“SQL Server和Wind
ows身份验证模式(S)”以启用混合验证模式,如图5-3所示,然后单击“确定”按钮关闭对话框。  (4) 在对象资源管理器中右击该
实例名称,在右键菜单中选择“重新启动”以按要求重新启动该SQL Server 2005实例,使更改的设置生效。   读者可于此处完
成本章上机实验一,以加深对SQL Server 2005服务器身份验证模式的认识。  图5-3 选择服务器身份验证模式  
  当用户通过SQL Server 2005的身份验证之后,该用户仅能执行在他权限范围之内的操作,也仅能访问他被授权允许访问的数据
库,这里涉及到一个用户在经过身份验证之后如何被赋予相应权限的问题。用户的权限分服务器级的权限和数据库级的权限,有两种方式可以非常方
便地将这两种权限授予用户,即通过将用户加入到相应的固定服务器角色和固定数据库角色之中。5.2 SQL Server 2005的授
权过程5.2.1 服务器级的权限   在SQL Server 2005中,已经预先定义了一些固定服务器角色(Server Rol
es),不同的固定服务器角色具有不同的管理权限。在概念上,SQL Server 2005中的角色(包括随后介绍的数据库角色)类似于
Windows系统中的组,可以将Windows系统中的用户加入相应的组,从而方便地将用户归为某一类然后对其统一地授予相同的权限,极
大地简化了对用户的管理。同样地,在SQL Server 2005中,可以将登录名或用户名加入相应的角色,角色中的成员将自动拥有该角
色所具备的权限。  顾名思义,服务器角色意味着其成员可以从事服务器级范围内的操作。这里的服务器是指SQL Server 2005服
务器实例引擎。任何一个数据库实例的服务器角色都不能被删除,也不能更改其预先所定义好的权限。要对某个用户授予某种服务器级的权限,只需
要简单地将该用户的登录名加入到相应的服务器角色之中就可以了。  下面对这些服务器角色作简要的描述:   (1) sysadmin:
该固定服务器角色的成员可以在服务器中执行任何操作。默认情况下,Windows系统BUILTIN \Administrators组(
本地管理员组)的所有成员都是sysadmin固定服务器角色的成员。   (2) ?serveradmin:该固定服务器角色的成员可
以更改服务器范围的配置选项和关闭服务器。默认情况下,Windows系统BUILTIN\Server Operators组映射到此服
务器角色。  (3) setupadmin:该固定服务器角色的成员可以添加和删除链接服务器,并且也可以执行某些系统存储过程。例如可
以将某些系统存储过程标记为在数据库实例启动时执行,Windows系统BUILTIN\Server Operators组映射到此服务
器角色。  (4) securityadmin:该固定服务器角色的成员将管理登录名及其属性。它们可以 GRANT(授予)、DENY
(拒绝)和REVOKE(吊销)服务器级权限,也可以GRANT(授予)、DENY(拒绝)和REVOKE(吊销)数据库级权限。另外,它
们可以重置SQL Server登录名的密码。Windows系统BUILTIN\Server Operators组映射到此服务器角色
。有关GRANT、DENY 和REVOKE的详情,参见5.4节内容。  (5) ?processadmin:该固定服务器角色的成员
可以终止SQL Server实例中运行的进程。   (6) dbcreator:该固定服务器角色的成员可以创建、更改、删除和还原任
何数据库,可以将那些不属于sysadmin服务器角色的高级数据库管理员添加至该固定服务器角色中。   (7) ?diskadmin
:该固定服务器角色用于管理磁盘文件和备份设备,但仅仅用于兼容SQL Server 2000之前版本的数据库。  (8) ?bulk
admin:该固定服务器角色的成员可以运行 BULK INSERT 语句以对数据库执行大容量数据插入操作。   注意,任何一个服务
器角色中的成员都有权限将其他用户加入其所属的服务器角色中,例如,假如LiMei是securityadmin的成员但不是sysadm
in的成员,则LiMei可以将其他用户(例如LiuYing)加入到securityadmin中,但不能将其加入sysadmin中。
  可以按如下方式查看数据库实例中的固定服务器角色:   在SQL Server管理控制台中,展开节点“<数据库实例名称>”|“安
全性”,单击“服务器角色”,右方窗格中将列出所有的固定服务器角色。右击某个固定服务器角色(例如“sysadmin”),选择“属性”
,在其属性对话框中可查阅该固定服务器角色中的成员,如图5-4所示。单击下部的“添加”按钮,可按要求将其他登录名作为一个成员添加到此
固定服务器角色中。也可将某个角色成员选中,然后单击“删除”按钮以取消该登录名作为此角色中一个成员的资格。  图5-4 固定服务器
角色属性5.2.2 数据库级的权限   用户能访问SQL Server 2005数据库实例并不能说明该用户就可以访问该实例中的数
据库,固定服务器角色中的成员也没有被赋予访问数据库的权限,除非是sysadmin中的成员(因为sysadmin中的成员可以对该实例
做任何操作,当然包括了对该实例中所有数据库的任何操作)。   只有在取得了数据库访问权限的前提下,用户才能访问相应的数据库。数据库
管理员可以向用户授予相应的数据库级的权限。  数据库权限(Permission)可以被授予、拒绝或吊销,包括在数据库中创建对象(表
、索引、存储过程等)、管理数据库、运行某些T-SQL语句、向表或视图中插入数据,或仅仅是浏览表或数据。权限也可以以非常精细的粒度授
予用户,例如只允许访问数据库中某个表的某几列数据等,这可以视实际情况而定。有关向用户授予数据库级权限的详细内容,参见5.4节。  
 表5-1对基于数据库级的权限进行了较为详细的描述。  表5-1 数据库级权限大致分类下面对固定数据库角色作详细的说明。   固
定数据库角色是在数据库级别定义的,并且存在于每个数据库中。每个不同的数据库角色已经被授予了不同的数据库权限。不能删除固定数据库角色
,也不能更改其预先定义好的数据库权限。  共有九个预定义的固定数据库角色,分别如下:   (1) ?db_owner:该固定数据库
角色的成员可以执行数据库的所有配置和维护活动。   (2) ?db_accessadmin:该固定数据库角色的成员可以为Windo
ws登录帐户、Windows组和SQL Server 登录帐户添加或删除访问权限。   (3) db_securityadmin:
该固定数据库角色的成员可以修改角色成员身份和管理权限(使用GRANT、REVOKE、DENY语句)。  (4) db_ddladm
in:该固定数据库角色的成员可以在数据库中运行任何数据定义语言 (DDL,包括CREATE、ALTER、DROP)命令。   (5
) ?db_backupoperator:该固定数据库角色的成员可以备份该数据库,运行DBCC命令,发布检查点(Check Poi
nt)。   (6) db_datareader:该固定数据库角色的成员可以对数据库中的任何表或视图运行 SELECT语句,即读取
操作。   (7) ?db_datawriter:该固定数据库角色的成员可以在所有用户表中添加、删除或更改数据。   (8) db
_denydatareader:该固定服务器角色的成员不能读取数据库内用户表中的任何数据,即没有SELECT权限。   (9) d
b_denydatawriter:该固定服务器角色的成员不能添加、修改或删除数据库内用户表中的任何数据。  可以按如下方式查看数据
库实例中某个数据库的固定数据库角色:   在SQL Server管理控制台中,展开节点“<数据库实例名称>”|“数据库”|“<数据
库名称>”|“安全性”|“角色”,单击节点“数据库角色”,右方窗格中将列出所有的固定数据库角色(包括用户自定义的数据库角色)。右击
某个数据库角色(例如“db_owner”),选择“属性”,在其属性对话框中可查阅该数据库角色中的成员,如图5-5所示。单击下部的“
添加”按钮,可按要求将其他数据库用户或数据库角色作为一个成员添加到此数据库角色中。  图5-5 数据库角色属性也可将某个角色成员
选中,然后单击“删除”按钮以使该数据库用户或数据库角色不再属于此角色中的一个成员。图5-5中有关架构的介绍说明参见5.4节内容。 
    本章前两节已经描述,用户要能访问SQL Server 2005数据库实例,必须出示其登录名,出示登录名时可以选择“Win
dows身份验证”连接,也可以选择“SQL Server身份验证”连接,所以用户能访问SQL Server实例的前提条件是在该实例
中有他的登录名,尽管以“Windows身份验证”连接不需要直接出示登录名,但在SQL Server实例中也必须有相应的登录名与其W
indows帐户名形成映射关系,否则该Windows用户仍然不能登录到SQL Server 2005数据库实例。5.3 创建和管
理登录名  本节将详细描述如何创建、管理并使用登录名来访问SQL Server 2005数据库实例。5.3.1 查阅或修改SQL
Server 2005数据库实例登录名属性   通过以下方式可以查看某个数据库实例中已经创建好的登录名:   以SQL Serv
er管理控制台连接至该数据库实例引擎,在对象资源管理器中展开节点“<数据库实例名称>”|“安全性”,单击“登录名”,右方详细窗格中
将列出该数据库实例引擎所有的登录名,如图5-6所示。   若要修改登录名的属性,则在图5-6所示的页面中右击该登录名(例如“BUI
LTIN\Administrators”),然后选择“属性”以进入其属性对话框。在该属性对话框中,可以查阅或修改登录名的以下一些属
性选项。  图5-6 查看数据库实例的登录名  1.“常规”属性   在登录名属性对话框中,在左侧单击“常规”,右侧将列出其“常
规”属性选项,如图5-7所示。   1) 登录名   此处列出了登录名,如果是映射到Windows系统用户或组的登录名,则格式一般
为“<计算机名或域名>\<帐户名或组名>”(例如“WestSVR\SQLServerAdmins”,此例中的“WestSVR”为计
算机名,“SQLServerAdmins”为该计算机的组名称),否则就是常规的SQL Server登录名。图5-7中的登录名为“B
UILTIN\Administrators”,映射到计算机的内建(BUILTIN)管理员组“Administrators”。  图
5-7 登录属性常规选项  (1) ?Windows身份验证(W):如果该选项被选中,说明此登录名只能以“Windows身份验证
”登录数据库实例。事实上说明该登录名已经映射到Windows系统中的用户帐户或组。登录名一旦确定,该选项不能被修改(呈灰色显示)。
  (2) ?SQL Server身份验证(S):如果该选项被选中,说明此登录名只能以“SQL Server身份验证”登录数据库
实例,也说明该登录名是一个SQL Server登录名。登录名一旦确定,该选项不能被修改(呈灰色显示)。  “密码(P)”和“确认密
码(C)”:如果是SQL Server登录名,则可以于此处修改其登录密码。如果是映射到Windows系统的用户帐户或组的登录名,此
选项不可修改(可以在Windows系统中修改此登录名所映射到的用户帐户的密码)。  “强制实施密码策略(F)”、“强制密码过期(X
)”和“用户在下次登录时必须更改密码(U)”:如果要对用户登录名实施这些策略,则勾选其左边的复选框。此三项仅对SQL Server
登录名适用(但是这些策略均来自运行该数据库引擎实例的Windows Server计算机组策略中相应的密码策略和帐户锁定策略),如果
要对映射到Windows系统的用户帐户或组的登录名实施相应的选项,则直接在Windows系统中通过相应的组策略实施,有关组策略内容
可参阅Windows Server的书籍。  (3) “映射到证书”和“映射到非对称密钥”:登录名也可以映射到证书或非对称密钥,本
书不讨论映射到证书或非对称密钥的登录名,读者可参阅SQL Server联机丛书中的相关内容,有关证书和非对称密钥的知识,可参阅Wi
ndows Server书籍(或其帮助文档)中的“公钥基础结构”篇章。  2) 默认数据库(D)   此处指定当用户以该登录名登录
数据库实例时,实例中的哪个数据库将成为该用户的默认数据库。如果不用“USE”语句显式地更改当前数据库,则该用户的所有操作都是针对此
处指定的默认数据库。例如,当用户在SQL Server管理控制台的工具栏中单击“ ”以打开一个T-SQL查
询窗口时,此处设定的默认数据库将成为当前数据库并出现在工具栏“当前数据库”下拉列表框中。  3) 默认语言(A)   设定用户的默
认语言一般不需要改变。此处设置自动从操作系统中的区域中获取默认语言设置。  2.“服务器角色”属性   在登录名属性对话框中,于左
侧单击“服务器角色”,右侧将列出该登录名所属的固定服务器角色,如图5-8所示。要将登录名加入某个固定服务器角色或从某个固定服务器角
色中删除,只需勾选或清除该固定服务器角色左边的复选框,然后单击“确定”按钮即可。图5-8 登录名所属的服务器角色  3.“用户映
射”属性   在登录名属性对话框中,于左侧单击“用户映射”,右侧将列出该登录名与该数据库实例中的哪些数据库内的用户名形成了映射关系
,如图5-9所示。只有与数据库内的用户名形成了映射关系的登录名才可连接并访问此数据库(“sysadmin”固定服务器角色的成员除外
)。如果数据库名左边的复选框没有被勾选,则说明该登录名尚未映射到此数据库库内的任何用户(例如图中的“master”数据库)。若要建
立映射关系,可勾选此数据库左边的复选框,此时“用户”列将自动显示一个用户名(此用户名可以不是数据库中已存在的用户名,它可以被创建,
例如图中的“sb”)。默认情况下,此用户名与登录名的名字相同,也可以将此用户名改成其他名字(例如图中的“sbTemp”)。要将此数
据库用户加入该数据库内的某个数据库角色,可勾选此对话框下部“数据库角色成员身份”中所列出的相应的数据库角色,然后单击“确定”按钮。
如果在数据库中尚未有相应的数据库用户,则此用户将自动被创建。有关数据库用户及角色的详情参见5.4节内容。  图5-9 登录名与数
据库中用户的映射关系  4.“安全对象”属性   在登录名属性对话框中,于左侧单击“安全对象”,右侧将列出该登录名在此数据库实例中
的权限,如图5-10所示。  图5-10 显示登录所拥有的权限  单击“添加”可以将该项添加到上部网格(例如单击“添加”|“特定
类型的所有对象(T)”|“确定”|“服务器”|“确定”,将数据库服务器“WestSVR”添加至上部网格)。在上部网格中选中一个项,
然后在“显式权限”网格中将显示该登录名对此安全对象有哪些显式权限,也可为其设置适当的权限(在下部网格中找到相应的权限,分别勾选“授
予”或“拒绝”。如果勾选“具有授予权限”,则表明该登录可将此权限授予其他登录)。该图所示操作与配置数据库用户或角色的“安全对象”属
性的操作相似,可结合图5-18~图5-20的操作一起体会。  此页仅显示那些显式授予或拒绝的权限。通过组或角色中的成员身份,可能隐
式拥有对这些安全对象或其他安全对象的其他权限。这些网格中没有列出通过组或角色中的成员身份获取的权限。所有显式和隐式权限的总和构成其
有效权限。   可以这样查看登录对某个安全对象的所有有效权限:在安全对象网格中,选中某个“安全对象”(例如服务器“WestSVR”
),单击按钮“有效权限(E)...”,将列出此登录对该安全对象的有效权限,如图5-11所示。  图5-11 登录对安全对象的显式
权限  5.“状态”属性   在登录名属性对话框中,于左侧单击“状态”,右侧将列出该登录名在此数据库实例中的状态,见图5-12。各
选项意义如下:   (1) 是否允许连接到数据库引擎。   “授予”:表明此登录可连接到此数据库实例引擎,相当于登录名被授予“CO
NNECT SQL”权限。   “拒绝”:表明此登录不允许连接到此数据库实例引擎,相当于此登录名被授予了“拒绝CONNECT SQ
L”权限。图5-12 登录的状态属性  (2) 登录。   “启用”:表明此登录名可通过数据库实例的身份验证。   “禁用”:表
明此登录名不能通过数据库实例的身份验证,此时该登录名存在但不   可用。  (3) ?SQL Server身份验证。   “登录已
锁定(L)”:表明用户在连接到数据库实例引擎时是否在指定时间内输入的错误密码次数到达了规定的次数,如果是,则该登录将被锁定。只有当
所选登录名使用SQL Server身份验证进行连接并且登录名已锁定时,复选框“登录已锁定”才是可用的,数据库管理员可清除此复选框以
为此登录解锁。 SQL Server数据库引擎的帐户锁定策略来自于运行该实例的Windows Server计算机系统中的帐户锁定策
略,此策略可设定用户登录到Windows网络中时,如果在一定时间内(默认为10分钟)连续输入了几次(默认为3次)错误的密码,则该帐
户将被锁定一段时间(默认为60分钟),在这一段时间内此帐户是不能再登录到Windows网络中的。   在SQL Server 20
05数据库实例中,有两个非常特殊的登录名,这两个登录名在安装SQL Server 2005时就已经创建好了。下面简要介绍这两个登录
名。  (1) “sa”登录名:SQL Server 2005实例中的“sa”登录名如同Windows系统中的“Administr
ator”用户账户(注意,这里的“Administrator”用户帐户是在安装Windows操作系统时的原始系统管理员帐户),可见
其地位之重要。 “sa”登录名不可以被删除,也不可以将其从固定服务器角色“sysadmin”中移除,只可以被重命名(这也类似于Wi
ndows系统中的“Administrator”帐户)。由此可见,该登录名的密码应该足够复杂,最好符合强密码要求,否则可能在安全方
面对数据库实例造成极大的危害。也正因为此,默认情况下,该登录名并没有被启用,注意其图标中有一个向下的箭头。若要启用该登录名,可打开
其类似图5-12所示的属性,选择“启用”,然后单击“确定”。   如果在安装SQL Server 2005数据库实例时选择身份验证
模式为“混合验证模式”,则可在安装时设置其密码。如果要在以后的时间内更改“sa”的登录密码,可打开其类似图5-7所示的常规属性对话
框,将更改的密码输入到“密码(P)”和“确认密码(C)”文本框中,然后单击“确定”按钮使其生效。  (2) “BUILTIN\Ad
ministrators”登录名:运行SQL Server 2005数据库实例的计算机中的内置Windows系统管理员组(Admi
nistrators)映射到此登录名。Windows系统管理员登录到计算机之后,可通过此登录名以“Windows身份验证”的方式连
接至SQL Server 2005数据库实例。本书大部分以SQL Server管理控制台连接到数据库实例时均采用这种信任连接方式。
默认情况下,该登录名属于固定服务器角色“sysadmin”中的成员,因而可以在数据库实例中执行任何操作。    注意,如果SQL
Server 2005安装在最新的VISTA(或Windows Server 2008)系统上,则默认情况下,将不会为计算机中的内
置Windows管理员(Administrators)组创建此登录名,这意味着即使是VISTA的系统管理员也不能通过“Window
s身份验证”方式连接至SQL Server 2005实例。这也是为了提高SQL Server 2005数据库实例的安全性。   若
要在VISTA下为其系统管理员组创建登录名,可按5.3.2节所述常规方法进行创建,或打开SQL Server外围应用配置器进行“添
加新管理员”的操作。5.3.2 Windows登录名   用户若选择以“Windows身份验证”的方式连接到SQL Server
2005数据库实例,此时用户将自动向SQL Server 2005数据库实例出示其Windows帐户身份。尽管该用户已经通   
过了Windows系统的验证,但如果在SQL Server 2005数据库实例中没有与其帐户(或该帐户所属的Windows组)形成
映射的登录名,则该用户将不能成功地连接到数据库实例。这种登录名称之为Windows登录名。  所以,以“Windows身份验证”的
方式连接到数据库实例的用户必须首先在该数据库实例中已经具备与其帐户(或该帐户所属的Windows组)相关的登录名。管理员必须要为这
些用户创建与其Windows帐户(或该帐户所属的Windows组)形成映射的登录名。   可以通过SQL Server管理控制台或
直接运行相关T-SQL语句的方式来创建与Windows帐户或组相映射的登录名。  采用SQL Server管理控制台创建与Wind
ows帐户或组相映射的登录名,可按以下步骤进行:   (1) 打开SQL Server管理控制台,以数据库管理员的身份登录进入SQ
L Server 2005数据库实例(例如以该数据库服务器的Windows系统管理员身份登录该数据库服务器,然后再以“Window
s身份验证”连接至数据库实例。默认情况下,Windows管理员组“administrators”已经在该数据库服务器的所有实例中有
与其相对应的登录名,且该登录名是固定服务器角色“sysadmin”的成员)。  (2) 在对象资源管理器中展开节点“<数据库实例名
称>”|“安全性”,右击“登录名”,选择“新建登录名(N)...”,弹出与图5-7相类似的属性对话框,在此页面中选择“Window
s身份验证(W)”,在“登录名(N)”文本框中输入要映射到的Windows用户帐户登录名或组名,格式为“<计算机名>\<用户帐户登
录名或组名>”,例如“WestSVR\LiMei”(LiMei为计算机WestSVR中的用户帐户登录名称)或“WestSVR\ S
QLServerUsers”(SQLServerUsers为计算机WestSVR中的组名称)。也可以单击“搜索(E)...”按钮,
然后定位至相应的用户帐户或组。  (3) 该新建登录名对话框中的其他属性(例如“服务器角色”、“用户映射”等)的意义均与5.3.1
节的描述相同,在此不再赘述,选择合适的设置即可。单击“确定”按钮,完成创建与Windows帐户或组相映射的登录名。   运行相关T
-SQL语句创建与Windows帐户或组相映射的登录名,可按以下步骤进行:   (1) 打开SQL Server管理控制台,以数据
库管理员的身份登录进入SQL Server 2005数据库实例。  (2) 单击工具栏“新建查询”按钮,打开T-SQL查询窗口,在
此窗口输入代码清单5-1所示的代码并运行。   对代码清单5-1的说明如下:   ? 第1行代码使用关键字“CREATE LOGI
N”表明创建登录名,其后紧跟登录名的名称“[WestSVR\LiMei]”。注意,如果从Windows帐户或组映射登录名,则登录名
的名称必须用方括号“[]”括起来。关键字“FROM WINDOWS”表明此登录名是映射到Windows帐户或组的登录名。此行代码的
完整意思为:创建一个名为“WestSVR\LiMei”的登录名,该登录名映射到计算机WestSVR中名为“LiMei”的Windo
ws用户帐户。  ? 第2行代码使用“DEFAULT_DATABASE”关键字指定该新创建的登录名的默认数据库为“WxdStude
nt”。此行代码也可省略,如果省略,则默认数据库为“Master”。   ? 为Windows系统中的组创建登录名的方法与代码清单
5-1差不多,只需将“[WestSVR\LiMei]”换成相应的组名称表达式即可。例如,如果要为计算机“WestSVR”中的组“S
QLServerUsers”创建登录名,可运行代码清单5-2中的T-SQL语句。创建好登录名之后,该组“SQLServerUser
s”中的成员都可以通过“Windows身份验证”的方式连接至该数据库实例。   读者可于此处完成本章上机实验二,以加深对W
indows登录名的认识体会。5.3.3 SQL Server登录名   用户若选择以“SQL Server身份验证”的方式连接
到SQL Server 2005数据库实例,则此时用户需要向SQL Server 2005数据库实例出示其SQL Server登录
名和密码。由数据库实例引擎对用户出示的登录名和密码进行验证,然后决定是否允许该用户的连接请求。如果数据库实例引擎中不存在用户出示的
登录名或者登录名和密码有误,则连接请求被拒绝。因此用户能成功地以“SQL Server身份验证”的方式连接到SQL Server
2005数据库实例的前提条件是:在该数据库实例中有该用户的SQL Server登录名。管理员需要为用户创建相应的登录名,并按实际需
要分配权限。   仍然可以通过SQL Server管理控制台或直接运行相关T-SQL语句的方式来创建SQL Server登录名。 
 采用SQL Server管理控制台创建SQL Server登录名,可按以下步骤进行:   (1) 打开SQL Server管理控
制台,以数据库管理员的身份登录进入SQL Server 2005数据库实例。   (2) 在对象资源管理器中展开节点“<数据库实例
名称>”|“安全性”,右击“登录名”,选择“新建登录名(N)...”,弹出与图5-7相类似的属性对话框,在“登录名(N)”文本框中
输入SQL Server登录名的名称(例如“sb”),选中“SQL Server身份验证(S)”,在“密码(P)”和“确认密码(C
)”文本框中输入该登录名的密码。   (3) 该新建登录名对话框中的其他属性(例如“服务器角色”、“用户映射”等)的意义均与5.3
.1节的描述相同,在此不再赘述,选择合适的设置后单击“确定”按钮,即可完成对SQL Server登录名的创建。   运行相关T-S
QL语句创建SQL Server登录名,可按以下步骤进行:   (1) 打开SQL Server管理控制台,以数据库管理员的身份登
录进入SQL Server 2005数据库实例。  (2) 单击工具栏“新建查询”按钮打开T-SQL查询窗口,在此窗口输入代码清单
5-3所示的代码并运行。   对代码清单5-3的说明如下:   ? 由于是直接创建SQL Server登录名,所以第1行代码不能再
使用关键字“FROM WINDOWS”。   ? 第2行代码通过关键字“PASSWORD”指定该登录名的密码为“password”
,注意密码要放在一对单引号之中,且密码区分大小写。   ? 第3行代码指定该登录名的默认数据库为“WxdStudent”。该行若省
略则其默认数据库为“Master”。  ? 第4行代码通过关键字“CHECK_POLICY”指定是否实施密码策略,若为“OFF”则
不实施密码策略,若为“ON”则强制实施密码策略。此处为不实施密码策略。再次强调此处的密码策略是指运行数据库实例的计算机中的Wind
ows密码策略。此行代码也可省略,如果省略则默认为“ON”,也即会强制实施密码策略。如果未能通过密码策略,则会收到消息提示:密码有
效性验证失败。这说明该密码不够复杂,不符合Windows策略要求。   读者可于此处完成本章上机实验三,以加深对SQL Serve
r登录的认识。5.3.4 与登录名相关的其他T-SQL语言   在前两节中我们看到,既可以通过SQL Server管理控制台这种
图形用户界面来创建登录名,也可以通过“CREATE LOGIN”语句来实现。5.3.1节描述了如何通过SQL Server管理控制
台来查看或修改登录名的属性。本节简要介绍一下其他与登录名相关的T-SQL语言。   1.ALTER LOGIN   该语句可对登录
名按要求进行修改。   (1) 启用或禁用登录名:   ALTER LOGIN ENABLE|DISABL
E   下面的代码将登录名“sb”禁用:   ALTER LOGIN sb DISABLE   (2) 修改登录名的密码:   A
LTER LOGIN WITH PASSWORD = ''password''   下面的代码将登录名“sb”
的密码修改为“123456”:   ALTER LOGIN sb WITH PASSWORD = ''123456''  (3) 修改
登录名的默认数据库:   ALTER LOGIN WITH DEFAULT_DATABASE = data
base   下面的代码将登录名“sb”的默认数据库修改为“WxdStudent”:   ALTER LOGIN sb WITH
DEFAULT_DATABASE = WxdStudent   修改登录名的密码和默认数据库也可合并在一起执行,如下列语句所示:
  ALTER LOGIN sb WITH PASSWORD = ''123456'',   DEFAULT_DATABASE = W
xdStudent  2.DROP LOGIN   该语句可删除登录名。语法如下所示:   DROP LOGIN login_na
me   下列语句删除“sb”登录名:   DROP LOGIN sb   以上仅对“CREATE LOGIN”、“ALTER L
OGIN”、“DROP LOGIN”作简要介绍,详细内容可参阅SQL Server联机丛书。  还有一些与登录名相关的系统存储过程
:   1) ?sp_addsrvrolemember   该存储过程可将登录添加到固定服务器角色中使之成为其中一员,语法为   
sp_addsrvrolemember   [ @loginame= ] ''login'' ,   [ @rolename =
] ''role''   下列语句将登录“sb”添加到固定服务器角色“serveradmin”中:   EXEC sp_addsrvr
olemember ''sb'',''serveradmin''  2) ?sp_dropsrvrolemember   该存储过程可将登
录从固定服务器角色中移除使之不再是其中一员,语法为   sp_dropsrvrolemember   [ @loginame =
] ''login'' ,   [ @rolename = ] ''role''   下列语句将登录“sb”从固定服务器角色“serv
eradmin”中移除:   EXEC sp_dropsrvrolemember ''sb'',''serveradmin''  3) ?
sp_helplogins   该存储过程提供有关每个数据库中的登录及相关用户的信息,语法为   sp_helplogins [
[ @LoginNamePattern = ] ''login'' ]   运行时如果未指定登录名(login),则返回有关所有登录的
信息。下列语句返回有关登录“sa”的信息:   EXEC sp_helplogins ''sa''   运行结果如图5-13所示。 
 图5-13 有关登录“sa”的信息  4) ?sp_helpsrvrole   该存储过程返回数据库实例中的固定服务器角色。下
列语句可以查看数据库实例中的所有固定服务器角色:   EXEC sp_helpsrvrole  5) ?sp_helpsrvrol
emember   该存储过程可查看固定服务器角色中的成员,语法为   sp_helpsrvrolemember [ [ @srv
rolename = ] ''role'' ]   上述语句不带参数运行时将返回所有固定服务器角色中的成员,下列语句返回固定服务器角色
“sysadmin”中的成员状况:   EXEC sp_helpsrvrolemember ''sysadmin''   运行结果如图
5-14所示。   有关存储过程的详情参见本书第6章内容。  图5-14 显示固定服务器角色“sysadmin”中的成员  
  在上一节创建的登录(例如“WestSVR\LiMei”、“sb”等)尽管可以成功地连接至数据库实例(WestSVR中的默认实
例),但并不能成功地访问数据库实例中的数据库(例如“WxdStudent”)。原因就是这些登录并没有在其要访问的数据库(例如“Wx
dStudent”)中有与之相对应的数据库用户,这些登录可以通过图5-1中第1步的身份验证,但却无法通过第2步的数据库授权。5.4
创建和管理数据库用户事实上,在默认情况下(数据库中的用户“guest”没有启用的时候),所有的登录若要访问某数据库(例如执行查
询、删除、修改等操作),都必须在该数据库中有与之相对应的用户。只有一种例外,就是固定服务器角色“sysadmin”中的成员不需要在
数据库中有相应的用户就可以对该数据库执行任何操作,因为该固定服务器角色可以在数据库实例的范围内执行任何操作(当然包括其中的数据库)
。   数据库管理员需要在数据库中为不同的登录创建相应的数据库用户,并按实际需求赋予其合适的权限。5.4.1 特殊的数据库用户“
guest”   在正式介绍数据库用户之前,首行了解数据库实例中每个数据库都有的一个特殊用户——“guest”。   guest是
所有 SQL Server 数据库中均提供的一种特殊用户帐户,不能从任何数据库中删除该帐户。如果使用未在数据库中分配用户帐户的登录
名进行连接(本章上机实验二、三即为此类情况),并且该连接引用该数据库中的对象,则它仅具有分配给该数据库中的guest 帐户的权限。
也就是说,此时登录是以guest的身份来访问数据库的。  在默认情况下,guest用户帐户并未启用,所以当使用未在数据库中分配用户
帐户的登录名进行连接时均会失败(本章上机实验二、三也属此类情况)。   可以这样查看guest用户的启用状况:通过SQL Serv
er管理控制台连接到数据库实例,在对象资源管理器中展开节点“<数据库实例名称>”|“数据库”|“<数据库名称>”|“安全性”,单击
“用户”,在“对象资源管理器详细信息”中将列出该数据库中的所有用户,其中当然包括guest用户,如果guest的图标中有一个向下的
箭头,则表明该用户未被启用,如图5-15所示。图5-15 数据库中的用户  必须通过运行相应的T-SQL语句才可以启用guest
用户,管理员可以运行下面的T-SQL代码来启用guest用户帐户:   GRANT CONNECT TO guest   运行完毕
之后,刷新“用户”节点,可以看到guest图标中的向下箭头已经消失了,表明该用户帐户已经启用。   读者可于此处完成本章上机实验四
的内容,以加深对guest用户帐户的认识。5.4.2 创建数据库用户   为了使登录能访问数据库,必须要在数据库中专门创建映射到
此登录的用户。仍然可以通过SQL Server管理控制台或运行相应的T-SQL语句来创建数据库用户。   1.通过SQL Serv
er管理控制台创建数据库用户   1) 直接通过登录名的“用户映射”属性创建数据库用户   可以直接通过打开登录名的属性页,定位至
其“用户映射”选项,然后勾选需要在其中创建相应用户的数据库,详情可参阅5.3.1节对“用户映射”属性的描述(见图5-9),此处不再
赘述。  2) 通过数据库中的“用户”创建数据库用户   操作步骤如下:   通过SQL Server管理控制台连接到数据库实例,
在对象资源管理器中展开节点“<数据库实例名称>”|“数据库”|“<数据库名称>”|“安全性”,右击节点“用户”,选择“新建用户(N
)...”,弹出图5-16所示的“数据库用户-新建”对话框。      图5-16 “数据库用户-新建”对话框  下面是对图5-
16中相关选项的说明:   ? 用户名(U):于此处输入数据库用户名,可以跟与之相对应的登录名称不一样,但建议相同。如果正在编辑现
有用户,则不能更改此选项。   ? 登录名(L):此处输入要映射到数据库中的登录名,也可单击右边的按钮来选择登录名。如果正在编辑现
有用户,也不能更改此选项。   ? 默认架构(D):在此处显式输入新建数据库用户的默认架构,如果不输入,则架构默认为“dbo”。注
意,在创建映射到Windows 组登录的数据库用户时,不能指定其默认架构,如果创建的是映射到Windows帐户登录的数据库用户,则
可以指定其默认架构。  ? 此用户拥有的架构(O):此处勾选该数据库用户所拥有的架构,用户拥有某个架构则对该架构中的对象具有完全控
制权限,架构可以被数据库用户或数据库角色所拥有,一个架构只可以被一个数据库用户或数据库角色拥有,不可以同时被多个数据库用户或角色拥
有。   ? 数据库角色成员身份(M):若要将新建的数据库用户加入数据库角色中,可在此处勾选相应的数据库角色。   设置完毕“常规
”选项之后,单击“安全对象”切换到图5-17所示的页面。     图5-17 “安全对象”选项  下面是对图5-17中相关选项的
说明:   ? 安全对象(S):查看或设置该用户对数据库安全对象的权限。单击“添加”可以将项添加到此处网格中,然后在此处网格中选中
一项,在下部的“显式权限”网格中为其设置适当的权限。   ? 有效权限(E):单击“有效权限”按钮会显示将显式权限以及通过组或角色
成员身份应用的权限相组合的结果。此选项在编辑用户时有效,如果是新建用户,将无法为其显示有效权限。  ? 添加(A):单击“添加”按
钮将打开一个对话框,选择要向上部网格中添加的数据库安全对象或主体。   ? 删除(R):单击“删除”按钮从上部网格中删除所选项。
  ? 显式权限(P):“显式权限”网格列出了上部网格中所选安全对象的可能权限。选中或清除“授予”(或“允许”)、“具有授予权限”
和“拒绝”复选框可以对这些权限进行配置。   授予:选中此项可以将此权限授予该登录名,取消选中此项将撤消此权限。   具有授予权
限:反映所列权限的WITH GRANT选项的状态。此框是只读的。若要应用此权限,则使用GRANT(T-SQL)语句。   拒绝:选
中此项可以拒绝将此权限授予该登录名。取消选中此项将撤消此权限。   在图5-17所示的“安全对象”选项中,单击“添加”按钮,打开图
5-18所示的对话框。  图5-18 添加安全对象  下面是对图5-18中相关选项的说明:   ? 特定对象(O)…:选中此项再
单击“确定”按钮,可以精确地选择某一类安全对象的唯一实体,例如可以将选择对象设置为“表”,然后只选择其中的一个表(也可多选),以将
其添加到图5-17的上部网格中。   ? 特定类型的所有对象(T)…:选中此项再单击“确定”按钮,可以将某一类安全对象的所有实体添
加到图5-17的上部网格中。例如选择“表”,则可以将该数据库中的所有表添加到上部网格中。  ? 属于该架构的所有对象(S)…:选中
此项,然后在“架构名称(N)”下拉列表框中选择合适的架构,可以将此架构的所有对象添加到图5-17的上部网格中。   在图5-18中
,选中“特定类型的所有对象(T)…”,单击“确定”按钮,弹出图5-19所示的对话框。     图5-19 “选择对象类型”对话框
  在5-19所示的对话框中,勾选“数据库”和“表”,然后单击“确定”按钮,此时图5-17将显示为图5-20所示的内容。可以重复“
添加”过程以添加多个安全对象到上部网格中。   根据图5-17的说明为此数据库用户设置合适的权限,最后单击“确定”按钮完成对新数据
库用户的创建。   定位至节点“<数据库实例名称>”|“数据库”|“<数据库名称>”|“安全”|“用户”,可以查看到刚才创建好的新
用户(必要时按下【F5】键以刷新)。     图5-20 为用户设置安全对象的权限  若要编辑该新建数据库用户,则右击该用户,选
择“属性”。弹出的对话框与前述创建该用户时的对话框相同,可按前述操作进行设置,然后单击“确定”保存修改。   这种创建用户的方式可
以对新建用户的权限进行非常精确的控制,可以对其进行许多小粒度权限的授予。也可以简化步骤,例如只需要在图5-16中完成用户名和登录名
的输入,然后单击“确定”按钮就可以快速完成创建一个数据库用户的过程,以后可以通过编辑的方式(或通过T-SQL语句)再为其设置适当的
安全权限。  2.通过运行相关的T-SQL语句来创建数据库用户   可以使用“CREATE USER”T-SQL语句来创建数据库用
户,其简单语法如下:   CREATE USER user_name   [ { { FOR | FROM } { LOGIN l
ogin_name }}] | [WITHOUT LOGIN]   [ WITH DEFAULT_SCHEMA = schema_
name ]  对其语法简要说明如下:   ? ?user_name:指定在此数据库中新创建的用户的名称,长度最多是128个字符。
  ? LOGIN login_name:指定要创建数据库用户的登录名。login_name 必须是服务器中有效的登录名。当此登
录名进入数据库时,它将获取正在创建的数据库用户的名称和ID,然后以此身份访问数据库。   ? WITHOUT LOGIN:指定不应
将用户映射到现有登录名,该新创建的用户可以作为guest连接到数据库,前提是该数据库中的guest用户已经启用。  ? FOR|F
ROM:这两个关键字的意思是一样的,运行时二者只可选择其一,如果忽略 FOR(或FROM)LOGIN,则新的数据库用户将被映射到同
名的登录名。   ? ?WITH DEFAULT_SCHEMA = schema_name:为新创建的用户指定默认架构,当服务器为
此数据库用户解析对象名时将首先使用此架构。  下面通过举例说明。   代码清单5-4的T-SQL语句在数据库“WxdStudent
”中创建数据库用户“WestSVR\SQLServerUsers”,由于省略了“FOR LOGIN”,因此该新建的用户默认映射至与
其名称相同的Windows登录“WestSVR\SQLServerUsers”。注意,如果用户名称与Windows登录名相同,需要
将其放在一对“[]”中。在通过T-SQL语句创建映射到Windows组登录的数据库用户时,仍然不能使用“WITH DEFAULT_
SCHEMA”指定其默认架构,如果创建的是映射到Windows帐户登录的数据库用户,则可以使用“WITH DEFAULT_SCHE
MA”指定其默认架构。   代码清单5-5的T-SQL语句在数据库“WxdStudent”中创建数据库用户“sb”,该用户
映射至SQL Server登录“sb”,并为其指定默认架构为“sb”。   读者可于此处完成本章上机实验五的内容,以加深对
创建及使用数据库用户的认识体会。5.4.3 对数据库用户授权   通过本章上机实验五的上机练习,读者可以体会到尽管已为登录(例如
“sb”)在数据库中(该实验中为“WxdStudent”)创建了相应的数据库用户,该登录可以连接至数据库,但能执行的操作非常有限(
该实验中连执行简单的查询“SELECT”语句都不能实现)。这是因为要想在数据库中执行某些操作,必须首先获得这些操作的权限。   在
能够自如地对数据库用户进行授权之前,必须要先了解数据库权限的种类。  如果要进行细分,数据库中安全对象主体的权限非常多。尽管如此,
对于初学者而言,还是有必要了解一些常见的数据库权限。   常见的数据库权限可以分为对数据库的权限、对表的权限、对视图的权限、对存储
过程的权限等。 表5-2列出了数据库的一些基本权限。   表5-3列出了表的一些基本权限。  表5-2 数据库的
基本权限  表5-3 表的基本权限  以上只列出一些常见的权限,其他权限可参阅SQL Server联机文档。   数据库管理员可
以通过多种方式来对数据库用户授予适当的权限,下面分别予以介绍。   1.通过固定服务器角色授权   严格来说,这不能算作是对数据库
用户授权的范畴,但是它或多或少也包含对数据库用户的授权。通过前面的介绍(5.2.1节)我们知道,固定服务器角色的成员拥有在数据库实
例级范围之内的权限。如果需要委派某些用户执行数据库实例级的任务(例如创建数据库、备份数据库等),最好的方式就是将这些用户的登录加入
到相应的固定服务器角色之中。  固定服务器角色的成员若要访问该数据库实例中的数据库,仍然需要在该数据库中拥有与其登录相对应的数据库
用户。这一点只有固定服务器角色“sysadmin”中的成员例外,该角色中的成员拥有在数据库实例级范围内的任何权限(包括对其中的数据
库执行任何操作)。   有关固定服务器角色的详细介绍,请参见本章5.2.1节内容。  2.通过数据库角色授权   对数据库用户授权
的最方便也是最容易管理的方式就是将该用户加入到合适的数据库角色中,加入到数据库角色中的用户将拥有该角色所拥有的全部权限(这与在Wi
ndows系统中将用户加入到组中然后只向组授权的目的是一样的)。这也是对数据库用户授权的推荐做法。   可以将数据库用户加入已经在
每一个数据库中存在的固定数据库角色(这些角色已经预先定义好了其所拥有的权限),也可以创建具有合适权限的自定义数据库角色,然后将相应
的数据库用户加入其中。  1) 将用户加入固定数据库角色   每个数据库中都有9个预定义的固定数据库角色。不同的固定数据库角色均预
先定义了不同级别的权限。针对数据库用户所需要的权限,可以选择一个与其所需权限接近的固定数据库角色,然后加入其中。例如,如果只需要用
户“sb”能读取数据库中的表,则将该用户加入到“db_datareader”固定数据库角色就可以了。   可通过打开图5-5所示的
“数据库角色属性”对话框,然后将相应的数据库用户加入,也可通过打开图5-16所示的“数据库用户-新建”对话框,然后勾选合适的数据库
角色的方式来加入。具体请参见前述说明,此处不再赘述。  2) 将用户加入自定义数据库角色   如果所有的固定数据库角色所拥有的权限
都不太符合管理员对用户授权的需要(例如,要将某些用户加入某数据库角色,并且只允许这些用户访问某些表中的某些列),那么此时管理员可以
手动创建自定义数据库角色,然后为该角色授予合适的权限,并将相应的用户加入到该数据库角色中。  (1) 通过SQL Server管理
控制台创建自定义数据库角色,可按以下步骤进行(假设在数据库“WxdStudent”中创建一个名为“Class_FullContro
l”的自定义数据库角色,该角色只拥有对表“Class”的完全控制权限):   通过SQL Server管理控制台连接到数据库实例,
在对象资源管理器中展开节点“<数据库实例名称>”|“数据库”|“<数据库名称>”|“角色”,右击节点“数据库角色”,选择“新建数据
库角色(N)...”,弹出图5-21所示的新建数据库角色的“常规”选项对话框。     图5-21 新建数据库角色的“常规”选项
  下面是对图5-21中相关选项的说明:   “角色名称(N)”:于此处输入自定义数据库角色的名称。   “所有者(O)”:于此处
输入该数据库角色的所有者,所有者对此数据库角色有完全控制权限。也可以通过右边的按钮来选择合适的所有者,所有者可以是数据库用户,也可
以是数据库角色。如果不指定,则默认所有者为创建该角色的数据库用户。   “此角色拥有的架构(S)”:于此处勾选该自定义数据库角色所
拥有的架构。注意,该角色拥有某架构,意味着该角色对此架构中的所有对象有完全控制权限。  “此角色的成员(M)”:于此处指定该角色中
包含的成员(可以是数据库用户,也可以是其他数据库角色),可通过下部的“添加”和“删除”按钮来操作。本例中将数据库用户“sb”和“s
c”加入此新建的数据库角色。   设置好“常规”选项之后,在图5-21中单击“安全对象”进入对该数据库角色设置其所拥有的安全权限对
话框。该对话框与图5-17所示的新建数据库用户的“安全对象”对话框是完全一样的,具体操作设置也一样,此处不再赘述。对于本例,按前述
要求操作,然后在图5-20所示对话框的上部网格中选中表“Class”,然后在下部网格中勾选“control”的授予权限复选项框。 
 设置完毕,单击“确定”按钮以完成该自定义数据库角色的创建。   在“对象资源管理器”中定位至节点“<数据库实例名称>”|“数据库
”|“<数据库名称>”|“安全”|“角色”|“数据库角色”,可以查看到刚才创建好的自定义数据库角色(必要时按下【F5】键以刷新)。
  若要编辑该自定义数据库角色,则右击该角色,选择“属性”。弹出的对话框与前述创建该角色时的对话框相同,可按前述操作进行设置,然
后单击“确定”保存修改。  (2) 通过运行T-SQL语句创建自定义数据库角色   创建自定义数据库角色的T-SQL语法为   C
REATE ROLE role_name [ AUTHORIZATION owner_name ]   对其语法简要说明如下:  
 ? ?role_name:指定在此数据库中新创建的数据库角色名称,长度最多是128个字符,相当于图5-21中的“角色名称(N)”
。   ? ?AUTHORIZATION owner_name:将拥有新角色的数据库用户或角色。相当于图5-21中的“所有者(O)
”。   下列语句创建一个名为“Class_FullControl”的数据库角色,并指定“dbo”数据库用户为其所有者:   CR
EATE ROLE Class_FullControl AUTHORIZATION dbo   如果要使用T-SQL语句将数据库用
户加入数据库角色中,则需要使用系统存储过程“sp_addrolemember”。其语法为   sp_addrolemember [
@rolename = ] ''role'',   [ @membername = ] ''security_account''   下
列语句将数据库用户“sb”加入到数据库角色“Class_FullControl”之中:   EXEC sp_addrolememb
er ''Class_FullControl'',''sb''   如果要使用T-SQL语句为创建的数据库角色进行授权操作,需要用到“GR
ANT”、“REVOKE”、“DENY”语句。  3.使用T-SQL语句授权   可以直接运行T-SQL语句来对数据库用户或数据库
角色进行授权操作。这些语句运行的目的其实与图5-20所示的操作一样,都是为数据库主体设置权限,只不过图5-20的操作是通过SQL
Server管理控制台的图形用户界面实现的。   使用T-SQL语句授权需要用到三个语句,分别是GRANT、REVOKE、DENY
。下面分别予以讲解。  1) ?GRANT(授予)   “GRANT”是将安全对象的权限授予数据库用户或数据库角色,相当于图5-2
0下部网格中勾选“授予”列的操作。   其授予数据库级权限的简单语法为   GRANT <权限> TO <数据库角色或用户名称>
  其授予表级权限的简单语法为   GRANT <权限> ON OBJECT::<表> TO <数据库角色或用户名称>   下列语
句将“CREATE TABLE”权限授予数据库用户“sb”:   GRANT CREATE TABLE TO sb   若要将该权
限授予数据库角色,只需要用数据库角色名称替换上述代码中的“sb”即可。   下列语句将对表“Student”的“SELECT”权限
授予数据库角色“Class_FullControl”:   GRANT SELECT ON OBJECT:: Student TO
Class_FullControl  2) ?DENY(拒绝)   “DENY”是拒绝数据库用户或数据库角色拥有某安全对象的权限
,相当于图5-20下部网格中勾选“拒绝”列的操作。   其拒绝数据库级权限的简单语法为   DENY <权限> TO <数据库角色
或用户名称>   其拒绝表级权限的简单语法为   DENY <权限> ON OBJECT::<表> TO <数据库角色或用户名称>
  下列语句拒绝数据库用户“sb”拥有“CREATE TABLE”权限:  DENY CREATE TABLE TO sb   
若要将该权限对数据库角色进行拒绝操作,只需要用数据库角色名称替换上述代码中的“sb”即可。   下列语句将对表“Student”的
“SELECT”权限拒绝授予数据库角色“Class_FullControl”:   DENY SELECT ON OBJECT::
Student TO Class_FullControl  注意,拒绝某安全对象的权限和授予某安全对象的权限如果同时作用于某数据
库角色或用户,则拒绝权限优先。例如,数据库用户“sb”被授予了对表“Student”的“SELECT”权限,数据库用户“sb”是数
据库角色“Class_FullControl”中的成员,而数据库角色“Class_FullControl”被拒绝了对表“Stude
nt”的“SELECT”权限,则数据库用户“sb”仍被拒绝了对表“Student”的“SELECT”权限,即数据库用户“sb”不能
查阅浏览表“Student”的数据。  3) ?REVOKE(吊销)   “REVOKE”是将先前对数据库用户或角色进行授予和拒绝
的安全对象权限吊销的操作。相当于在图5-20下部网格中对“授予”列和“拒绝”列的复选框进行清除的操作。   其吊销数据库级权限的简
单语法为   REVOKE <权限> FROM <数据库角色或用户名称>   其吊销表级权限的简单语法为   REVOKE <权限
> ON OBJECT::<表> FROM <数据库角色或用户名称>   下列语句将授予给数据库用户“sb”的“CREATE TA
BLE”权限吊销:   REVOKE CREATE TABLE FROM sb   若要用该权限对数据库角色进行吊销,只需要用数据
库角色名称替换上述代码中的   “sb”即可。  下列语句将授予给数据库角色“Class_FullControl”的表“Stude
nt”的“SELECT”权限吊销:   REVOKE SELECT ON OBJECT:: Student FROM Class_
FullControl   读者可于此处完成本章上机实验六的内容,以加深对数据库角色和用户授权的认识体会。5.4.4 用户与架构
分离   在本章前面的内容中,我们在设置安全对象(数据库用户、角色等)的属性时已经见到不少有关架构的设置。本节主要对架构作一简单介
绍。   在SQL Server 2005数据库中,每个对象都属于一个数据库架构。数据库架构是一个独立于数据库用户的非重复命名空间
。可以在数据库中创建和更改架构,并且可以授予用户访问架构的权限。任何用户都可以拥有架构,并且架构所有权可以转移。  在SQL Se
rver 的早期版本中,数据库用户和架构在概念上是同一对象。从SQL Server 2005开始,用户和架构便区分开来,架构用作对
象的容器。   下面举一个简单的例子说明。   假设数据库用户“sc”的默认架构为“sc”(可以打开该用户的属性对话框查阅到),该
用户登录到数据库服务器“WestSVR”的默认实例,并打开一个查询窗口运行下面的T-SQL语句:   USE WxdStudent
  GO   SELECT FROM Student  在上述查询语句中,因为数据库用户的默认架构为“sc”,所以事实上“S
ELECT”语句首先搜寻的是架构“sc”中的表“[sc].[Student]”,如果数据库中存在该表“[sc].[Student]
”,则返回的结果是表“[sc].[Student]”的所有行。但是如果在数据库中不存在该表,则“SELECT”语句会继续搜寻架构“
dbo”中的表“[dbo].[Student]”;如果存在该表“[dbo].[Student]”,则返回的结果是表“[dbo].[
Student]”的所有行;如果连表“[dbo].[Student]”也不存在,则会返回一个无效表的错误。  在以前版本的SQL
Server数据库中,用户与架构不可分离。仍以上面例子为例,数据库用户“sc”所拥有的架构就是“sc”,该用户创建的对象(例如表)
默认情况下均为类似“[sc].[Table1]”、“[sc].[Table2]”等等这样的名字。假设该用户离开了,其他用户难以取得
这些表的控制权,只能保留数据库用户名“sc”,造成数据库管理的混乱,所以以前版本的SQL Server均建议尽量将数据库对象创建在
统一的架构“dbo”之下以方便管理。这就是为什么在上面例子中,在不存在表“[sc].[Student]”的情况下之所以还要继续搜寻
架构“dbo”中的表“[dbo].[Student]”的原因,主要就是为了与以前版本的SQL Server数据库兼容。  在SQL
Server 2005中,采用用户与架构分离的方式很好地解决了以前版本的上述问题。假设用户“sc”离开了,则其他用户只需要取得架
构“sc”的所有权就可以了,取得架构“sc”的用户可以完全控制该架构下的所有对象,然后可以将数据库用户“sc”删除。   创建架构
的方法比较简单,仍然可以通过SQL Server管理控制台或运行相应的T-SQL语句来实现。  1.通过SQL Server管理控
制台创建架构   (1) 打开SQL Server管理控制台,连接到数据库实例,在对象资源管理器中展开节点“<数据库实例名称>”|
“数据库”|“<数据库名称>”|“安全性”,单击节点“架构”,在右方的对象资源管理器详细信息窗口中可以查阅已经存在的架构,如图5-
22所示。   (2) 右击节点“架构”,选择“新建架构(N)...”,弹出图5-23所示的“架构-新建”对话框。  图5-22
查阅已存在的架构     图5-23 “架构-新建”对话框  以下为对图5-23所示选项的说明:   ? 架构名称(S):此处
输入要创建的架构名称,建议与架构所有者的名称相同。   ? 架构所有者(C):此处输入架构所有者,可单击右方按钮来选择架构所有者。
所有者对该架构中的所有对象有完全控制权限。注意,一个架构只能由一个主体所拥有。   (3) 单击“权限”,进入图5-24所示的页面
。此页面可设置数据库用户或角色对该新建架构拥有怎样的权限。     图5-24 授予用户或角色对此架构的权限  以下为对图5-2
4所示选项的说明:   ? 用户或角色(U):如果要将此架构的安全权限授予数据库用户或角色,可将这些数据库用户或角色通过“添加”按
钮添加于此处,然后在下部网格中进行权限设置。   ? sb的显示权限(P):在上部网格中选中某数据库用户或角色,然后在此处对其进行
权限设置。此处的权限是指该用户或角色对此架构拥有的权限。   (4) 单击“确定”按钮完成新架构的创建。  2.通过运行T-SQL
语句创建架构   创建架构的T-SQL简要语法为   CREATE SCHEMA schema_name AUTHORIZATIO
N owner_name   ? ?schema_name:在数据库内标识架构的名称,对应图5-23中的“架构名称(S)”选项。
  ? AUTHORIZATION owner_name:指定将拥有架构的数据库级主体(例如用户或角色)的名称。此主体还可以拥有其
他架构,并且可以不使用当前架构作为其默认架构,对应图5-23的“架构名称(S)”选项。注意,一个架构只能由一个主体所拥有。  代码
清单5-6所示的T-SQL语句在数据库“WxdStudent”中创建一个名为“sc”的架构,并指定此架构的所有者为数据库用户“sc
”:     若要将此新建架构的权限授予数据库用户或角色(即与图5-24相对应),需要使用相应的“GRANT”、“DENY”、“R
EVOKE”语句。   下列语句将架构“sc”的“SELECT”权限授予数据库用户“sc”:   GRANT SELECT ON
SCHEMA::sc TO sc   下列语句将架构“sc”的“SELECT”权限拒绝授予数据库用户“sc”:   DENY SE
LECT ON SCHEMA::sc TO sc  下列语句将数据库用户“sc”对架构“sc”的“SELECT”权限(不管是已拒绝
的还是已授予的)进行吊销:   REVOKE SELECT ON SCHEMA::sc TO sc   读者可于此处完成本章上机实
验七的内容,以加深对架构的认识体会。     1.实验一:设置SQL Server 2005实例的身份验证模式   1) 实验
要求   本实验有以下要求:   分别将数据库服务器“WestSVR”默认实例的身份验证模式配置“Windows身份验证”和“混合
验证模式”,并以登录名“sa”进行连接。5.5 上 机 实 验  2) 实验目的   掌握如何设置SQL Server 2005
身份验证模式,体会在不同模式的身份验证下可能会遇到的问题。   3) 实验步骤   (1) 以数据库服务器WestSVR管理员(此
管理员为Windows Server 2003操作系统的管理员)的身份登录该服务器。打开SQL Server配置管理器,单击左方的
树形图节点“SQL Server 2005服务”,右方的详细窗格中列出该服务器的所有数据库服务。确保数据库默认实例引擎已启动。  
(2) 打开“SQL Server Management Studio”,并连接到此数据库默认实例。在对象资源管器窗口中右击默认实
例名称“ ”,选择“属性”,在弹出的“服务器属性”对话框中单击“安全性”,然后在右方的“服务器身份验证”栏中单击“Window
s身份验证模式(W)”以启用Windows身份验证(如果该实例已经处于该验证模式,则此步骤略)。按要求重新启动此默认实例。  (3
) 在对象资源管理器的默认实例下,依次展开节点“安全性”|“登录名”,注意登录名“sa”的图标“ ”中的向下箭头,此箭头表明该登
录名尚未启用,默认情况下,SQL Server 2005实例中的登录名“sa”并未被启用。右击该登录名,选择“属性”,在“登录属性
-sa”对话框中,单击“常规”,在右方的“密码(P)”和“确认密码(C)”文本框中均输入密码“password”。  (4) 单击
“状态”,在右方的登录选项中单击“启用”以启用该登录名(如果该登录名已处于启用状态,则此步骤略)。单击“确定”按钮。在对象资源管理
器中右击“登录名”,选择“刷新”,注意此时登录名“sa”图标的变化。  (5) 单击对象资源管理器窗口中的图标“ ”以断开与默认
实例的连接,再单击“连接(O)”|“数据库引擎(D)...”弹出“连接到服务器”对话框,在“服务器名称(S)”栏中选择“WestS
VR”,在“身份验证(A)”栏中选择“SQL Server身份验证”,在“登录名(L)”和“密码(P)”栏内分别输入“sa”和“p
assword”。单击“确定”按钮,将弹出连接错误的消息提示框。  (6) 单击“确定”按钮关闭该消息提示框,然后在“身份验证(A
)”栏中选择“Windows身份验证”并单击“确定”按钮重新连接到数据库默认实例“WestSVR”。重复本实验的第(2)步骤,但此
次在“服务器身份验证”栏中单击“SQL Server和Windows身份验证模式(S)”以启用混合验证模式。   (7) 再次重复
本实验第(5)步骤,可以看到此次“sa”将成功地以“SQL Server身份验证”的方式连接到数据库默认实例“WestSVR”。
  2.实验二:创建并使用Windows登录名   1) 实验要求   本实验有以下要求:   (1) 分别采用SQL Serve
r管理控制台和T-SQL语句创建Windows登录名。   (2) 以相应的Windows帐户登录计算机,然后以可信任连接的方式连
接至SQL Server 2005数据库实例引擎。  2) 实验目的   掌握创建Windows登录名的方法,体会信任连接至数据库
实例的过程。   3) 实验步骤   (1) 以数据库服务器WestSVR管理员(此管理员为Windows Server 2003
操作系统的管理员)的身份登录该服务器。单击“开始”|“控制面板”|“管理工具”,双击“计算机管理”,展开节点“计算机管理(本地)”
|“系统工具”|“本地用户和组”,右击节点“用户”,选择“新用户(N)...”。按照这种方式创建三个用户帐户,帐户名分别为“LiM
ei”、“LiuTao”、“SongQing”,密码均为“password”,创建时清除“用户下次登录时须更改密码(M)”复选项框
。  (2) 右击节点“组”,选择“新建组(N)...”。按照这种方式创建两个组,组名分别为“SQLServerUsers”、“S
QLServerAdmins”。将用户帐户“LiuTao”加入“SQLServerUsers”,用户帐户“SongQing”加入“
SQLServerAdmins”。以上创建用户和组的过程均比较简单,详情不在此赘述。   (3) 打开SQL Server配置管理
器,单击左方的树形图节点“SQL Server 2005服务”,右方的详细窗格中列出该服务器的所有数据库服务。确保数据库默认实例引
擎已启动。  (4) 打开“SQL Server Management Studio”,并连接到此数据库默认实例。单击“新建查询(
N)”打开一个新的查询窗口。在此查询窗口中输入代码清单5-7的T-SQL代码,然后运行这些代码,以分别为用户帐户“LiMei”和组
“SQLServerUsers”创建相应的登录名。注意,没有为这两个登录指定默认数据库,因此其默认数据库为系统数据库“Master
”。   (5) 在对象资源管理器中展开节点“安全性”|“登录名”,在右边的“对象资源管理器详细信息”中可以看到刚才创建好的两个登
录名(必要时按下【F5】键以刷新)。右击登录名“WestSVR\LiMei”,选择“属性”。仔细查看该登录名的属性,不要作任何改动
。按同样方式查看登录名“WestSVR\ SQLServerUsers”的属性,同样不要作任何改动。   (6) 在对象资源管理器
中右击节点“登录名”,选择“新建登录名(N)...”打开新建登录名对话框,如图5-7所示。确认已选中单选按钮“Windows身份验
证(W)”,单击按钮“搜索(E)...”定位到组“SQLServerAdmins”,或者直接在“登录名(N)”文本框中输入“Wes
tSVR\SQLServerAdmins”。  (7) 在对象资源管理器的左方树形图中单击节点“服务器角色”,然后在右方勾选“sy
sadmin”,以将登录名“WestSVR\SQLServerAdmins”加入此固定服务器角色。单击“确定”按钮完成此登录名的创
建。可按第(5)步骤描述查看登录名“WestSVR\SQLServerAdmins”的属性,同样不要作任何改动。   (8) 关闭
SQL Server管理控制台,关闭SQL Server配置管理器(注意不要停止数据库默认实例的运行)。单击“开始”|“注销”,然
后单击“确定”按钮。   (9) 注销完毕出现新的“登录到Windows”窗口(若有必要可依提示同时按下Ctrl+Alt+Del键
),在“用户名(U)”文本框中输入“LiMei”,“密码(P)”文本框中输入“password”,单击“确定”以LiMei的身份登
录到数据库服务器WestSVR。  (10) 单击“开始”|“所有程序”|“Microsoft SQL Server 2005”|
“SQL Server Management Studio”以打开SQL Server管理控制台。在“连接到服务器”对话框中,选择
“服务器类型(T)”为“数据库引擎”,“服务器名称(S)”为“WestSVR”,“身份验证(A)”为“Windows身份验证”。注
意下部灰色显示的用户名为“WestSVR\LiMei”,表明此时是以该用户的身份登录至默认数据库实例。单击“连接”按钮,此时用户L
iMei可以成功地连接到数据库默认实例。  (11) 单击“新建查询(N)”,在新查询窗口输入下述语句:   USE WxdStu
dent   GO   然后运行,此时下部消息提示框中有什么消息提示?可以访问该数据库吗?关闭SQL Server管理控制台,单
击“开始”|“注销”,然后单击“确定”按钮。  (12) 重复第(9)~(11)步骤,但此时在“用户名(U)”文本框中输入“Liu
Tao”,因本次以用户帐户LiuTao的身份登录至数据库服务器WestSVR。在数据库默认实例中并没有与用户LiuTao直接形成映
射关系的登录名,为什么LiuTao仍然可以成功登录?重复第(11)步骤时,结果是否与LiMei的相同?   (13) 重复第(9)
~(11)步骤,但此时在“用户名(U)”文本框中输入“SongQing”,因本次以用户帐户SongQing的身份登录至数据库服务器
WestSVR。重复第(11)步骤时,结果是否与LiMei的相同?为什么?  3.实验三:创建并使用SQL Server登录名  
 1) 实验要求   本实验有以下要求:   (1) 分别采用SQL Server管理控制台和T-SQL语句创建SQL Serve
r登录名。   (2) 通过新创建的SQL Server登录名连接至数据库实例。   (3) 如果在数据库服务器WestSVR的默
认实例中已存在登录名“sb”、“sc”时应先将其删除。  2) 实验目的   掌握创建SQL Server登录名的方法以及如何通过
SQL Server登录名连接至数据库实例。   3) 实验步骤   (1) 以数据库服务器WestSVR管理员(此管理员为Win
dows Server 2003操作系统的管理员)的身份登录该服务器。   (2) 打开SQL Server配置管理器,单击左方的
树形图节点“SQL Server 2005服务”,右方的详细窗格中列出该服务器的所有数据库服务。确保数据库默认实例引擎已启动。  
(3) 打开“SQL Server Management Studio”,并连接到此数据库默认实例。单击“新建查询(N)”打开一个
新的查询窗口。在此查询窗口中输入代码清单5-8的T-SQL代码,然后运行以创建SQL Server登录“sb”。注意,没有为该登录
指定默认数据库,因此其默认数据库为系统数据库“Master”。  (4) 在对象资源管理器中展开节点“安全”,右击节点“登录名”,
选择“新建登录名(N)...”打开新建登录名对话框,如图5-8所示。在“常规”选项中,确认已选中单选按钮“SQL Server身份
验证(S)”,在“登录名(N)”文本框中输入SQL Server登录名的名称“sc”,在“密码(P)”和“确认密码(C)”文本框中
输入该登录名的密码为“password”。清除“强制实施密码策略(F)”复选框。   (5) 保持其他选项不变,单击“确定”按钮,
完成对SQL Server登录“sc”的创建。   (6) 在对象资源管理器中,确认选中节点“安全性”|“登录名”,在右方的“对象
资源管理器详细信息”中可以看到刚才创建好的两个登录名“sb”、“sc”(必要时按下【F5】键以刷新)。右击登录名“sb”,选择“属
性”。仔细查看该登录名属性,不要作任何改动。以同样方式查看登录名“sc”的属性,同样不要作任何改动。   (7) 在对象资源管理器
的上部单击“连接(O)”|“数据库引擎(D)...”,在弹出的“连接到服务器”对话框中,选择“服务器名称(S)”为“WestSVR
”,“身份验证(A)”为“SQL Server身份验证”。在“登录名(L)”文本框中输入“sb”,“密码(P)”文本框中输入“pa
ssword”。  (8) 单击“连接”按钮,将成功地连接到数据库服务器“WestSVR”的默认实例引擎。注意,此连接将显示在对象
资源管理器的下部,此连接的身份为“sb”,而上部连接的身份为数据库管理员“BUILTIN\administrator”。   (9
) 确认刚才在对象资源管理器中以“sb”身份新建立的连接被选中,单击“新建查询(N)”,在新查询窗口输入下述语句:   USE W
xdStudent   GO   然后运行(注意此时该窗口中所有的T-SQL语句都是以“sb”的身份运行的),此时下部消息提示框中
有什么消息提示?可以访问该数据库吗?   (10) 重复第(7)~(9)步骤,但此次以登录“sc”的身份进行连接。登录“sc”的情
况与登录“sb”的情况是否是一样的?   (11) 不用保存任何设置,关闭“SQL Server Management Studi
o”。  4.实验四:使用数据库用户guest   1) 实验要求   本实验有以下要求:   (1) 首先完成实验二和实验三的内
容。   (2) 启用guest数据库用户,并以guest身份访问数据库 。   2) 实验目的   认识guest数据库用户的作
用。   3) 实验步骤   (1) 以数据库服务器WestSVR管理员(此管理员为Windows Server 2003操作系统
的管理员)的身份登录该服务器。   (2) 打开SQL Server配置管理器,单击左方的树形图节点“SQL Server 200
5服务”,右方的详细窗格中列出该服务器的所有数据库服务。确保数据库默认实例引擎已启动。  (3) 打开“SQL Server Ma
nagement Studio”,并连接到此数据库默认实例。单击“新建查询(N)”打开一个新的查询窗口。在此查询窗口中输入下述代码
并运行:   USE WxdStudent   GO   GRANT CONNECT TO guest   (4) 重复实验三的第
(7)~(9)步骤。此时登录“sb”可以成功地运行代码“USE WxdStudent”,注意此时登录“sb”是以guest的身份连
接至数据库“WxdStudent”的。   (5) 重复实验二的第(8)~(11)步骤。此时登录“WestSVR\LiMei”也可
以成功地运行代码“USE WxdStudent”,注意此时登录“WestSVR\LiMei”也是以guest的身份连接至数据库“W
xdStudent”的。   (6) 重复本实验第(1)~(3)步骤,但在查询窗口中改为输入下述代码并运行:   USE WxdS
tudent   GO   DENY CONNECT TO guest   上述代码使guest用户重新处于未启用状态。  (7)
重复本实验第(4)、(5)步骤,证实登录“sb”和“WestSVR\LiMei”将再不能连接至数据库“WxdStudent”。 
 5.实验五:创建数据库用户帐户   1) 实验要求   本实验有以下要求:   (1) 首先完成实验二和实验三的内容。   (2
) 在数据库中为登录创建相应的数据库用户,分别采用SQL Server管理控制台和运行T-SQL语句的方式。   (3) 如果数据
库“WxdStudent”中已存在数据库用户“sb”、“sc”、“WestSVR\SQLServerUsers”、“WestSVR
\LiMei”,则先将其删除。  2) 实验目的   掌握数据库用户的作用及创建数据库用户的方式。   3) 实验步骤   (1)
以数据库服务器WestSVR管理员(此管理员为Windows Server 2003操作系统的管理员)的身份登录该服务器。   
(2) 打开SQL Server配置管理器,单击左方的树形图节点“SQL Server 2005服务”,右方的详细窗格中列出该服务
器的所有数据库服务。确保数据库默认实例引擎已启动。  (3) 通过SQL Server管理控制台连接到数据库WestSVR默认实例
,在对象资源管理器中展开节点“WestSVR”|“数据库”|“WxdStudent”|“安全性”,单击节点“用户”,在“对象资源管
理器详细信息”中查看guest用户,确保其为未启用状态。   (4) 右击节点“用户”,选择“新建用户(N)...”,弹出类似图5
-16所示的新建数据库用户对话框。在“用户名(U)”和“登录名(L)”文本框中均输入“sb”,不用设置其他选项,单击“确定”按钮创
建数据库用户“sb”。  (5) 刷新节点“用户”,在“对象资源管理器详细信息”中右击用户“sb”,选择“属性(R)”,在数据库用
户属性页面中,单击“安全对象”|“添加”|“特定类型对象的所有对象(T)...”,勾选“数据库”,单击“确定”按钮,回到类似图5-
16所示对话框,单击“有效权限(E)...”,可查阅到此时数据库用户“sb”对数据库“WxdStudent”的有效权限仅为可以“C
ONNECT(连接)”到该数据库,如图5-25所示。  图5-25 用户“sb”对数据库“WxdStudent”的有效权限  (
6) 单击“新建查询(N)”打开一个新的查询窗口。在此查询窗口中输入代码清单5-9的T-SQL代码,然后运行以创建数据库用户“sc
”,该用户映射至登录名“sc”。    (7) 再次单击“新建查询(N)”以重新打开一个新的查询窗口。在此查询窗口中输入代码清单5
-10的T-SQL代码,然后运行以创建数据库用户“WestSVR\SQLServerUsers”和“WestSVR\LiMei”,
分别映射至登录名“WestSVR\SQLServerUsers”和“WestSVR\LiMei”。   (8) 重复实验三的第(7
)~(9)步骤。此时登录“sb”可以成功地运行代码“USE WxdStudent”。在重复第(9)步骤的查询窗口中回车以另起一行,
输入下列语句并运行该语句,运行的结果将是什么?此时登录“sb”是以数据库“WxdStudent”中什么用户的身份来访问该数据库的?
可以读取其中的表吗?   SELECT FROM student  (9) 以登录“sc”的身份重复本实验第(8)步骤,结果与
“sb”是一样的。   (10) 重复实验二的第(8)~(11)步骤。此时登录“WestSVR\LiMei”可以成功地运行代码“U
SE WxdStudent”。在重复第(11)步骤的查询窗口中回车以另起一行,输入下列语句并运行该语句,运行的结果与本实验第(8)
步骤的结果是一样的。注意此时登录“WestSVR\LiMei”是以数据库用户“WestSVR\LiMei”的身份连接至数据库“Wx
dStudent”的。   SELECT FROM student  (11) 以数据库服务器WestSVR中的Windows
帐户“LiuTao”身份重复本实验第(10)步骤,结果与“LiMei”是一样的。   (12) 不用保存任何设置,关闭“SQL S
erver Management Studio”。  6.实验六:对数据库用户和角色授权   1) 实验要求   本实验有以下要求
:   (1) 首先完成实验二、实验三以及实验五的内容。   (2) 在数据库中为数据库用户和角色授权,分别采用SQL Serve
r管理控制台和运行T-SQL语句的方式。  2) 实验目的   体会安全对象的权限种类,掌握对数据库用户和角色进行授权的方式。  
 3) 实验步骤   (1) 以数据库服务器WestSVR管理员(此管理员为Windows Server 2003操作系统的管理员
)的身份登录该服务器。   (2) 打开SQL Server配置管理器,单击左方的树形图节点“SQL Server 2005服务”
,右方的详细窗格中列出该服务器的所有数据库服务。确保数据库默认实例引擎已启动。  (3) 通过SQL Server管理控制台连接到
数据库WestSVR默认实例,在对象资源管理器中展开节点“WestSVR”|“数据库”|“WxdStudent”|“安全性”|“角
色”,单击节点“数据库角色”,在“对象资源管理器详细信息”中查看当前数据库中已存在的数据库角色。  (4) 单击菜单“文件”|“新
建(N)”|“数据库引擎查询”,在弹出的“连接到数据库引擎”对话框中,选择“服务器名称(S)”为“WestSVR”,“身份验证(A
)”为“SQL Server身份验证”。在“登录名(L)”文本框中输入“sb”,“密码(P)”文本框中输入“password”。单
击“确定”按钮,打开一个新的T-SQL查询窗口。在此窗口中所有的T-SQL语句都是以数据库用户“sb”的身份运行的。注意,该查询窗
口下部的状态栏显示了此窗口是以哪个数据库用户的身份连接至数据库的,如图5-26所示。     图5-26 查询窗口用户身份的显示
  (5) 在此查询窗口中输入代码清单5-11的代码并运行,结果显示为“拒绝了对对   象''student'' (数据库“WxdSt
udent”,架构“dbo”)的SELECT权限”。表明此时“sb”对表   “Student”不具备“SELECT”权限。   
(6) 在对象资源管理器中右击节点“数据库角色”,选择“新建数据库角色(N)...”,弹出图5-21所示的新建数据库角色的“常规”
选项对话框。在“角色名称(N)”中输入“Student_Read”,单击“添加”按钮将数据库用户“sb”加入。在左方单击“安全对象
”,单击“添加”按钮,在“添加对象”中选中“特定类型的所有对象(T)...”,单击“确定”,在“选择对象类型”对话框中只勾选“表”
,单击“确定”按钮可得类似图5-20所示的对话框,在上部网格中选中表“Student”,然后在下部网格中只勾选“SELECT”的“
授予”复选框。单击“确定”按钮完成数据库角色“Student_Read”的创建。将窗口切换到“对象资源管理器详细信息”,可查阅刚才
创建好的数据库角色“Student_Read”(必要时按下【F5】键以刷新)。   (7) 再次将窗口转换到数据库用户“sb”的T
-SQL查询窗口(注意,该查询窗口下部的状态栏显示为该用户名称“sb”)并运行刚才输入的代码清单5-11的代码。这次可以成功执行吗
?为什么?  (8) 在对象资源管理器中选中节点“数据库角色”,并将右方的详细信息窗口切换到“对象资源管理器详细信息”,右击数据库
角色“Student_Read”,单击“属性”,在其“常规”选项中,单击“角色成员”中的“sb”,单击“删除”按钮将该用户从数据库
角色“Student_Read”中清除。单击“确定”按钮关闭属性对话框。   (9) 重复第(7)步骤,此次可以成功执行吗?为什么
?。  (10) 在对象资源管理器中,确保数据库“WxdStudent”被选中,单击工具栏“新建查询(N)”打开一个新的查询窗口,
该窗口中的T-SQL代码是以“WestSVR\administrator”数据库管理员的身份运行的(注意下部的状态栏显示了该用户)
。在此窗口中输入代码清单5-12的代码并运行。   (11) 重复第(7)步骤,此次可以成功执行吗?为什么?  7.实验七
:使用数据库架构   1) 实验要求   本实验有以下要求:   (1) 首先完成实验二、实验三以及实验五的内容。   (2) 在
数据库中创建架构,并将此架构的某些权限授予数据库用户或角色。   (3) 如果数据库“WxdStudent”中已存在架构“sc”,
则请先将此架构删除。注意,如果此架构中包含有对象(例如表),必须先将这些对象删除才可以删除该架构。  2) 实验目的   体会架构
的创建,并将架构的权限授予数据库用户或角色。   3) 实验步骤   (1) 以数据库服务器WestSVR管理员(此管理员为Win
dows Server 2003操作系统的管理员)的身份登录该服务器。   (2) 打开SQL Server配置管理器,单击左方的
树形图节点“SQL Server 2005服务”,右方的详细窗格中列出该服务器的所有数据库服务。确保数据库默认实例引擎已启动。  
(3) 通过SQL Server管理控制台连接到数据库WestSVR默认实例,在对象资源管理器中,展开节点“WestSVR”|“数
据库”|“WxdStudent”|“安全性”,单击节点“架构”,然后在“对象资源管理器详细信息”中查看当前数据库中已存在的数据库架
构。   (4) 右击节点“架构”,选择“新建架构(N)...”,弹出图5-23所示的新建架构对话框。在“架构名称(S)”中输入“
sc”,“架构所有者(C)”中输入“dbo”。单击“确定”按钮,完成对架构“sc”的创建。  (5) 单击工具栏“新建查询(N)”
打开一个新的查询窗口(将此窗口标记为第1号窗口。注意,此窗口中的T-SQL代码是以数据库管理员“WestsVR\administrator”的身份运行的,注意下部的状态栏显示,参见图5-26)。在此窗口输入代码清单5-13所示的代码并运行。这段代码在数据库“WxdStudent”中创建一个名为“tbpTemp1”的表,此表位于架构“sc”之内。    (6) 单击菜单“文件”|“新建(N)”|“数据库引擎查询”,在弹出的“连接到数据库引擎”对话框中,选择“服务器名称(S)”为“WestSVR”,“身份验证(A)”为“SQL Server身份验证”。在“登录名(L)”文本框中输入“sc”,“密码(P)”文本框中输入“password”。单击“确定”按钮,打开一个新的T-SQL查询窗口(将此窗口标记为第2号窗口。在此窗口中所有的T-SQL语句都是以数据库用户“sc”的身份运行的)。在此窗口输入代码清单5-14所示的代码并运行。  (7) 当在第2号窗口中运行代码清单5-14所示代码时,结果为   消息229,级别14,状态5,第1 行   拒绝了对对象''tblTemp1'' (数据库''WxdStudent'',架构''sc'')的SELECT 权限。 表明此时用户“sc”不能查阅该架构“sc”中的对象。  (8) 将查询窗口切换到?1?号窗口,在窗口下部回车以另起一行,输入代码清单5-15的代码,然后只运行这段代码(用鼠标将其高亮选中,然后单击“执行(X)”)。     (9) 将查询窗口切换到第2号窗口,再次运行此窗口中的代码。此次可以成功地执行该窗口中的代码。   (10) 在第2号窗口下部回车以另起一行,输入代码清单5-16的代码,然后只运行这段代码(用鼠标将其高亮选中,然后单击“执行(X)”)。     (11) 当在第2号窗口中运行代码清单5-16所示的代码时,结果为   消息3701,级别14,状态20,第1 行   无法对表''tblTemp1''?执行删除,因为它不存在,或者您没有所需的权限。   表明此时用户“sc”没有权限删除该架构中的表。  (12) 将查询窗口切换到第1号窗口,在窗口下部回车以另起一行,输入代码清单5-17的代码,然后只运行这段代码(用鼠标将其高亮选中,然后单击“执行(X)”)。   (13) 将查询窗口切换到第2号窗口,再次只运行代码清单5-16所示的代码。此次可以成功地执行该窗口中的代码,该表“[sc].[tblTemp1]”将被删除。     一、选择题(下面每个选择题有一个或多个正确答案)   1.下列哪些验证模式属于SQL Server 2005数据库的身份验证方式?   A.Windows身份验证   B.SQL Server身份验证   C.Kerberos身份验证   D.Public Key身份验证   E.LDAP身份验证习 题  2.?LiuTao是计算机WestSVR中的一个普通用户,该用户登录到计算机之后,打开SQL Server管理控制台,在没有输入用户名和密码的情况下,成功地与数据库实例建立了连接。请问该用户采用的是哪一种身份验证方式?   A.Windows身份验证   B.SQL Server身份验证   C.Kerberos身份验证   D.Public Key身份验证   E.LDAP身份验证  3.?LiuTao是计算机WestSVR中的一个普通用户,该用户登录到计算机之后,打开SQL Server管理控制台,她希望在不输入用户名和密码的情况下能够与数据库实例建立了连接,但是却失败了。请问原因是什么?   A.数据库实例没有启用混合验证模式。   B.数据库实例没有启用Windows身份验证。   C.数据库实例没有与用户LiuTao相对应的登录名,也没有与LiuTao所属的组相对应的登录名。   D.数据库中没有与用户LiuTao相对应的数据库用户名,也没有与LiuTao所属的组相对应的数据库用户名。  4.下列有关数据库固定服务器角色的说法中,正确的有:   A.固定服务器角色可以方便地将服务器级的权限委派给合适的用户。   B.在必要的情况下,可以建立用户自定义的固定服务器角色。   C.可以删除某些不需要的固定服务器角色以降低资源开销。   D.如果某个登录是某固定服务器角色中的成员,则该登录不需要在数据库中有与其对应的数据库用户也能访问该数据库。  5.下列哪些属于固定数据库角色?   A.dbcreator   B.db_owner   C.db_securityadmin   D.db_denydatareader   E.db_datareader  6.下列哪些T-SQL语句可以创建数据库登录?   A.CREATE USER   B.CREATE LOGIN   C.CREATE DATABASE   D.CREATE GROUP  7.下列哪些T-SQL语句可以创建数据库用户?   A.CREATE USER   B.CREATE LOGIN   C.CREATE DATABASE   D.CREATE GROUP  8.下列有关架构的说法中,哪些是正确的?   A.一个架构只能由一个主体(例如数据库角色或用户)所拥有。   B.拥有某个架构的用户对此架构中的对象有完全控制权限。   C.用户对指定为自己默认架构的架构拥有完全控制的权限。   D.一个主体(例如数据库角色或用户)可以拥有多个架构。  9.下列有关数据库用户guest的说法中,哪些是正确的?   A.默认情况下,数据库用户guest没有被启用。   B.如果数据库用户guest已被启用,则对于哪些在数据库中没有相应数据库用户与之对应的登录,可以以guest的身份来访问该数据库。   C.如果不需要guest用户,则应将其删除。   D.可以通过运行T-SQL语句“GRANT CONNECT TO guest”来启用guest。  10.下列哪些语句是专用于对主体(例如数据库用户或角色)授权的T-SQL语句?   A.GRANT   B.REVOKE   C.DENY   D.ACCESS   E.ALTER   F.DROP  二、简答题   1.数据库服务器WestSVR中的某位Windows用户,其帐户名为“WangFei”。在该服务器的数据库实例中,没有与其帐户对应的登录名,在实例的数据库中也没有与其帐户相对应的数据库用户,但是该用户仍然可以登录数据库引擎实例并访问其中的数据库。请问这种情况可能吗?如果可能,在哪些情况下会有这样的现象?   2.有哪些方式可以将登录添加到固定服务器角色中?  3.有十个用户,均采用SQL Server身份验证方式连接至数据库实例,均分别有自己的SQL Server登录名。要求这十个用户只能访问数据库“WxdStudent”中的表“Student”、“Class”、“Teacher”,其他表均不能访问。请问实现该目标的最方便快捷的方法是什么?   4.请谈谈你对Windows组、固定服务器角色、固定数据库角色、自定义数据库角色的认识体会。
献花(0)
+1
(本文系大高老师首藏)