数据库管理:SQL Server 2008安全性探讨
Ruby 发表于:12年09月06日 11:18 [转载] DOIT.com.cn
凭据
Microsoft SQL Server 2008提供了一个将SQL Server登录名映射到外部Windows帐户的功能。如果需要允许SQL Server登录名与SQL Server本身范围之外的资源交互,这个功能很有帮助。他们还可以与为EXTERNAL_ACCESS权限配置的程序集一起使用。凭据可以配置为一对一映射,也可以配置为多对一映射,允许多个SQL Server登录名使用一个共享Windows帐户进行外部访问。在SQL Server 2008中,登录名可以与多个凭据相关联。
- --使用自己的服务器名称替代AughtEight
- USE master CREATE CREDENTIAL StreetCred WITH IDENTITY='AughtEight\CarolStreet', SECRET='P@ssw0rd'; GO
- --把Carol的SQL Server登录名和StrretCred平局相关联
- ALTER LOGIN Carol WITH CREDENTIAL=StreetCred; GO;
服务器角色
Microsoft SQL Server 2008定义了8个可用于简化SQL 登录名管理和委托管理的服务器级别角色。这些角色通常被称为固定服务器角色,因为对于这些角色,唯一能更改的只是成员资格。固定服务器角色可以基于角色的用途,为一个登录名自动支配一组通用权限。要向固定服务器角色添加一个登录名,可使用sp_addsrvrolemember存储过程。
- USE master CREATE LOGIN Ted WITH PASSWORD='P@ssw0rd'; GO
- EXEC sp_addsrvrolemember 'Ted','securityadmin'; GO
- USER master EXEC sp_dropsrvrolemember 'Ted','securityadmin'; GO
数据库用户
数据库用户是Microsoft SQL Server 2008采用的安全模型的另一个组成部分。用户可直接或通过一个或多个数据库角色中的成员关系访问安全的数据库对象。用户也可与表、视图和存储过程之类的对象的所有权相关联。
在创建登录名时,除非它是拥有所有数据库管理权限的固定服务器角色的一个成员,否则该登录名在附加到服务器的各数据库中没有显示权限。此时,该登录名和来宾数据库用户关联在一起,并继承该用户帐户的权限。在SQL Server Management Studio管理数据库用户时,有几个选项可供选择。在常规属性页上,可以为用户指定一个名称,并将该用户和一个现有的登录名关联起来。注意,用户名和登录名并不一定要匹配,但是为了方便管理,最好的做法是使用一致的命名约定,但这并不是强制要求。在常规页上可以配置的其他选项包括用户的默认架构、该用户所拥有的架构以及该用户所属的数据库角色。
- USE tempdb; CREATE USER Carol; GO
- USE master; CREATE LOGIN [AughtEight\Bob] FROM WINDOWS;
- USE AdventureWorks2008;
- CREATE USER BillyBob FOR LOGIN [AughtEight\Bob] WITH DEFAULT_SCHEMA=sales;
- USER AdventureWorks2008; CREATE CERTIFICATE SalesCert
- ENCRYPTION BY PASSWORD='P@ssw0rd'
- WITH SUBJECT='Sales Schema Certificate',
- EXPIRY_DATE='12/31/2010'; GO
- CREATE USER SalesSecurity FOR CERTIFICATE SalesCert;
- USE AdventureWorks2008 ALTER USER SalesSecurity WITH NAME=SalesSchemaSecurity; GO
- USE AdventureWorks2008 ALTER USER BillyBob WITH DEFAULT_SCHEMA=Production; GO
- USE master CREATE LOGIN TempCarol WITH PASSWORD='MyPassword', CHECK_POLICY=OFF; GO
- USE tempdb ALTER USER Carol WITH Login=TempCarol; GO
- USE AdventureWorks2008 DROP USER BillyBob; GO