SQLServer中服务器角和数据库角权限详解


当几个用户需要在某个特定的数据库中执行类似的动作时(这里没有相应的Windows用户组),就可以向该数据库中添加一个角(role)。数据库角指定了可以访问相同数据库对象的一组数据库用户。

数据库角的成员可以分为如下几类:

Windows用户组或用户账户

SQL Server登录

其他角

SQL Server的安全体系结构中包括了几个含有特定隐含权限的角。除了数据库拥有者创建的角之外,还有两类预定义的角。这些可以创建的角可以分为如下几类:

固定服务器

固定数据库

用户自定义

固定服务器

由于固定服务器是在服务器层次上定义的,因此它们位于从属于数据库服务器的数据库外面。下表列出了所有现有的固定服务器角。
固定服务器角
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登录。

固定服务器角及其权限

在某个SQL Server系统中,每个固定服务器角都有其隐含的权限。使用系统过程sp_srvrolepermission可以浏览每个固定服务器角的权限。该系统过程的语法形式为:

sp_srvrolepermission[[@srvrolename =] 'role']

如果没有指定role的值,那么所有的固定服务器角的权限都将显示出来。下面的部分将讨论每个固定服务器角的权限。

1. sysadmin

固定服务器角sysadmin安装sql server数据库没到的成员被赋予了SQL Server系统中所有可能的权限。例如,只有这个角中的成员(或一个被这个角中的成员赋予了CREATE DATABASE权限的用户)才能够创建数据库。

固定服务器角和sa登录之间有着特殊的关系。sa登录一直都是固定服务器角中的成员,并且不能从该角中删除。

2. serveradmin

固定服务器角serveradmin的成员可以执行如下的动作:

向该服务器角中添加其他登录

运行dbcc pintable命令(从而使表常驻于主内存中)

运行系统过程sp_configure(以显示或更改系统选项)

运行reconfigure选项(以更新系统过程sp_configure所做的所有改动)

使用shutdown命令关掉数据库服务器

运行系统过程sp_tableoption为用户自定义表设置选项的值

3. setupadmin

固定服务器角setupadmin中的成员可以执行如下的动作:

向该服务器角中添加其他登录

添加、删除或配置链接的服务器


执行一些系统过程,如sp_serveroption

4. securityadmin

固定服务器角securitypadmin中的成员可以执行关于服务器访问和安全的所有动作。这些成员可以进行如下的系统动作:

向该服务器角中添加其他登录

读取SQL Server的错误日志

运行如下的系统过程:如sp_addlinkedsrvloginsp_addloginsp_defaultdbsp_defaultlanguagesp_denyloginsp_droplinkedsrvloginsp_droploginsp_grantloginsp_helploginssp_remoteoptionsp_revokelogin(所有这些系统过程都与
系统安全相关。)

5. processadmin

固定服务器角processadmin中的成员用来管理SQL Server进程,如中止用户正在运行的查询。这些成员可以进行如下的动作:

向该服务器角中添加其他登录

执行KILL命令(以取消用户进程)

6. dbcreator

固定服务器角dbcreator中的成员用来管理与数据库创建和修改有关的所有动作。这些成员可以进行如下的动作:


向该服务器角中添加其他登录

运行CREATE DATABASEALTER DATABASE语句

使用系统过程sp_renamedb来修改数据库的名称

7. diskadmin

固定服务器角diskadmin的成员可以进行如下与用来存储数据库对象的文件和文件组有关的动作:

向该服务器角中添加其他登录

运行如下系统过程:sp_ddumpdevicesp_dropdevice


运行DISK INIT语句

固定数据库角

固定数据库角在数据库层上进行定义,因此它们存在于属于数据库服务器的每个数据库中。下表列出了所有的固定数据库角。
固定数据库角
db_owner
可以执行数据库中技术所有动作的用户
db_accessadmin
可以添加、删除用户的用户
db_datareader
可以查看所有数据库中用户表内数据的用户
db_datawriter
可以添加、修改或删除所有数据库中用户表内数据的用户
db_ddladmin
可以在数据库中执行所有DDL操作的用户
db_securityadmin
可以管理数据库中与安全权限有关所有动作的用户
db_backoperator
可以备份数据库的用户(并可以发布DBCCCHECKPOINT语句,这两个语句一般在备份前都会被执行)
db_denydatareader
不能看到数据库中任何数据的用户
db_denydatawriter
不能改变数据库中任何数据的用户

除了上表中列出的固定数据库角之外,还有一种特殊的固定数据库角,名为public,这里将首先介绍这一角。

public

public角是一种特殊的固定数据库角,数据库的每个合法用户都属于该角。它为数据库中的用户提供了所有默认权限。这样就提供了一种机制,即给予那些没有适当权限的所有用户以一定的(通常是有限的)权限。public角为数据库中的所有用户都保留了默认的权限,因此是不能被删除的。

一般情况下,public角允许用户进行如下的操作:

使用某些系统过程查看并显示master数据库中的信息

执行一些不需要一些权限的语句(例如PRINT)

固定数据库角及其权限

在数据库中,每个固定数据库角都有其特定的权限。这就意味着对于某个数据库来说,固定数据库角的成员的权限是有限的。使用系统过程sp_dbfixedrolepermission就可以查看每个固定数据库角的权限。该系统过程的语法为:

drolepermission [[@rolename =] 'role']

如果没有指定role的值,那么所有固定数据库角的权限都可以显示出来。下面的几节将讨论每个固定数据库角的权限。

1. db_owner

固定数据库角db_owner的成员可以在特定的数据库中进行如下的动作:

向其他固定数据库角中添加成员,或从其中删除成员

运行所有的DDL语句

运行BACKUP DATABASEBACKUP LOG语句

使用CHECKPOINT语句显式地启动检查点进程

运行下列dbcc命令:dbcc checkallocdbcc checkcatalogdbcc checkdbdbcc updateusage

授予、取消或剥夺每一个数据库对象上的下列权限:SELECTINSERTUPDATEDELETEREFERENCES


使用下列系统过程向数据库中添加用户或角:sp_addapprolesp_addrolesp_addrolemembersp_approlepasswordsp_changeobjectownersp_dropapprolesp_droprolesp_droprolemembersp_dropusersp_grantdbaccess

使用系统过程sp_rename为任何数据库对象重新命名

2. db_accessadmin

固定数据库角db_accessadmin的成员可以执行与数据库访问有关的所有动作。这些角可以在具体的数据库中执行下列操作:

运行下列系统过程:sp_addaliassp_dropaliassp_dropusersp_grantdbacesssp_revokedbaccess

Windows用户账户、Windows组和SQL Server登录添加或删除访问

3. dbdatareader

固定数据库角dbdatareader的成员对数据库中的数据库对象(表或视图)具有SELECT权限。然而,这些成员不能把这个权限授予其他任何用户或角。(这个限制对REVOKE语句来说同样成立。)

4. dbdatawriter

固定数据库角dbdatawriter的成员对数据库中的数据库对象(表或视图)具有INSERTUPDATEDELETE权限。然而,这些成员不能把这个权限授予其他任何用户或角。(这个限制对REVOKE语句来说也同样成立。)

5. db_ddladmin


固定数据库角db_ddladmin的成员可以进行如下的动作:

运行所有DDL语句

对任何表上授予REFERENCESE权限

使用系统过程sp_procoptionsp_recompile来修改任何存储过程的结构

使用系统过程sp_rename为任何数据库对象重命名

使用系统过程sp_tableoptionsp_changeobjectowner分别修改表的选项和任何数据库对象的拥有者

6. db_securityadmin


固定数据库角db_securityadmin的成员可以管理数据库中的安全。这些成员可以进行如下的动作:

运行与安全有关的所有Transact-SQL语句(GRANTDENYREVOKE)

运行以下系统过程:sp_addapprolesp_addrolesp_addrolemembersp_approlepasswordsp_changeobjectownersp_dropapprolesp_droprolesp_droprolemember

7. db_backupoperator

固定数据库角db_backupoperator的成员可以管理数据库备份的过程。这些成员可以进行如下动作:

运行BACKUP DATABASEBACKUP LOG语句

CHECKPOINT语句显式地启动检查点进程

运行如下dbcc命令:dbcc checkallocdbcc checkcatalogdbcc checkdbdbcc updateusage

8. db_denydatareaderdb_denydatawriter

顾名思义,固定数据库角db_denydatareader的成员对数据库中的数据库对象(表或视图)没有SELECT权限。如果数据库中含有敏感数据并且其他用户不能读取这些数据,那么就可以使用这个角。

固定数据库角db_denydatawriter的成员对数据库中的任何数据库对象(表或视图)没有INSERTUPDATEDELETE权限。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。