SQL Server 加密解密策略
6.4 SQL Server 密码策略和证书
SQL Server 2005加强了在Windows Server 2003下运行的SQL Server登录的身份验证。SQL Server 2005 对其他操作系统下运行的SQL Server的身份验证也做了一些改进。正如本章一开始提到的,用户可以使用Windows身份验证或者SQL Server身份验证来登录SQL Server。Windows身份验证是非常安全的,因为用户的密码不会在网上发送,而且域和机器的管理员可以加强密码策略。密码策略可能要求用户在第一次登录NT域或机器时更改他们的密码。策略可能要求用户使用强壮的密码,比如,至少八个字符,包括至少一个数字、字母和特殊符号。密码策略可能也要求用户经常改变他们的密码。这个策略可以指定在尝试了若干次错误密码后禁止登录。当一个数据库管理员仅使用Windows登录时,SQL Server继承这个级别的可增强安全性。SQL Server 2005之前,SQL Server没有这些必要的安全性特征。在大多数安全性系统中,弱的密码被认为是安全性最薄弱的环节。
有了SQL Server 2005新的安全特性之后,SQL Server 登录账号将具有所有可用的安全性策略特征。SQL Server用户和应用程序角色都将使用这个策略。在Windows Server 2003或以后的版本中,这个策略将通过操作系统级调用来实现。这个操作系统级调用是NetValidatePasswordPolicy。这样一来,管理员就可以在Windows集成和SQL Server登录中使用相同的策略。为了让使用SQL Server 2005的公司有时间来分析政策如何影响已有的应用程序,这些策略在每一个登录账号已被关掉。显然,这种做法不值得推荐。默认情况下,CHECK_EXPIRATION策略会被设置成OFF,因为组织和软件厂家将不得不对每一个应用程序增加更改密码的能力。Windows向用户提供在登录时(或者当登录到Windows以后)更改密码的能力时,SQL Server用户能够在登录时改变密码。客户端应用程序接口(比如OLE DB,ODBC和ADO.NET)以及客户端工具(比如SQL Server Management Studio)都已被增强以支持这个特点。
如果你正在使用Active Directory,密码策略将通过Active Directory Users and Computers工具设置;如果你正在管理一个非域的电脑,密码策略将通过Local Security Settings管理工具设置。表6.1给出了使用Local Security Settings的设置。
表6.1 Windows和SQL Server 2005登录账号的安全性策略
策略类别 |
策略名称 |
默认设置(本地服务器) |
密码策略 |
强密码历史 |
0密码记忆 |
最长密码使用时间 |
42天 | |
最短密码使用时间 |
0天 | |
最短密码长度 |
0字符 | |
密码必须匹配复杂性需求 |
||
用可递加密方法保存密码 |
禁用 | |
账户锁定策略 |
账号锁定期限 |
禁用 |
账户锁定阈值 |
0非法登录尝试 | |
在此后重置锁定计数器 |
不适用的 |
注意,Account Lockout Duration(当达到Account Lockout Threshold(账户锁定极限)时,账户被锁定的时间)和Reset Lockout Counter After(当无效的登录尝试返回到0(如果没有扩展它)以后的时间)都是不适用的,直到设置Account Lockout Threshold为某个非0的值。
对于SQL Server登录账户,这里有两个密码选项:CHECK_EXPIRATION和CHECK_POLICY。CHECK_EXPIRATION包含最小和最大的密码期限,而CHECK_POLICY包含所有其他的策略。当用户的运行和任何政策运行时,SQL Server登录账户必须由数据库管理员解锁,正如本章后面有一个例子所示。
管理员可以通过SQL Server Management Studio或通过使用T_SQL语句CREATE LOGIN来增加一个新的登录账号。为了向后兼容,传统的存储过程sp_addlogin仍被支持,但这个存储过程没有展现出新的特征。像下面的例子一样,你可以创建一个新的SQL Server登录账号,它要求在用户第一次试图登录时使用MUST_CHANGE关键字更改密码。如果不改变密码就试图访问SQL Server实例,将导致一个错误:
CREATE LOGIN FRED WITH PASSWORD = 'hy!at54Cq' MUST_CHANGE,
DEFAULT_DATABASE = pubs,
CHECK_EXPIRATION = ON,
CHECK_POLICY = ON
GO
FRED试图登录到数据库时,他将得到一个“初次登录时必须更改密码”的错误。数据库管理员用DDL可以管理密码策略问题。如果登录账号FRED被锁定,比如在三次登录尝试失败之后,数据库管理员可以通过下面的代码解锁登录账号:
ALTER LOGIN FRED WITH PASSWORD = 'fredsNewpassword#' UNLOCK
GO
在极少数情况下,数据库管理员希望关掉强制密码有效期限或强制安全性策略时,可以用ALTER LOGIN来实现。设置了MUST_CHANGE标志但用户尚未更改密码时,下面的两个语句都不能工作:
ALTER LOGIN FRED WITH CHECK_EXPIRATION = OFF
GO
ALTER LOGIN FRED WITH CHECK_POLICY = OFF
GO