3. 实施密码策略
使用SQL Server登录名的时候,应该为它们实施强密码策略,否则随着时间的流逝,SQL Server 的安全性将逐渐被弱化。SQL Server 2005能够对SQL Server 登录名执行操作系统的密码实施策略。如果在Windows 2003服务器版上运行SQL Server,SQL Server将使用NetValidatePasswordPolicy API (应用程序接口)来控制以下三点:
l 密码的复杂性
l 密码的生存周期
l 帐户锁定
如果在Windows 2000服务器版上运行SQL Server,SQL 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提供了一个更精细的权限结构,使我们能够更出色地控制登录操作。我们可以通过GRANT,DENY和REVOKE语句控制权限。可以通过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)