这个错误似乎很容易解释,但我不知道如何纠正它。我正在尝试将一组数据库从一个虚拟服务器上的 SQL Server 2012 实例复制到另一个虚拟服务器上的 SQL Server 2019 实例。
当我启动“数据库复制实用程序”时,它要求我在源服务器和目标服务器上进行身份验证 - 我为此使用我的 Windows 登录身份验证(我在源服务器和目标服务器上都被指定为管理员)并且在这个阶段似乎没有问题。
我完成了向导的其余部分并提交了作业,但在提交作业时,它在最后一步失败 - “执行 SQL Server 代理作业”:
当我检查目标服务器上的事件日志时,我发现返回的错误是:
无法连接到 [源 SQL Server]。用户 [公司 AD 域] [目标 SQL Server 名称] 登录失败:
事件名称:OnError 消息:无法连接到服务器 cas-db\casdbserver。
StackTrace:
在 Microsoft.SqlServer.Management.Common.ConnectionManager.Connect()
在 Microsoft.SqlServer.Dts.Tasks.TransferObjectsTask.TransferObjectsTask.OpenConnection(服务器和服务器,ServerProperty serverProp)InnerException:
用户“[AD 域]\CAS-DB2$”登录失败。StackTrace:
在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 身份、SqlConnectionString connectionOptions、SqlCredential 凭证、对象提供程序信息、字符串 newPassword、SecureString newSecurePassword、布尔值 redirectedUserInstance、SqlConnectionString userConnectionOptions、SessionData reconnectSessionData、DbConnectionPool 池、字符串 accessToken、布尔值 applyTransientFaultHandling、SqlAuthenticationProviderManager sqlAuthProviderManager)
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项、DbConnectionPoolKey poolKey、对象 poolGroupProviderInfo、DbConnectionPool 池、DbConnection owningConnection、DbConnectionOptions userOptions)
在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool池、DbConnection owningObject、DbConnectionOptions 选项、DbConnectionPoolKey poolKey、DbConnectionOptions 用户选项)
在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject、DbConnectionOptions 用户选项、DbConnectionInternal oldConnection)
在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject、DbConnectionOptions 用户选项、DbConnectionInternal oldConnection)
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject、UInt32 waitForMultipleObjectsTimeout、Boolean allowCreate、Boolean onlyOneCheckConnection、DbConnectionOptions 用户选项、DbConnectionInternal& 连接)
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject、TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource
1 重试, DbConnectionOptions userOptions、DbConnectionInternal oldConnection、DbConnectionInternal& connection)
位于 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection、DbConnectionFactory connectionFactory、TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource
1 retry)
位于 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
位于 System.Data.SqlClient.SqlConnection.Open()
位于 Microsoft.SqlServer.Management.Common.ConnectionManager.InternalConnect(WindowsIdentity impersonatedIdentity)
位于 Microsoft.SqlServer.Management.Common.ConnectionManager.Connect()操作员:NT Service \ SQLSERVERAGENT
源名称:cas-db_casdbserver_cas-db2_Transfer 对象任务
源 ID:{AF36C077-A7C9-441C-BD2D-F4C41CCA5449}
执行 ID:{78B5D0E0-C15B-4225-92FF-4A68FAA86766}
开始时间:2024 年 11 月 2 日下午 3:20:31
结束时间:2024 年 11 月 2 日下午 3:20:31
数据代码:0
我不确定它从哪里获取该“用户”,因为该用户不存在 - 我也不知道它为什么要使用它,因为我在 SSMS 中运行数据库复制实用程序时为源服务器和目标服务器提供了我的 Active Directory 凭据。关于如何解决这个问题有什么建议吗?
提前致谢。
Tl;dr:尝试使用 SQL Server 数据库复制实用程序将数据库从 SQL Server 2012 实例复制到不同虚拟服务器上的 SQL Server 2019 实例。我原本希望它使用我在实用程序中提供的凭据进行身份验证并执行复制,但它却一直尝试使用似乎不存在的凭据连接到源数据库,导致复制失败。
[AD 域]\CAS-DB2$ 是服务器 CAS-DB2 的“机器帐户”。当使用“网络服务”帐户或任何服务虚拟帐户(代理使用此帐户)在 CAS-DB2 上运行的程序发出网络请求时,该请求将使用服务器的机器帐户。
因此,此作业似乎以 SQL 代理的身份运行,并且 SSIS 连接配置为使用 Windows 集成安全性。因此它将尝试以机器帐户的身份进行连接。这可以在 SSIS 包、SSIS 包的代理配置中更改,或者您可以只授予此帐户对其他 SQL Server 的必要权限,例如
在目标数据库中: