SQL 问题与解答登录触发器、数据文件碎片整理及其他内容

编辑:Nancy Michell

设置服务帐户

提示:更安全的密码

SQL Server 2000 引擎维护每个 SQL Server 登录密码的两个副本。一个版本是用户提供的实际密码,另一个版本是全部以大写字母表示的密码。

这种做法有助于对密码进行不区分大小写的验证,因为用户既可以使用以大小写混合字母表示的密码登录,也可以使用全部以大写字母表示的密码登录,并且这两种登录方式都可以访问服务器。但是,此便利也带来了一个问题。以全部大写的形式保存密码降低了可能存在的密码的数目,使强制密码猜测攻击更加容易。

SQL Server 2005 只存储密码的原始副本。用户输入的密码必须与存储在服务器上的密码匹配。如果密码不匹配,则登录失败并且用户访问被拒绝。如果忘记了准确的密码大小写设置,必须重设密码。

假设用户的登录名是 SQLCOMMUNITY,则可以使用以下命令重设其 SQL Server 密码:

Use Master;
ALTER LOGIN SQLCOMMUNITY WITH PASSWORD = 'k3t9h4s8wJF7t';

此命令会将 SQLCOMMUNITY SQL Server 登录密码重设为“k3t9h4s8wJF7t”。

问:在 SQL Server™ 2000 中,我经常使用“管理工具”中的“服务”小程序来设置 SQL Server 引擎和代理的服务帐户。现在我听说在 SQL Server 2005 中我应该能够使用“配置管理器”工具。为什么我不能继续使用 Windows 工具呢?

答:与以前的版本相比,对 SQL Server 2005 版本的构建更能保障安全。在许多企业中,用户仅设置内部帐户(如 LocalSystem)来运行 SQL Server。但这些帐户在 Windows® 下通常具有的权利和权限都比各自的需要多或少。您应该创建一个不具有提升权限的 Windows 帐户来运行 SQL Server 2005 引擎和代理服务。如果通过“配置管理器”选择这些帐户,就会在 SQL Server 和操作系统中自动为这些帐户授予适当的权利和权限。如果您使用 Windows 工具来管理 SQL Server 服务,则可能无法为您授予适当的权利,或者会授予您过多的权利。

有关详细信息,请参阅提示“更改服务帐户”。

谁登录了我的服务器?

问:我想知道谁登录了我的服务器以及何时登录的。我还希望限制特定用户只能在特定时间段登录,并了解如何触发一个跟踪以跟踪用户活动。这些愿望可能实现吗?

答:是的,如果您安装了 Service Pack 2,就可以使用 SQL Server 2005 实现上述所有愿望。

SQL Server 2005 允许您创建登录触发器,用于触发 T-SQL 或存储过程以响应 LOGON 事件。您可以使用登录触发器跟踪登录活动、限制登录到 SQL Server 或限制特定登录的会话数量,从而审核和控制用户。请注意,只有登录成功通过身份验证后,并且在实际建立用户会话前,才能触发该事件。因此,PRINT 语句生成的源于触发器内部的所有消息(如消息或错误)都将发送到 SQL Server 错误日志。如果登录身份验证失败,则不会触发登录触发器。

以下示例展示了如何创建登录触发器,并在用户登录后立即向 SQL Server 错误日志发送一条消息:

ALTER TRIGGER Ops_Login
ON ALL SERVER
AFTER LOGIN
AS
PRINT SUSER_SNAME() + ' has just logged in to ' + LTRIM(@@ServerName) + ' SQL Server at '+LTRIM(getdate())
GO

要查看在服务器级别设置的所有触发器,请使用以下查询:

SELECT * FROM sys.server_triggers;

碎片整理最佳实践

问:处理 SQL Server 中的数据文件碎片的最佳方法是什么?如果使用 Windows 中的碎片整理工具,这些工具会将 SQL 数据文件视为一个整体,不会对其进行精确的碎片整理。

答:您可以备份数据库然后还原它。如果存在能够容纳连续文件的空间,则会连续地写入数据库。也就是说,正常情况下没有必要停机尝试整理物理文件。通常不会存在很多外部碎片。更有效的做法是定期对数据重新编制索引,以尽可能减少内部碎片。这将在最大程度上提高预读的效率和缓冲的数据量。

使磁盘 I/O 高效的最重要因素有:确保磁盘对齐以及 RAID 配置正确,调整磁盘阵列以正确处理 I/O 负载,以及维护日志、数据、TempDB 和备份文件的正确布局。如果您避免使用自动增长和自动缩减作为调整数据文件大小的主要方法,就会减少所创建的卷级文件碎片的数量。例如,每执行 10 个 500MB 的自动增长,可能会增加 10 个新物理文件碎片。相比之下,手动增长 5GB 仅添加一个碎片。

提示:更改服务帐户

您知道使用 Windows NT® 帐户配置 SQL Server 服务登录帐户时,SQL Server 会在一些文件、文件夹和注册表项上设置 Windows 用户的权利和权限吗?您还可以使用“管理工具”中的“服务”控制台设置 SQL Server 服务帐户。然而,如果您通过“服务”执行此操作,就不会设置权利和权限,并且可能会由于在上述 SQL Server 和 Windows 项目中缺少适当的安全设置而遇到严重问题。

因此,强烈建议您在更改 SQL Server 或 SQL Server Agent 服务帐户时使用“SQL Server 配置管理器”,而不使用“服务”控制台。但是,如果您已经使用“服务”控制台对帐户进行了更改,仍然可以解决此问题。

步骤 1: 在以下注册表项及其子表项上应用全部权限:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<MSSQL.x>

步骤 2: 在此 NTFS 文件夹上为 MSSQLServer 服务和 SQLServerAgent 服务(可能是本地 Windows NT 帐户,也可能是域 Windows NT 帐户)的启动帐户设置完全控制:

Drive:\Program Files\Microsoft SQL Server\<MSSQL.1>\MSSQL

但不要手动操作,建议您使用“SQL Server 配置管理器”来更改 SQL Server/Agent 服务帐户。

**衷心谢谢以下 Microsoft IT 专家,感谢他们与我们分享了技术与专业知识:**Cary Gottesman、Saleem Hakani、Trayce Jordan、Peter Kalbach、Al Noel、Uttam Parui、Amber Sitko 和 Buck Woody。

© 2008 Microsoft Corporation 与 CMP Media, LLC.保留所有权利;不得对全文或部分内容进行复制.