管理SQL Server 2008 数据库权限

2012-4-29 5:01:18 来源:网友投稿 浏览:3423
权限提供了一种方法来对特权进行分组,并控制实例、数据库和数据库对象的维护和实用程序的操作。用户可以具有授予一组数据库对象的全部特权的管理权限,也可以具有授予管理系统的全部特权但不允许存取数据的系统权限。

数据库权限指明用户获得哪些数据库对象的使用权,以及用户能够对这些对象执行何种操作。用户在数据库中拥有的权限取决于以下两方面的因素:

    用户账户的数据库权限

    用户所在角色的类型

权限提供了一种方法来对特权进行分组,并控制实例、数据库和数据库对象的维护和实用程序的操作。用户可以具有授予一组数据库对象的全部特权的管理权限,也可以具有授予管理系统的全部特权但不允许存取数据的系统权限。

1  对象权限

在SQL Server 2008中,所有对象权限都可以授予。可以为特定的对象、特定类型的所有对象和所有属于特定架构的对象管理器。

在服务器级别,可以为服务器、端点、登录和服务器角色授予对象权限。也可以为当前的服务器实例管理权限;在数据库级别,可以为应用程序角色、程序集、非对称密钥、凭据、数据库角色、数据库、全文目录、函数、架构等管理权限。

一旦有了保存数据的结构,就需要给用户授予开始使用数据库中数据的权限,可以通过给用户授予对象权限来实现。利用对象权限,可以控制谁能够读取、写入或者以其他方式操作数据。下面简要介绍12个对象权限:

    Control  这个权限提供对象及其下层所有对象上的类似于主所有权的能力。例如,如果给用户授予了数据库上的“控制”权限,那么他们在该数据库内的所有对象(比如表和视图)上都拥有“控制”权限。

    Alter  这个权限允许用户创建(CREATE)、修改(ALTER)或者删除(DROP)受保护对象及其下层所有对象。他们能够修改的惟一属性是所有权。

    Take Ownership  这个权限允许用户取得对象的所有权。

    Impersonate  这个权限允许一个用户或者登录模仿另一个用户或者登录。

    Create  这个权限允许用户创建对象。

    View Definition  这个权限允许用户查看用来创建受保护对象的T-SQL语法。

    Select  当用户获得了选择权限时,该权限允许用户从表或者视图中读取数据。当用户在列级上获得了选择权时,该权限允许用户从列中读取数据。

    Insert  这个权限允许用户在表中插入新的行。

    Update  这个权限允许用户修改表中的现有数据,但不允许添加或者删除表中的行。当用户在某一列上获得了这个权限时,用户只能修改该列中的数据。

    Delete  这个权限允许用户从表中删除行。

    References  表可以借助于外部关键字关系在一个共有列上相互链接起来;外部关键字关系设计用来保护表间的数据。当两个表借助于外部关键字链接起来时,这个权限允许用户从主表中选择数据,即使他们在外部表上没有“选择”权限。

    Execute  这个权限允许用户执行被应用了该权限的存储过程。

2  语句权限

语句权限是用于控制创建数据库或者数据库中的对象所涉及的权限。例如,如果用户需要在数据库中创建表,则应该向该用户授予CREATE TABLE语句权限。某些语句权限(如CREATE DATABASE)适用于语句自身,而适用于数据库中定义的特定对象。只有sysadmin、db_owner和db_securityadmin角色的成员才能够授予用户语句权限。

在SQL Server 2008中的语句权限主要有:

    CREATE DATABASE  创建数据库

    CREATE TABLE  创建表

    CREATE VIEW  创建视图

    CREATE PROCEDURE  创建过程

    CREATE INDEX  创建索引

    CREATE ROLE  创建规则

    CREATE DEFAULT  创建默认值

可以使用SQL Server Management Studio授予语句权限,例如为角色TestRole授予CREATE TABLE权限,而不授予SELECT权限,然后执行相应的语句,查看执行结果,从而理解语句权限的设置。具体步骤如下所示:

(1)打开SQL Server Management Studio,在【对象资源管理器】中展开【服务器】节点,然后再展开【数据库】节点。

(2)然后,右击数据库【体育场管理系统】,从弹出菜单中选择【属性】命令,打开【数据库属性】窗口。

(3)选中【权限】选项,打开【权限】选项页面,从【用户或角色】列表中单击选中TestRole。

(4)在【TestRole的显示权限】列表中,启用CREATE TABLE后面【授予】列的复选框,而SELECT后面的【授予】列的复选框一定不能启用。如图所示。

配置【权限】页面

(5)设置完成后,单击【确定】按钮返回SQL Sever Management Studio。

(6)断开当前SQL Server服务器的连接,重新打开SQL Sever Management Studio,设置验证模式为SQL Server身份验证模式,使用admin登录,由于该登录账户于数据库用户admin相关联,而数据库用户admin是TestRole的成员,所以该登录账户拥有该角色的所有权限。

(7)单击【新建查询】命令,打开查询视图。查看【体育场管理系统】数据库中的客户信息,结果将会失败,如图所示。

SELECT语句执行结果

(8)消除当前查询窗口的语句,并输入REATE TABLE语句创建表,具体代码如下所示:

USE 体育场管理系统

GO

CREATE TABLE 赛事安排

(比赛编号 int NOT NULL,

赛事名称 nvarchar(50) NOT NULL,

比赛时间 datetime NOT NULL,

场馆编号 int NOT NULL

)

(9)执行上述语句,显示成功。因为用户admin拥有创建表的权限,所以登录名admin继承了该权限。

其实上面的授予语句权限工作完全可以用GRANT语句来完成,具体语句如下所示:

GRANT {ALL | statement[,…n]}

TO security_account[,…n]

上述语法中各参数描述如下所示:

    ALL  该参数表示授予所有可以应用的权限。在授予语句权限时,只有固定服务器角色sysadmin成员可以使用ALL参数。

    statement  表示可以授予权限的命令,如CREATE TABLE等。

    security_account  定义被授予权限的用户单位。security_account可以是SQL Server 2008的数据库用户或者角色,也可以是Windows用户或者用户组。

例如使用GRANT语句完成前面使用SQL Server Management Studio完成的为角色TestRole授予CREATE TABLE权限,就可以使用如下代码:

USE 体育场管理系统

GO

GRANT CREATE TABLE

TO TestRole

3  删除权限

通过删除某种权限可以停止以前授予或者拒绝的权限。使用REVOKE语句删除以前的授予或者拒绝的权限。删除权限是删除已授予的权限,并不是妨碍用户、组或者角色从更高级别集成已授予的权限。

撤销对象权限的基本语法如下:

REVOKE [GRANT OPTION FOR]

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

{

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

[(column[,...n])]

|{stored_procedure}

}

{TO|FROM}

security_account[,...n]

[CASCADE]

撤销语句权限的语法是:

REVOKE {ALL|statement[,...n]}

FROM security_account[,...n]

其中对各个参数的介绍如下:

    ALL  表示授予所有可以应用的权限。其中在授予命令权限时,只有固定的服务器角色sysadmin成员可以使用ALL关键字;而在授予对象权限时,固定服务器角色成员sysadmin、固定数据库角色db_owner成员和数据库对象拥有者都可以使用关键字ALL

    statement  表示可以授予权限的命令。例如,CREATE DATABASE。

    permission  表示在对象上执行某些操作的权限

    column  在表或者视图上允许用户将权限局限到某些列上,column表示列的名字

    WITH GRANT OPTION  指示被授权者在获得指定权限的同时还可以将指定权限授予其他主体

    security_account  定义被授予权限的用户单位。security_account可以是SQL Server的数据库用户,可以是SQL Server的角色,也可以是Windows的用户或者工作组。

CASCADE  指示要撤消的权限也会从此主体授予或者拒绝该权限的其他主体中撤消。

注意:如果对授予了WITH GRANT OPTION权限的权限执行级联撤消,将同时撤消该权限的GRANT和DENY权限。

例如,删除角色TestRole对客户信息表的SELECT权限,就可以使用如下代码:

USE 体育场管理系统

GO

REVOKE SELECT ON 客户信息

FROM TestRole

GO

(0)
(0)