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系统中所有可能的权限。例如,只有这个⾓⾊中的成员(或⼀个被这个⾓⾊中的成员赋予了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_dbfixedrolepermission [[@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的成员可以执⾏与数据库访问有关的所有动作。这些⾓⾊可以在具体的数据库中执⾏下列操作:sqlserver备份表语句
运⾏下列系统过程: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权限。
最后还有关于给予指定操作权限的⽅法
对于不想让某⼀⽤户(如user1)查看表(如 table j)直接在定义该⽤户时不授予select on j 的权限,若已经授予了可⽤下⾯SQL语句解决:revoke select
on j(注意在SQL2008中是 on j ,若on table j就出错)
ser1
同样的,授予user1对表j 的添加(insert)或删除(delete)或修改(update)权限即可,已insert 为例:
grant insert
on j
to user1
另外,只能是数据库的sa或是对表j拥有添加(insert)或删除(delete)或修改(update)权限的⼀般⽤户才能授权给user1,⽽对于收回user1的权限⼀般由数据库的sa或已将权限授予user1的⽤户。

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