配置SQL Server日志传送的安全性

本文介绍如何为SQL Server日志传送配置安全性,并提供有关为SQL Server日志传送配置安全性时可能发生的问题的信息。

原始产品版本:SQL Server
原始 KB 编号: 321247

摘要

本文介绍如何配置日志传送的安全性。 为SQL Server日志传送配置安全性时,需要考虑几个问题,从用于SQL Server的启动帐户到事务日志备份所在的网络共享共享权限。 本文介绍了这些问题。

域帐户

如果已在域中放置SQL Server,Microsoft 建议使用域帐户来启动SQL Server服务。 如果要将SQL Server配置为作为 Windows 群集下的虚拟服务器运行,则应使用域帐户。 域帐户在密码更改时提供最少维护的优势。 但是,如果SQL Server驻留在工作组中的服务器上,则可能无法在域帐户下启动 SQL。

本地网络帐户

可以使用 SQL Server 在本地创建的网络帐户下启动。 在SQL Server进程需要网络访问的情况下,如果已将SQL Server配置为使用日志传送,则可以使用网络直通安全性。 使用直通安全性时,SQL Server将访问的所有计算机都必须具有相同网络帐户,该帐户具有相同的密码和适当的权限,并且在本地配置了相应权限。 此外,当SQL Server进程从第二台计算机请求资源时,如果启动请求SQL Server服务的同一帐户 (存在,则传统网络安全) 具有相同的密码。 只要第二台计算机上的帐户配置了足够的权限来执行通过调用 SQL Server 请求的任务,任务就会成功。

本地系统帐户

还可以将SQL Server配置为在本地系统帐户下启动。 修改 LocalSystem 帐户的密码可能会导致某些对系统稳定性至关重要的服务失败。 此帐户是它所在的计算机的本地帐户,这意味着SQL Server服务使用的安全上下文是本地的。 如“本地网络帐户”部分所述,在 LocalSystem 帐户下启动SQL Server时,无法使用网络直通安全性,因为不同计算机上的 LocalSystem 帐户的密码不同。 当需要网络资源访问时,在此帐户下启动SQL Server很可能导致任务未成功完成。

有关网络帐户成功启动和运行SQL Server和SQL Server 代理服务所需的最低权限的信息,请参阅设置 Windows 服务帐户

了解SQL Server安全模型

若要完全了解安全隐患,请务必了解 Microsoft 在 SQL Server 2000 中实现的安全模型。 创建登录名时,该登录名将添加到 syslogins MASTER 数据库中的表中。 对于提供此新添加的登录名访问的每个数据库,该数据库将添加到该数据库中的 sysusers 表中。 表和sysusers表之间的syslogins映射位于 SID 字段上。

如果用户数据库移动到其他服务器,SID 值将从以前的服务器传递。 如果第二台服务器上的登录名未使用相同的 SID 值创建,或者由于 SID 值不匹配而未正确配置安全性,则数据库安全性会中断。

有关详细信息,请参阅如何在运行 SQL Server 的服务器之间移动数据库时解决权限问题

安全要求

  • 备份共享

    配置配置为保存事务日志备份的网络共享,以便对为日志传送) 启动的辅助服务器上SQL Server服务 (的帐户具有读取/更改权限。

    配置为保存事务日志备份的网络共享应配置为对在配置为日志传送的辅助服务器上启动SQL Server服务的帐户具有读取/更改权限。 辅助服务器上的复制作业访问此共享,以将事务日志备份复制到相应辅助服务器上的本地文件夹。 然后,加载作业从本地文件夹加载这些备份。

  • 跨域日志传送

    如果运行SQL Server的计算机放置在多域环境中,Microsoft 建议在日志传送所涉及的所有域之间设置双向信任。 但是,如果无法在域之间建立信任,则可以使用网络直通安全性进行日志传送。 请参阅本文中讨论与SQL Server相关的服务的 LocalSystem 网络帐户启动选项的部分。

  • 选择“身份验证模式”以连接到 Monitor Server

    可以选择主服务器和辅助服务器 (Windows 身份验证或 SQL 身份验证 (,) 连接到监视服务器并更新监视表。 可以在设置日志传送时或设置日志传送并正常运行后选择此选项。 默认情况下,SQL Server使用Windows 身份验证;但是,如果选择“SQL 身份验证”,则会在主服务器、辅助服务器和监视器服务器上创建新的 SQL 登录名log_shipping_monitor_probe(如果不存在)。 如果选择 SQL 身份验证以实现此目的,请将SQL Server配置为使用 SQL 和 Windows 身份验证 选项。

备用数据库辅助服务器上的安全配置

如果在备用模式下配置辅助数据库,则可以以只读状态访问此数据库。 通过在此模式下还原辅助数据库,这可以提供一种运行脱机报表的方法,从而从生产系统卸载某些工作。 但是,要使备用数据库支持只读功能,可能需要在辅助服务器上应用相同的安全设置。 由于数据库处于待机状态,因此你甚至无法出于配置安全性的目的进行任何修改。 在这种情况下,必须在辅助服务器上使用相同的 SID 值创建所有SQL Server登录名。 Windows 登录名会自动保留相同的 SID,因为 Windows GUID 是全局唯一的,即使使用多个域也是如此。

有关如何在不同服务器上使用相同的 SID 创建 SQL 登录名的详细信息,请参阅如何在 SQL Server 中禁用来宾时授予对备用数据库上的 SQL 登录名的访问权限

执行角色更改时的安全配置

日志传送的角色更改过程涉及将辅助服务器提升为主服务器。 可以在主服务器联机或不联机的情况下执行此操作。 在角色更改过程中,最多会执行四个存储过程。 其中一个存储过程 sp_resolve_logins 有助于更正驻留在备用数据库中的登录名的 SID 值,然后再将其用作主数据库。

作为此存储过程的一 .bcp 部分,前主服务器的表文件 syslogins 将加载到临时表中。 然后将此临时表中存在的每个登录名与 syslogins 辅助服务器的 MASTER 数据库中的表和 sysusers 辅助数据库的表进行比较。 对于临时表中每个登录名与辅助数据库表中的登录名 syslogins 相同且 SID sysusers 相同的登录名,SID 在辅助数据库) (更正,方法是使用 sp_change_users_login 来匹配表中的 syslogins 登录名。

使用此存储过程的安全配置需要满足以下条件:

  • 必须在辅助服务器上创建 SQL 登录名。 为此,请使用SQL Server联机丛书主题:如何设置和执行日志传送角色更改中所述的传输登录名 DTS 任务。

  • 应从主服务器提供 .bcp 表的文件 syslogins 。 此文件必须是最新的,因为过期的文件可能会导致 sp_resolve_logins 无法修复登录名。

应满足以下三个条件,然后 sp_resolve_logins 才能真正修复辅助数据库中的登录名:

  1. .bcp 文件中的 syslogins 登录名必须与主服务器表中 syslogins 的名称匹配。

  2. SID 值必须在文件 .bcp 登录名与辅助数据库中的 sysusers 表之间匹配。

  3. 辅助数据库中的 SID 值必须与辅助服务器上的 MASTER 数据库中表中 syslogins 的 SID 值不同。

如果按照 Q303722 中所述创建SQL Server登录名,则无需运行此存储过程,因为辅助服务器) 上 MASTER 数据库中的表 (中的所有登录名都已显示相同的 SID 值syslogins,而sysusers辅助数据库) 中的表 (。

常见问题解答

  • 问:日志传送是否会自动将与安全相关的更改传播到辅助服务器?

    答:适用。 由于对系统表的所有更改都是记录的操作,因此这些更改会传播到辅助服务器 (或自动) 服务器。

  • 问:是否可以在辅助服务器上具有相同 SID 的两个登录名? 我需要此项是因为使用同一台SQL Server计算机来维护来自多个服务器的多个备用数据库。

    答:否。 SQL Server安全模型不允许具有相同 SID 的两个登录名。 如果在对多个服务器使用日志传送时 SID 发生冲突,则更正此问题的唯一方法是删除主服务器上的冲突登录名,然后使用辅助服务器上不存在的 SID 创建该登录名。