sqlserver 角色 详解.doc_第1页
sqlserver 角色 详解.doc_第2页
sqlserver 角色 详解.doc_第3页
sqlserver 角色 详解.doc_第4页
sqlserver 角色 详解.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

12.4 角色当几个用户需要在某个特定的数据库中执行类似的动作时(这里没有相应的Windows用户组),就可以向该数据库中添加一个角色(role)。数据库角色指定了可以访问相同数据库对象的一组数据库用户。数据库角色的成员可以分为如下几类:Windows用户组或用户账户SQL Server登录其他角色SQL Server的安全体系结构中包括了几个含有特定隐含权限的角色。除了数据库拥有者创建的角色之外,还有两类预定义的角色。这些可以创建的角色可以分为如下几类:固定服务器固定数据库用户自定义12.4.1 固定服务器由于固定服务器是在服务器层次上定义的,因此它们位于从属于数据库服务器的数据库外面。表12-1列出了所有现有的固定服务器角色。表12-1 固定服务器角色固定服务器角色说 明sysadmin执行SQL Server中的任何动作serveradmin配置服务器设置setupadmin安装复制和管理扩展过程securityadmin管理登录和CREATE DATABASE的权限以及阅读审计processadmin管理SQL Server进程dbcreator创建和修改数据库diskadmin管理磁盘文件下面两个系统过程用来添加或删除固定服务器角色成员:sp_addsrvrolemember sp_dropsrvrolemember 注意:您不能添加、修改或删除固定服务器角色。另外,只有固定服务器角色的成员才能执行上述两个系统过程来从角色中添加或删除登录账户。sa登录sa登录是系统管理员的登录。在以前的SQL Server版本中不存在角色,sa登录具有所有可能的关于系统管理工作的权限。在SQL Server 2005中,sa登录保持了向后兼容性。sa登录永远是固定服务器角色syadmin中的成员,并且不能从该角色中删除。注意:只有当没有其他方法登录到SQL Server系统中时,再使用sa登录。12.4.2 固定服务器角色及其权限在某个SQL Server系统中,每个固定服务器角色都有其隐含的权限。使用系统过程sp_srvrolepermission可以浏览每个固定服务器角色的权限。该系统过程的语法形式为:sp_srvrolepermissionsrvrolename = role 如果没有指定role的值,那么所有的固定服务器角色的权限都将显示出来。下面的部分将讨论每个固定服务器角色的权限。1. sysadmin固定服务器角色sysadmin的成员被赋予了SQL Server系统中所有可能的权限。例如,只有这个角色中的成员(或一个被这个角色中的成员赋予了CREATE DATABASE权限的用户)才能够创建数据库。固定服务器角色和sa登录之间有着特殊的关系。sa登录一直都是固定服务器角色中的成员,并且不能从该角色中删除。2. serveradmin固定服务器角色serveradmin的成员可以执行如下的动作:向该服务器角色中添加其他登录运行dbcc pintable命令(从而使表常驻于主内存中)运行系统过程sp_configure(以显示或更改系统选项)运行reconfigure选项(以更新系统过程sp_configure所做的所有改动)使用shutdown命令关掉数据库服务器运行系统过程sp_tableoption为用户自定义表设置选项的值3. setupadmin固定服务器角色setupadmin中的成员可以执行如下的动作:向该服务器角色中添加其他登录添加、删除或配置链接的服务器执行一些系统过程,如sp_serveroption4. securityadmin固定服务器角色securitypadmin中的成员可以执行关于服务器访问和安全的所有动作。这些成员可以进行如下的系统动作:向该服务器角色中添加其他登录读取SQL Server的错误日志运行如下的系统过程:如sp_addlinkedsrvlogin、sp_addlogin、sp_defaultdb、sp_defaultlanguage、sp_denylogin、sp_droplinkedsrvlogin、sp_droplogin、sp_grantlogin、sp_helplogins、sp_remoteoption和sp_revokelogin(所有这些系统过程都与系统安全相关。)5. processadmin固定服务器角色processadmin中的成员用来管理SQL Server进程,如中止用户正在运行的查询。这些成员可以进行如下的动作:向该服务器角色中添加其他登录执行KILL命令(以取消用户进程)6. dbcreator固定服务器角色dbcreator中的成员用来管理与数据库创建和修改有关的所有动作。这些成员可以进行如下的动作:向该服务器角色中添加其他登录运行CREATE DATABASE和ALTER DATABASE语句使用系统过程sp_renamedb来修改数据库的名称7. diskadmin固定服务器角色diskadmin的成员可以进行如下与用来存储数据库对象的文件和文件组有关的动作:向该服务器角色中添加其他登录运行如下系统过程:sp_ddumpdevice和sp_dropdevice。运行DISK INIT语句12.4.3 固定数据库角色固定数据库角色在数据库层上进行定义,因此它们存在于属于数据库服务器的每个数据库中。表12-2列出了所有的固定数据库角色。表12-2 固定数据库角色固定数据库角色说 明db_owner可以执行数据库中技术所有动作的用户db_accessadmin可以添加、删除用户的用户db_datareader可以查看所有数据库中用户表内数据的用户db_datawriter可以添加、修改或删除所有数据库中用户表内数据的用户db_ddladmin可以在数据库中执行所有DDL操作的用户db_securityadmin可以管理数据库中与安全权限有关所有动作的用户db_backoperator可以备份数据库的用户(并可以发布DBCC和CHECKPOINT语句,这两个语句一般在备份前都会被执行)db_denydatareader不能看到数据库中任何数据的用户db_denydatawriter不能改变数据库中任何数据的用户除了表12-2中列出的固定数据库角色之外,还有一种特殊的固定数据库角色,名为public,这里将首先介绍这一角色。public角色public角色是一种特殊的固定数据库角色,数据库的每个合法用户都属于该角色。它为数据库中的用户提供了所有默认权限。这样就提供了一种机制,即给予那些没有适当权限的所有用户以一定的(通常是有限的)权限。public角色为数据库中的所有用户都保留了默认的权限,因此是不能被删除的。(示例12.12给出了public角色的使用方法。)一般情况下,public角色允许用户进行如下的操作:使用某些系统过程查看并显示master数据库中的信息执行一些不需要一些权限的语句(例如PRINT)12.4.4 固定数据库角色及其权限在数据库中,每个固定数据库角色都有其特定的权限。这就意味着对于某个数据库来说,固定数据库角色的成员的权限是有限的。使用系统过程sp_dbfixedrolepermission就可以查看每个固定数据库角色的权限。该系统过程的语法为:sp_db.xedrolepermission rolename = role 如果没有指定role的值,那么所有固定数据库角色的权限都可以显示出来。下面的几节将讨论每个固定数据库角色的权限。1. db_owner固定数据库角色db_owner的成员可以在特定的数据库中进行如下的动作:向其他固定数据库角色中添加成员,或从其中删除成员运行所有的DDL语句运行BACKUP DATABASE和BACKUP LOG语句使用CHECKPOINT语句显式地启动检查点进程运行下列dbcc命令:dbcc checkalloc、dbcc checkcatalog、dbcc checkdb、dbcc updateusage授予、取消或剥夺每一个数据库对象上的下列权限:SELECT、INSERT、UPDATE、DELETE和REFERENCES使用下列系统过程向数据库中添加用户或角色:sp_addapprole、sp_addrole、sp_addrolemember、sp_approlepassword、sp_changeobjectowner、sp_dropapprole、sp_droprole、sp_droprolemember、sp_dropuser、sp_grantdbaccess使用系统过程sp_rename为任何数据库对象重新命名2. db_accessadmin固定数据库角色db_accessadmin的成员可以执行与数据库访问有关的所有动作。这些角色可以在具体的数据库中执行下列操作:运行下列系统过程:sp_addalias、sp_dropalias、sp_dropuser、sp_grantdbacess、sp_revokedbaccess为Windows用户账户、Windows组和SQL Server登录添加或删除访问3. dbdatareader固定数据库角色dbdatareader的成员对数据库中的数据库对象(表或视图)具有SELECT权限。然而,这些成员不能把这个权限授予其他任何用户或角色。(这个限制对REVOKE语句来说同样成立。)4. dbdatawriter固定数据库角色dbdatawriter的成员对数据库中的数据库对象(表或视图)具有INSERT、UPDATE和DELETE权限。然而,这些成员不能把这个权限授予其他任何用户或角色。(这个限制对REVOKE语句来说也同样成立。)5. db_ddladmin固定数据库角色db_ddladmin的成员可以进行如下的动作:运行所有DDL语句对任何表上授予REFERENCESE权限使用系统过程sp_procoption和sp_recompile来修改任何存储过程的结构使用系统过程sp_rename为任何数据库对象重命名使用系统过程sp_tableoption和sp_changeobjectowner分别修改表的选项和任何数据库对象的拥有者6. db_securityadmin固定数据库角色db_securityadmin的成员可以管理数据库中的安全。这些成员可以进行如下的动作:运行与安全有关的所有Transact-SQL语句(GRANT、DENY和REVOKE)运行以下系统过程:sp_addapprole、sp_addrole、sp_addrolemember、sp_approlepassword、sp_changeobjectowner、sp_dropapprole、sp_droprole、sp_droprolemember7. db_backupoperator固定数据库角色db_backupoperator的成员可以管理数据库备份的过程。这些成员可以进行如下动作:运行BACKUP DATABASE和BACKUP LOG语句用CHECKPOINT语句显式地启动检查点进程运行如下dbcc命令:dbcc checkalloc、dbcc checkcatalog、dbcc checkdb、dbcc updateusage8. db_denydatareader和db_denydatawriter顾名思义,固定数据库角色db_denydatareader的成员对数据库中的数据库对象(表或视图)没有SELECT权限。如果数据库中含有敏感数据并且其他用户不能读取这些数据,那么就可以使用这个角色。固定数据库角色db_denydatawriter的成员对数据库中的任何数据库对象(表或视图)没有INSERT、UPDATE和DELETE权限。12.4.5 应用程序角色应用程序角色可以加强对某个特定的应用程序的安全。换句话说,这些角色允许应用程序自己代替SQL Server接管用户身份验证的职责。比如,如果公司中的员工只是使用某个特定的应用程序(而不是Transact-SQL语句或其他任何工具)来修改员工的数据信息,那么就可以为它创建一个应用程序角色。应用程序角色与其他的角色类型有着显著不同。首先,因为应用程序角色只使用应用程序,因而不需要把权限直接赋予用户,所以应用程序角色没有任何成员。其次,您需要为应用程序设置一个口令来激活它。当应用程序角色被应用程序的会话激活以后,在会话期间,会话就失去了适用于登录、用户账户或所有数据库中的角色的权限。1. 创建应用程序角色使用下列方法可以创建应用程序角色:CREATE APPLICATION ROLE语句系统过程sp_addapproleCREATE APPLICATION ROLE语句可以为当前数据库创建一个应用程序角色。该语句有两个选项:一个与口令的规范有关,另一个用于默认模式的定义,也就是,当服务器为该角色指定对象的名称时,服务器将要搜索的第一个模式。示例12.10显示了一个应用程序角色的创建方法。示例12.10USE sample CREATE APPLICATION ROLE weekly_reports WITH PASSWORD =x1y2z3w4, DEFAULT_SCHEMA =my_schema 示例12.10向当前数据库中添加了一个名为weekly_reports的新的应用程序角色。创建新的应用程序角色的第二种方法是使用系统过程sp_addapprole。使用系统过程sp_addapprole,就可以创建应用程序角色并把权限授予它们。该系统过程有如下的语法形式:sp_addapprole rolename = role, passwd_name = password其中role指定了应用程序角色的名称,password是相应的口令。(激活角需要用到password的值。)注意:SQL Server将来的版本中将删除系统过程sp_addapprole这部分内容。请避免使用这一功能。您可以使用CREATE APPLICATION ROLE语句来代替。2. 激活应用程序角色当启动连接以后,必须执行sp_setapprole系统过程来激活与应用程序角色有关的权限。该过程的语法形式如下所示:sp_setapprolerolename = role, password = password,encrypt = encrypt_style 其中role是在当前数据库中定义的应用程序角色的名称。password指定了相应的口令,而encrypt_style则定义了口令的加密样式。在使用系统过程sp_setapprole激活应用程序角色时,必须知道如下的一些事项:在激活了应用程序角色之后,在当前数据库中就不能使这个角色无效,而必须等到会话从SQL Server中断开连接之后才可以。应用程序角色总是和数据库绑定在一起的。也就是说,应用程序角色的作用域是当前数据库。如果在会话中改变了当前数据库,那么根据那个数据库的权限,只能执行那个数据库中允许的(其他)动作。注意:通过提供应用程序角色的正确口令,任何用户都可以执行系统过程sp_setapprole。3. 修改应用程序角色使用下列Transact SQL语句可以修改应用程序角色:ALTER APPLICATION ROLEDROP APPLICATION ROLEALTER APPLICATION ROLE语句可以修改已有的应用程序角色的名称、口令或默认模式。该语句的语法与CREATE APPLICATION ROLE语句的语法形式类似。要想执行ALTER APPLICATION ROLE语句,需要取得对该对象的ALTER权限。DROP APPLICATION ROLE语句可以从当前数据库中删除应用程序角色。如果应用程序角色拥有任何对象(可保护对象),就不能删除该角色。注意:您同样可以使用系统过程sp_dropapprole来删除某个应用程序角色,但是在SQL Server将来的版本将删除该系统过程,不再使用它。12.4.6 用户自定义的数据库角色一般来说,在一组数据库用户需要在数据库中执行一套常用操作并且不存在可用的Windows用户组的情况下,才可能用到用户自定义的数据库角色。这些角色通过Transact-SQL语句或SQL Server系统过程进行管理。接下来我们将讨论Transact-SQL语句,然后介绍相应的系统过程。1. 角色和Transact-SQLCREATE ROLE语句可以在当前数据库中创建一个新的数据库角色。该语句的语法格式为:CREATE ROLE role_nameAUTHORIZATION owner_name 其中role_name是创建的用户自定义的角色的名称。Owner_name指定了即将拥有这个新角色的数据库用户或角色。(如果没有指定用户,那么该角色将由执行CREATE ROLE语句的用户所拥有。)CREATE ROLE语句可以修改用户自定义的数据库角色的名称。类似地,DROP ROLE语句可以从数据库中删除角色。拥有数据库对象(可保护对象)的角色不能从数据库中删除。要想删除这类角色,必须首先转换那些对象的从属关系。DROP ROLE语句的语法形式如下所示:DROP ROLE role_name 2. 角色和系统过程创建或修改用户自定义角色的另一个方法是使用SQL Server系统过程。下列系统过程可以用来创建和显示用户自定义的数据库角色:sp_addrole sp_addrolemember sp_droprolemember sp_droprole sp_helprole 系统过程sp_addrole可以在当前数据库中创建一个新的角色。只有数据库角色db_securityadmin或db_owner才能够执行这个系统过程。注意:SQL Server 2005中包含的系统过程sp_addrole只是向后兼容的,在将来发布的SQL Server版本中可能不再支持该系统过程。所以请使用CREATE ROLE语句来代替。向当前数据库中添加了一个角色之后,就可以使用系统过程sp_addrolemember来添加该角色的成员。角色的成员可以是任何SQL Server中的合法用户、Windows用户组或用户,或另一个SQL Server角色。只有数据库角色db_owner的成员才能执行该系统过程。另外,角色拥有者也可以执行sp_addrolemember来向它所拥有的任何角色中添加成员。系统过程sp_droprolemember可以用来从角色中删除现有的成员。(但是不能使用这一系统过程来从某个Windows组中删除现有的Windows用户。)只有数据库角色db_owner或db_securityadmin才能执行该系统过程。在使用系统过程sp_droprolemember删除了角色中的所有成员之后,可以使用系统过程sp_droprole来从当前数据库中删除角色。(含有现有成员的角色不能删除。)只有数据库角色db_owner或db_securityadmin才能执行该系统过程。注意:SQL Server 2005中包含的系统过程sp_droprole只是向后兼容的,在将来发布的SQL Server版本中可能不再支持该系统过程。所以请使用DROP ROLE语句来代替。系统过程sp_helprole可以用来显示当前数据库中某个特定的角色或所有角色(如果没有提供角色名称)的相关信息(角色名称和角色的ID号)。只有数据库角色db_owner或db_securityadmin才能执行该系统过程。12.5 授权只有被授权的用户才能执行语句或对可保护对象进行操作。否则,将拒绝执行Transact-SQL语句或拒绝对数据库对象进行操作。SQL Server支持3个与授权有关的Transact-SQL语句:GRANTDENYREVOKE在讨论这3个语句之前,我们将首先介绍SQL Server 2005与安全有关的一个最重要的属性:SQL Server 2005引入了多个作用域和权限来帮助数据库管理员处理权限问题。新的授权模型把该领域分为主体和可保护对象两个部分。每个SQL Server可保护对象都含有可以授予主体的相关权限。主体(例如个人、组或应用程序)可以访问可保护对象。可保护对象是SQL Server授权系统规则可以访问的资源。正如前面已经讨论过的,存在3个可保护对象的作用域:服务器、数据库和模式(它含有其他可保护对象,如SQL Server登录、数据库用户、表和存储过程等)。12.5.1 GRANT语句GRANT语句用来把权限赋予SQL Server可保护对象。GRANT语句的语法格式为:GRANT permission_listON scope TO principal_listWITH GRANT OPTION AS windows_group|sqlserver_login|db_user|db_role|appl_role 其中permission_list指定了被授予权限的语句或对象(通过逗号分开)。scope指定了将被授予权限的可保护类或可保护名称,权限将赋予它。principal_list列出了权限授予的所有账户(通过逗号分开)。principal_list的组件可以是一个Windows用户账户、SQL Server登录、映射到证书的登录或用户账户、映射到非对称键的登录、数据库用户、数据库角色或应用程序角色。注意:SQL Server 2000把所有权限分为两个权限组:语句权限和对象权限,这些权限使用GRANT语句把权限授予Transact-SQL语句和数据库对象,其格式略有不同。对于两类权限组,SQL Server 2005中的GRANT语句具有统一的语法格式。表12-3给出了所有的权限及其描述,以及可应用这些权限的相应可保护对象。表12-3 权限及相应的可获得资源权 限适 用 范 围说 明SELECT表+列,同义词,视图+列,表值函数提供选择(读取)行的能力。可以通过列出列的名称来把权限约束到一列或多个列上。(如果没有列出这些名称,那么就可以选择表中所有的列。)INSERT表+列,同义词,视图+列提供插入行的能力UPDATE表+列,同义词,视图+列提供修改列中数据的能力。可以通过列出列的名称来把权限约束到列或多个列上。(如果没有列出这些名称,那么就可以修改表中所有的列。)DELETE表+列,同义词,视图+列提供删除行的能力REFERENCES用户自定义函数(SQL和CLR),表+列,同义词,视图+列当用户对被引用表没有SELECT权限时,提供对引用表外键所在列的引用权限EXECUTE存储过程(SQL和CLR),用户自定义函数(SQL和CLR),同义词提供执行特定的存储过程或用户自定义函数的能力CONTROL存储过程(SQL和CLR),用户自定义函数(SQL和CLR),同义词该权限把所属关系的能力赋予被授予人;被授予人对可保护对象可以有效地拥有定义的所有权限。被授予CONTROL权限的主体也能够把权限授予可保护对象。在某个特定范围内的CONTROL权限隐式地包括了在该范围内对所有可保护对象CONTROL权限ALTER存储过程(SQL和CLR),用户自定义函数(SQL和CLR),表,视图ALTER权限授予用户对某个特定可保护对象的属性(除了从属关系之外)进行修改的能力。如果是在某个范围内授予该权限,那么它也同时赋予了对该范围内所包含的可保护对象进行ALTER、CREATE或DROP的能力TAKE OWNERSHIP存储过程(SQL和CLR),用户自定义函数(SQL和CLR),表,视图,同义词TAKE OWNERSHIP权限允许被授予人拥有授予的可保护对象VIEW DEFINITION存储过程(SQL和CLR),用户自定义函数(SQL和CLR),表,视图,同义词VIEW DEFINITION权限用来控制被授权的人浏览可保护对象元数据的能力(参见示例12.16)(续表) 权 限适 用 范 围说 明CREATE(服务器可保护对象)n/a把创建服务器可保护对象的能力传递给被授权人CREATE(DB可保护对象)n/a把创建数据库可保护对象的能力传递给被授权人注意:表12-3只是给出了最重要的一些权限。SQL Server 2005安全模型是分等级的。因此,还有许多零碎的权限没有在表12-3中列出来。您可以在Books Online中找到这些权限的详细描述。接下来将通过几个示例来阐述GRANT语句的用法。示例12.11USE sample GRANT CREATE TABLE,CREATE PROCEDURE TO peter,paul,mary 示例12.11阐述了CREATE权限的使用方法。在该示例中,用户peter、paul和mary可以执行Transact-SQL语句CREATE TABLE和CREATE PROCEDURE。(从该示例中可以看出,含有CREATE权限的GRANT语句并没有包含ON选项。)示例12.12允许用户mary在示例数据库中创建用户自定义函数。示例12.12USE sample GRANT CREATE FUNCTION TO mary 下面的示例给出了ALL子句的用法。该子句表明适用于指定可保护对象的所有权限都将授予指定的主体。示例12.13USE sample GRANT ALL TO mary 在示例12.13中,用户mary可以使用示例数据库中所有允许的Transact-SQL语句。下面的示例给出了GRANT语句中SELECT权限的使用方法。示例12.14USE sample GRANT SELECT ON employee TO peter,mary 在示例12.14中,用户peter和mary可以读取employee表中的行。注意:如果某个权限授予了某个Windows用户账户或数据库用户账户,那么该账户就是权限可以施加影响的唯一账户。另一方面,如果某个权限被授予了一个组或角色,那么该权限将影响属于该组(角色)的所有用户。默认情况下,如果用户A把某个权限赋予B,那么用户B就只能使用该权限来执行GRANT语句中列出的Transact-SQL语句。WITH GRANT OPTION向用户B提供了额外的能力,可以把该特权授予其他用户(参见示例12.18)。下面的示例给出了GRANT语句中UPDATE权限的使用方法。示例12.15USE sample GRANT UPDATE ON works_on (emp_no, enter_date) TO paul 在示例12.15中,用户paul可以修改works_on表中的两个列:emp_no和enter_date。下面的示例给出了VIEW DEFINITION权限的使用方法。示例12.16USE sample GRANT VIEW DEFINITION ON OBJECT:employee TO peter GRANT VIEW DEFINITION ON SCHEMA:dbo to peter 示例12.16展示了与VIEW DEFINITION权限有关的两个GRANT语句。第一个GRANT语句允许用户peter查看示例数据库中与employee表有关的元数据。(可保护对象OBJECT是基本的可获得资源之一,您可以使用该可保护对象把具体对象(例如表、视图和存储过程)的权限赋予其他用户。)由于可保护对象的分级结构,所以您可以使用“更高级”的可保护对象来扩展VIEW DEFINITION(或其他基础的)权限。示例12.16中的第二个语句向用户peter提供了对示例数据库中dbo模式中所有对象的元数据的访问权限。注意:在SQL Server以前的版本中,不能对所有数据库对象的信息进行查询,即便这些对象由另一个用户所拥有也是如此。现在,VIEW DEFINITION权限允许对元数据不同的页面进行访问,或不允许访问,因此可以决定元数据的哪一部分对于其他用户是可见的。下面的示例给出了CONTROL权限的用法。示例12.17USE sample GRANT CONTROL ON DATABASE:sample TO peter 在示例12.17中,用户peter有效地拥有对可保护对象(在这种情况下,是示例数据库)的所有定义的权限。授予CONTROL权限的主体同样隐式地拥有赋予对可保护对象的权限,即含有WITH GRANT OPTION子句的CONTROL权限(参见下面的示例)。CONTROL权限是与几个基础可保护对象有关的最高权限。由于这个原因,在某个特定范围内的CONTROL权限隐式地包括了对该范围内的所有可保护对象的CONTROL权限。因此,peter对示例数据库的CONTROL权限意味着对该数据库的所有权限、对数据库中所有程序集的所有权限、对示例数据库中所有模式的权限以及对示例数据库中对象的所有权限。下面的示例给出了GRANT语句中WITH GRANT OPTION子句的使用方法。示例12.18USE sample GRANT SELECT ON works_on TO mary WITH GRANT OPTION 在示例12.18中,用户mary可以使用SELECT语句来检索works_on表中的行,同样也可以把此特权赋予当前数据库中的其他用户。12.5.2 DENY语句DENY语句可以阻止用户进行某些动作。这就意味着该语句可以从用户的账户删除某些现有的权限,或防止用户可以从它所在的组或角色中获取一些可能将来才该得到的权限。该语句的语法格式如下所示:DENY permission_list ON scope TO principal_list CASCADE AS windows_group | sqlserver_login | db_user |db_role | appl_role DENY语句中所有选项的含义与前面GRANT语句中同名选项的含义相同。唯一的区别是CASCADE选项。该选项指出用户A禁止使用此项权限,同时,通过用户A获得此项权限的其他任何用户也不能使用该权限。(如果在DENY语句中没有指定CASCADE选项,而且使用WTH GRANT OPTION授予了相应的对象权限,那么这时将会返回一个错误。)DENY语句可以阻止特定的用户、组或角色获取通过它们所在组或角色的成员所赋予的权限。这就意味着如果用户属于某个组(角色),并且该用户不能使用授予该组(角色)的权限,那么这个用户将是这个组中唯一不能使用该权限的人。另一方面,如果整个组都被取消了某个权限,那么该组中的所有成员都不能使用此项权限。注意:可以把GRANT语句想象成“正”的用户授权,而把DENY语句想象成“负”的用户授权。通常情况下,DENY语句只是用来剥夺组(角色)中的某几个成员已有的权限。示例12.19USE sample DENY CREATE TABLE, CREATE PROCEDURE TO peter,paul 示例12.19中的DENY语句剥夺了用户peter和paul两个已经被赋予的语句权限。示例12.20USE sample GRANT SELECT ON project TO PUBLIC DENY SELECT ON project TO peter,mary 示例12.20显示了当前数据库中一些用户的负授权。首先,project表中所有行的检索都赋予了示例数据库中的所有用户。之后,取消了两个用户peter和mary的上述权限。12.5.3 REVOKE语句REVOKE语句用来删除一个或多个已经被赋予(或禁止)的权限。该语句的语法格式如下所示:REVOKE GRANT OPTION FOR permission_listON scope FROM principal_listCASCADE AS windows_group | sqlserver_login | db_user |db_role | appl_role REVOKE语句中唯一的新选项是GRANT OPTION FOR。(其他所有选项的含义都与前面GRANT语句或DENY语句中同名选项的含义相同。)GRANT OPTION FOR用来消除在相应的GRANT语句中使用WITH GRANT OPTION选项所带来的影响。这就意味着用户仍然拥有原先被授予的权限,但是不能再把该权限授予其他用户。注意:REVOKE语句可以剥夺通过GRANT语句指定的“正”权限,也可以剥夺由DENY语句产生的“负”权限。因此,该语句的功能是使指定的(正的或负的)权限失效。示例12.21USE sample REVOKE SELECT ON project FROM PUBLIC 示例12.21中的REVOKE语句取消了授予public角色的权限。同时,因为从角色或组中取消的权限并没有影响到显式授予或禁止的权限,所以对于用户peter和mary来说已有的“负”权限并没有被取消(示例12.20)。12.6 视图和数据访问正如第10章中已经讲述过的,视图可以用于如下的目的:限制表中特定的列或(和)行的使用隐藏复杂查询的细节约束插入或更新的值在一定范围内限制表中特定的列或(和)行的使用意思是指SQL Server的视图机制本身提供了数据访问权限的控制。比如,如果含有员工数据的表同时包含了每个员工的工资信息,那么就可以创建一个视图,该视图中含有所有员工表中的列,除了salary列之外。随后,使用该视图,检索表中数据的权限可以授予数据库中的所有用户,而只有一小部分(拥有特权)用户拥有获取表中所有数据的权限。示例12.22、12.23和12.24显示了使用视图来限制对数据的访问。示例12.22USE sample GO CREATE VIEW v_without_budget AS SELECT project_no,project_name FROM project 使用视图v_without_budget,可以把用户分为两组:第一组是拥有特权的用户,他们可以读取(编写)所有项目的预算;第二组是一般用户,他们可以读取projects表中除了budget列之外的所有行中的信息。示例12.23USE sample GO ALTER TABLE employee ADD user_name CHAR(60) DEFAULT SYSTEM_USER GO CREATE VIEW v_my_rows AS SELECT emp_no,emp_fname,emp_lname,dept_no FROM e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论