我在 ServerA (SQL Server 2019) 上创建了一个存储过程,它在本地表中插入多行。
当我从 ServerB (SQL Server 2012) 使用 OPENQUERY 调用存储过程时,该过程运行但未插入行。
使用 OPENQUERY 从 ServerB 执行相同的插入会返回错误 7357(实际的错误消息是法语,表示 OLE DB 提供程序“SQLNCLI11”报告该对象没有列或用户无权访问该对象)。
我在 ServerB 上使用带有 SQL 身份验证的链接服务器。ServerA 上禁用了 RPC,因此使用 OPENQUERY。
如果我使用相同的语句使用与链接服务器相同的凭据直接在 ServerA 上的 SSMS 会话中使用 OPENQUERY 进行插入,则它可以工作 - 在开始测试之前,我已在相关表上向该用户授予 INSERT 权限。
我已经从链接服务器对同一个表执行更新了好几个月,没有出现任何问题。
事实上,在 ServerB 上使用由 4 部分组成的表名称进行 INSERT 是可行的。
我需要额外的权限才能远程执行插入吗?
“ServerA 上禁用了 RPC”。
RPC 和 RPC OUT 是链接服务器定义上的设置,而不是目标服务器上的设置。
因此,只需在链接服务器定义上启用 RPC OUT 并直接执行存储过程或使用