滚滚长江东流水,黄河入海不复返

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

3. 实施密码策略

使用SQL Server登录名的时候,应该为它们实施强密码策略,否则随着时间的流逝,SQL Server 的安全性将逐渐被弱化。SQL Server 2005能够对SQL Server 登录名执行操作系统的密码实施策略。如果在Windows 2003服务器版上运行SQL ServerSQL Server将使用NetValidatePasswordPolicy API (应用程序接口)来控制以下三点:

l          密码的复杂性

l          密码的生存周期

l          帐户锁定

如果在Windows 2000服务器版上运行SQL ServerSQL Server会使用Microsoft Baseline Security Analyzer (MBSA)提供的本地密码复杂性规则来执行以下密码规则:

l          密码不能为空或者NULL

l          密码不能为登录名

l          密码不能为机器名

l          密码不能为“Password”,“Admin”,或者“Administrator

可以使用以下Transact SQL代码来打开密码实施策略:

 

CREATE LOGIN Mary

WITH PASSWORD = '34TY$$543' MUST_CHANGE,

CHECK_EXPIRATION = ON,

CHECK_POLICY = ON;

4. 管理实例权限

前面学习了如何允许一个用户访问SQL Server实例,但尚未讨论这些登录名在SQL Server中有哪些权限。一般来说,用户需要访问某些数据。但我们也许需要创建具有执行管理任务权限的登录名。

SQL Server在实例提供了服务器角色来实现这一任务。(服务器角色是固定的,所以不能在实例创建角色)。表2.2列出了SQL Server 2005创建的固定服务器角色。

2.2  固定服务器角色

固定服务器角色

   

bulkadmin

可以运行BULK INSERT语句

dbcreator

可以新建、更新、删除和恢复数据库

diskadmin

可以管理磁盘文件

processadmin

可以结束进程

securityadmin

可以管理登录名和分配权限

serveradmin

可以更改服务选项和关闭服务器

setupadmin

可以管理已连接的服务器并执行系统存储过程

sysadmin

可以在服务器上执行任何操作

 

获取服务器角色成员信息  通过查询系统函数IS_SRVROLEMEMBER,可以查出当前用户是否属于一个服务器角色。如果实际登录名属于sysadmin服务器角色,以下Transact SQL语句返回1,否则返回0

 

SELECT IS_SRVROLEMEMBER ('sysadmin');

 

为服务器角色添加一个登录名  可以使用系统存储过程sp_addsrvrolemember为现有的服务器角色添加一个登录名。以下示例将在sysadmin服务器角色中添加登录名Mary

 

EXECUTE sp_addsrvrolemember 'Mary', 'sysadmin';

 

将登录名从服务器角色中删除  可以使用存储过程sp_dropsrvrolemember将一个登录名从服务器角色中删除。以下示例将删除sysadmin服务器角色中的登录名Mary

 

EXECUTE sp_dropsrvrolemember 'Mary', 'sysadmin';

 

授予单独的权限  SQL Server 2005提供了一个更精细的权限结构,使我们能够更出色地控制登录操作。我们可以通过GRANTDENYREVOKE语句控制权限。可以通过sys.server_permissions目录视图来获取有关服务权限的信息。

以下示例代码将为登录名Mary授予创建和执行SQL Server Profiler跟踪的权限:

 

GRANT ALTER TRACE TO Mary;

 

用户可以通过使用fn_my_permissions函数了解自己都有哪些权限。以下语句将显示用户的权限。

 

SELECT * FROM fn_my_permissions (NULL, 'SERVER');

 

相关链接   可以在SQL Server Books Online 的“GRANT Server Permissions (T-SQL)”一节查看服务器权限列表。

2.2.3  拒绝用户访问

在有些情况下,例如一个用户离开了组织,需要拒绝一个特定登录名对数据库的访问。如果这个拒绝是临时的,可以通过禁用这个登录名来完成。并不需要将这个登录名从实例中删除。通过禁用访问,为数据库用户保留了登录名属性及其与数据库用户之间的映射关系。重新启用登录名的时候,可以像以前一样使用同样的登录名属性。执行以下ALTER语句可以启用或者禁用登录名:

 

-- Disable the login

ALTER LOGIN Mary DISABLE;

-- Enable the login

ALTER LOGIN Mary ENABLE;

 

可以通过查询sql_logins目录视图来检查被禁用的登录名,如下所示:

 

-- Disable the login

ALTER LOGIN Mary DISABLE;

GO

-- Query the system catalog view

SELECT * FROM sys.sql_logins

WHERE is_disabled=1;

GO

-- Enable the login

ALTER LOGIN Mary ENABLE;

 提示     SQL Server Management Studio中,禁用的登录名有一个红色的箭头作为标记。这个箭头显示在登录名的图标中。我们可以在“对象资源管理器”面板下的“安全性/登录名”中看到它。

另一方面,如果需要从实例中删除一个登录名,可以使用DROP LOGIN语句。以下示例将删除登录名Mary

 

DROP LOGIN Mary;

 

 警告  删除登录名的时候,SQL Server 2005不会删除与其映射的数据库用户。

 警告  删除与Windows用户或组映射的登录名并不能保证该用户或者该组的成员不能访问SQL Server。要注意,该用户可能依然属于有合法登录名的其他Windows组。

2.2.4  使用SQL Server身份验证连接到SQL Server

以下Visual Basic代码(在示例文件ConnectUsingSQLAuth.vb.txt)演示了如何使用SQL Server身份验证来连接SQL Server

 

' Create an instance of a SQLConneciton object

Dim oConn as New SQLClient.SQLConnection

' Declare the connection string,

' with specific username and password

oConn.ConnectionString="server=localhost; database=AdventureWorks; " + _

"user id= Mary; password=34TY$$543"

' Open the connection

oConn.Open()

' Do some work

...

' Close the connection

oConn.Close()

 

ol Security (IPSec)
posted on 2006-12-20 09:54  Steveson  阅读(335)  评论(0编辑  收藏  举报