数据库管理:SQL Server 2008安全性探讨
Ruby 发表于:12年09月06日 11:18 [转载] DOIT.com.cn
服务器权限
可以通过制定权限以及将被指派权限的登录名来管理服务器控制权限,如:
- --将创建数据库的权限授予登录名Ted
- USE master GRANT CREATE ANY DATABASE TO Ted; GO
- --Ted有权更改该登录名及允许其他人更改登录名
- USE master GRANT ALTER ANY LOGIN TO Ted WITH GRANT OPTION; GO
- --删除Ted的更改登录名的能力
- USE master REVOKE ALTER ANY LOGIN TO Ted CASCADE; GO
- --禁止Ted创建新数据库
- USE master DENY CREATE ANY DATABASE TO Ted; GO
但是,对于一个登录名或用户时否能够执行某一特定的操作而言,DENY和EVOKE并不总是终极答案,如果某登录名是sysadmin固定服务器角色的一个成员,该登录名就可以完全控制SQL Server及其资源,而且组织此登录名访问服务器上的对象没有太大意义。
端点是服务器级别的对象,在授予、撤销和拒绝时,它使用的语法和服务器权限有一些不同。下面的例子创建了一个名为ServiceBroker的端点,它将被用于一个Service Broker应用程序,然后将该端点的ALTER权限授予Ted:
- CREATE ENDPOINT ServiceBroker STATE=STARTED AS TCP (LISTENER_PORT=5162) FOR SERVICE_BROKER (AUTHENTICATION=WINDOWS); GO
- USER master GRANT ALTER ON ENDPOINT :: ServiceBroker TO Ted; GO
- USE master GRANT ALTER ON LOGIN::Ted TO Carol WITH GRANT OPTION; GO
数据库的作用域权限
- USE AdventureWorks2008 CREATE USER Alice FOR LOGIN [AughtEight\Alice]
- WITH DEFAULT_SCHEMA=SALES; GO
- GRANT CONTROL ON SCHEMA::Sales TO Alice
架构作用域权限