转:SQL Server中服务器角色和数据库角色权限详解

当几个用户需要在某个特定的数据库中执行类似的动作时(这里没有相应的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系统中所有可能的权限。例如,只有这个角色中的成员(或一个被这个角色中的成员赋予了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_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语句

固定数据库角色

固定数据库角色在数据库层上进行定义,因此它们存在于属于数据库服务器的每个数据库中。下表列出了所有的固定数据库角色


固定数据库角色


说    明


db_owner


可以执行数据库中技术所有动作的用户


db_accessadmin


可以添加、删除用户的用户


db_datareader


可以查看所有数据库中用户表内数据的用户


db_datawriter


可以添加、修改或删除所有数据库中用户表内数据的用户


db_ddladmin


可以在数据库中执行所有DDL操作的用户


db_securityadmin


可以管理数据库中与安全权限有关所有动作的用户


db_backoperator


可以备份数据库的用户(并可以发布DBCC和CHECKPOINT语句,这两个语句一般在备份前都会被执行)


db_denydatareader


不能看到数据库中任何数据的用户


db_denydatawriter


不能改变数据库中任何数据的用户

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

public角色

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

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

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

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

固定数据库角色及其权限

在数据库中,每个固定数据库角色都有其特定的权限。这就意味着对于某个数据库来说,固定数据库角色的成员的权限是有限的。使用系统过程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_droprolemember

7. db_backupoperator

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

运行BACKUP DATABASE和BACKUP LOG语句

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

运行如下dbcc命令:dbcc checkalloc、dbcc checkcatalog、dbcc checkdb、dbcc updateusage

8. db_denydatareader和db_denydatawriter

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

固定数据库角色db_denydatawriter的成员对数据库中的任何数据库对象(表或视图)没有INSERT、UPDATE和DELETE权限

原文地址:https://www.cnblogs.com/jearay/p/8778098.html

时间: 2024-10-08 13:06:31

转:SQL Server中服务器角色和数据库角色权限详解的相关文章

SQL SERVER 2008 服务器登录名、角色,数据库用户、角色、架构知识点总结

SQL SERVER 2008 服务器登录名.角色,数据库用户.角色.架构的关系可以用下面一张图表示: 用例过程如下: 新建服务器登录名: 登录名角色选定: 新建数据库DB1: 然后新建数据库架构Schema1 再新建数据库用户名  User1 服务器登录名属于某组服务器角色:服务器登录名需要于数据库的用户映射后才拥有操作数据库的权限数据库用户属于某组数据库角色以获取操作数据库的权限数据库角色拥有对应的数据库架构,数据库用户可以通过角色直接拥有架构 服务器角色 public sysadmin--

Sql Server中判断表或者数据库是否存在

Sql Server中判断表或者数据库是否存在 SQL Server中判断数据库是否存在: 法(一): select * From master.dbo.sysdatabases where name='数据库名' 法(二): if db_id('数据库名') is not null drop database ... go create ... SQL Server中判断表对象是否存在: select count(*) from sysobjects where id = object_id(

SQL SERVER 2008 服务器登录名、角色、数据库用户、角色、架构的关系

sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户可以对应多个架构(架构是表容器).架构里面包含的是数据库表. 2.一个数据库角色有可能涉及多个架构.数据库角色对应的是权限. 3.一个用户对应一个数据库角色. 4.登录名与数据库用户在服务器级别是一对多的:在数据库级别是一对一的. 服务器登录名:指有权限登录到某服务器的用户: 服务器角色:指一组固定的服务器用户,默认有9组: 登录名一定属于某些角色,默认为public 服务器角色不容许更改 登录后也不

SQL Server 中登录账号与数据库用户迁移

1.      先创建一个SqlServer 身份验证的登录名,并映射到数据库中. 如:创建用户 [kk] 映射到数据库 [mytest],此时数据库 [mytest] 会增加一个用户 [kk] 2.      此时再删除登录名 [kk],删除后,数据库[mytest] 将存在一个孤立用户 [kk] 3.      查看当前数据库中是否存在孤立用户 use mytest; exec sp_change_users_login @Action='Report'; 4.      对于孤立用户,有两

SQL Server中服务器身份验证及用户登录

安装过程中,SQL Server 数据库引擎设置为"Windows 身份验证模式"或"SQL Server 和 Windows 身份验证模式". 安装完成后,您可以随时更改身份验证模式. 如果在安装过程中选择了"Windows 身份验证模式",则 sa 登录名将被禁用,安装程序会分配一个密码. 如果稍后将身份验证模式更改为"SQL Server 和 Windows 身份验证模式",则 sa 登录名仍处于禁用状态. 若要使用 s

sql server 中隐藏掉无关数据库

先贴上我实际测试的效果 Problem I have a SQL Server instance that has hundreds of databases.  Navigating the database tree in SSMS is a pain and I was wondering if there was a way to limit the list of databases that I see in SSMS? Solution SQL Server consolidati

SQL Server 2008 R2:error 26 开启远程连接详解

在学习ASP.NET 过程用到新建数据集并远程连接sql server 2008 数据库,出现下面的错误: <--在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.     未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接.     (provider: SQL Network Interfaces, error: 26 - 定位指定的服务器/实例时出错)--> 因为sql server 2008默认是不允许远程连接的,sa

将SQL Server中的数据库导入到PowerDesigner

再用PD建表完成后导成SQL脚本然后在SQL Server中运行后生成数据库后,就想到,可不可以将直接将数据库的内容生成PD文档?经过上网查,当然可以的. 要将SQL Server中的数据库导入到PD中,首先需要建立一个数据库的链接,然后进行逆向工程的操作.下面开始操作. 第一步:打开数据库菜单,选择"Configure Connections" 第二步:创建新的ODBC链接 第三步:选择系统数据源 第四步:选择需要的数据库 第五步:"完成" 第六步:命名数据源,并

sql server中的系统数据库

1.master数据库 master是SQL Server中最重要的数据库,是整个数据库服务器的核心.用户不能直接修改该数据库,如果损坏了master数据库,整个SQL Server服务器将不能工作.该数据库中包含以下内容:所有用户的登陆信息.用户所在的组.所有系统的配置选项.服务器中本地数据库的名称和信息.SQL Server的初始化方式等.作为一个数据库管理员,应该顶起备份master数据库. 2.model数据库 model数据库是SQL Server中创建数据库的模板,如果用户希望创建的