背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-8576.html    注册17xie 一起来写书 实现您的出书梦想!

第十一章  许可管理

许可的概念在SQL Server中非常重要,使用许可用以指定授权用户使用的数据库对象以及对这些对象可以执行的操作,如果用户没有被明确地赋予对数据库中某个对象的访问权限,就不能访问该对象。

SQL Server数据库系统中,许可有多种层次,可以分配许可给单个用户或者用户自己建立的角色,也可以增加到Windows NT组上。另外,要注意,分配许可给一个组或者一个角色要比分配给单个用户容易。

本章主要介绍以下内容:

n         许可类型

n         验证许可

n         授予许可

n         否定许可

n         回收许可

11.1  许可类型

SQL Server系统中,有三种许可类型:语句许可、对象许可和预定义许可。

11.1.1  语句许可

语句许可通常授予那些需要在数据库中创建对象或者修改对象、执行数据库和事务日志备份的用户。这是SQL Server中功能最强大的许可,如果给用户授予语句许可,用户便具有了创建对象的权利,可以使用以下语句:

n         CREATE DATABASE:该许可允许用户在服务器上创建数据库。

n         CREATE DEFAULT:该许可允许用户在当前数据库上创建对象。

n         CREATE PROCEDURE:该许可允许用户在当前数据库中创建存储过程。

n         CREATE RULE:该许可允许用户在当前数据库中创建规则。

n         CREATE TABLE:该许可允许用户在当前数据库中创建表。

n         CREATE VIEW:该许可允许用户在当前数据库中创建视图。

n         BACKUP DATABASE:该许可允许用户创建一个具有访问权限的数据库的备份。

n         BACKUP LOG:该许可允许用户创建一个具有访问权限的数据库的事务日志备份。

11.1.2  对象许可

对象许可一般分配给数据库层次上的对象,并允许用户访问和操作数据库中已经存在的对象,如果没有找到对象许可,将不能用数据库中的任何对象。对象许可有以下几种:

n         SELECT:该许可授予数据库中某个特定表的用户,如果具有这种许可,就能访问、存储该表上的数据。

n         INSERT:该许可授予数据库中某个特定表的用户,如果具有这种许可,就能在表中增加数据。

n         UPDATE:该许可授予数据库中某个特定表的用户,如果具有这种许可,就能修改数据库中的数据。

n         DELETE:该许可授予存储过程的用户,如果具有这种许可,就可以删除该存储过程。

n         EXECUTE:该许可授予存储过程的用户,如果具有这种许可,就可以运行该存储过程。

n         REFERENCES:这是一种特殊的许可,允许用户使用一个主键/外键关系把两个表连接起来。

11.1.3  许可状态

许可有三种状态:禁止、撤销和授予,禁止许可是许可的最高级别,一旦许可对用户禁止,用户就不能访问数据库对象,即使在另外的级别授予许可。比如,TomAuthors组中的成员,Authors角色在Sales表上被授予SELECT许可,而TomSales表上被撤销许可,所以Tom便不能访问Sales表。

撤销就是删除以前分配给用户许可的禁止或者授予状态,但是另一个级别上的授予或者禁止不受影响,比如:TomAuthors组中的成员,Authors角色在Sales表上被授予SELECT许可,而TomSales表上被撤销了SELECT许可,但是此时Tom仍然能够访问Sales表,如果要完全撤消Tom对该表的访问,必须对Tom禁止这个许可或者在Authors角色中撤销SELECT许可。

授予可以删除禁止或者撤销许可。如果一个许可在任何其他级上被禁止,用户将不能使用该功能;如果许可在另一级上被撤销,用户仍然能够使用该功能。比如,TomAuthors组中的成员,Authors角色在Sales表上被授予SELECT许可,如果Authors角色在Sales表上撤销SELECT许可,Tom仍然能够访问Sales表。

11.2  验证许可

针对每一个数据库,管理员可以为用户指定执行某些操作的许可。当用户执行某个操作的时候,系统首先进行许可检查,如果有许可,可以执行该操作,如果没有许可,不允许执行该操作,并且返回错误信息。SQL Server系统按照如下步骤验证许可是否有效:

1)当用户执行某项操作的时候,该操作所涉及的Transact-SQL语句就会被发送到SQL Server系统中。

2)当SQL Server系统接收到这些Transact-SQL语句的时候,检查用户是否具有执行这些语句的许可。

 

3)如果用户没有执行SQL语句相应的许可,SQL Server系统不执行该操作并返回错误信息;如果用户有相应的许可。SQL Server系统将执行相应的操作。

验证许可的流程如图11-1所示。

11-1  验证流程图

11.3  管理许可

11.3.1  授予许可

可以使用SQL Server Enterprise Manager或者Transact-SQL语句授予许可,当授予许可的时候,应该考虑以下因素:

n         只能在当前数据库中授予许可。

n         默认情况下,sysadmindb-ownerdb-securityadmin的成员和数据库对象所有者具有授予许可的权限。

使用SQL Server Enterprise Manager授予许可的操作步骤如下:

1)运行SQL Server Enterprise Manager并连接到使用许可的服务器上。

2)展开服务器树,显示服务器上的对象目录,然后单击数据库文件夹左边的“+”,显示服务器上的所有数据库。

3)单击pubs数据库文件夹左边的“+”号,显示pubs数据库的所有对象目录,单击Tables文件夹,在右边的窗格内找到sales表,单击鼠标右键,选择所有任务,在所有任务子菜单中,单击Manage Permissions,打开如图11-2所示的Object Properties对话框。

4)如果要禁止许可,在与用户对应的方框上单击两下,直到看到一个红色的X,如果要授予用户许可,在对应的方框上单击一下,直到看到一个勾号。

5)完成许可分配后,单击“确定”按钮,SQL Server将分配这些许可。

 

11-2  Object Properties对话框

另外,也可以在SQL Query Analyzer中运行SQL语句来分配许可。常用的分配许可的语句有GRANTDENYREVOKE,下面讲述GRANT语句的语法形式。

语句许可的语法形式如下:

GRANT{ALL|statement[,…n]}TO security_account[,…n]

对象许可的语法形式如下:

GRANT

{

{ALL[PRIVILEGES]|permission[,…n]}

[(column[,…n])]ON{table|view}

|ON {Stored_procedure|extended_proedure}

}

TO security_account[,…n]

[AS {group|role}]

下面是一个分配许可的例子。程序中先把SELECT许可赋予角色Authors,然而,又对Tom用户进行了额外授权,这样,Tom就拥有对表sales的全部许可。

USE pubs

GO

GRANT SELECT

ON sales

TO Authors

GO

GRANT Tom

ON sales

TO Tom

GO

下面的例子把语句许可CREATE VIEWCREATE PROCEDURE授权给其他用户和角色:

USE pubs

GRANT CREATE VIEW

TO Tom[Authors]

USE

GRANT CREATE PROCEDURE

TO tom[Authors]

11.3.2  否定许可

有时候可能需要限制某些用户或者角色的访问权限,这时可以通过否定许可来达到这一目的。否定许可相当于:

n         删除以前授予用户或者角色的许可。

n         禁止从另外一个角色中继承的许可。

n         确保用户或者角色不能从任何其他角色中继承许可。

在否认许可的时候,需要考虑以下因素:

n         只能在当前数据库中否认许可。

n         默认情况下,sysadmindb_ownerdb_securityadmin的成员和数据库对象所有者具有否定许可的权限。

可以使用DENY语句否认许可,DENY语句的语法形式如下:

否认许可语句的语法形式如下:

DENY {ALL | statement [,...n] | TO security_account[,...n]

否认对象许可的语法形式如下:

DENY{ALL|satement[,…n]|TO security_account[,…n]}

{[(column[,…n])]ON{table|view}

|ON{table|view}[(colum[,…n])]

|{Procedure|extended_procdure}}

TO security_account

下面的例子否认对象许可。先为Authors角色授予SELECT许可,然后,又否认了Tom的许可,从而Tom就没有访问Sales表的许可。

USE pubs

GO

GRANT SELECT

ON sales

TO Authors

GO

DENY Tom

ON sales

TO Tom

GO

下面的例子否认了Tom创建视图和创建存储过程的许可。

USE pubs

DENY CREATE VIEW

TO Tom

USE

DENY CREATE PROCEDURE

TO Tom

11.3.3  收回许可

收回许可可以禁止使用授予的许可或者否认许可。在收回许可的时候,需要考虑以下因素:

n         只能在当前数据库中收回许可。

n         默认情况下,sysadmindb_ownerdb_securityadmin的成员和数据库对象所有者具有收回许可的权限。

n         收回许可本质上就是删除系统表sysprotects中的内容,这部分内容是由授予许可和否认许可创建的。

收回许可可以使用REVOKE语句,REVOKE语句的语法形式如下:

收回许可的语法形式如下:

REVOKE{ALL|statement[,…n]||FROM security_account[n]

收回对象许可的语法形式如下:

REVOKE[GRANT OPTION ON]

{ALL[PRIVILEGES]|ON{table|view}

|ON{stored_procedure|exteneded_procedure}

}

FROM security_account[,…n]

[AS{group|role}]

下面是一个收回对象许可的例子,从多个用户收回对象许可。

USE pubs

REVOKE SELECTINSERT

ON sales

FROM Tom John

下面是一个收回语句许可的例子,从Tom收回CREATE TABLE语句许可。

REVOKE CREATE TABLE

FROM Tom

11.4   

本章介绍了许可的概念、类型、系统验证许可的过程以及许可的三种状态。通过本章的学习,应掌握以下内容:

n         使用许可可以指定授权用户可以使用的数据库对象以及对这些对象可以执行的操作

n         SQL Server系统中,有三种许可类型:语句许可、对象许可和预定义许可。

n         创建数据库或者创建数据库中的其他内容所需要的许可类型称为语句许可。

n         使用数据或者执行存储过程所需要的许可称为对象许可。

n         可以使用GRANT语句授予许可。

n         可以使用DENY语句否定许可。

n         可以使用REVOKE语句收回许可。


字数:6771    最后更新:11个月以前 [12-01 13:28]徐振成 修改
本页编辑者:徐振成  
[前一页]:10.4角色管理使用  [后一页]:第十二章 数据库备份
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号