【问题标题】:linked server OLE DB provider "SQLNCLI11" for linked server用于链接服务器的链接服务器 OLE DB 提供程序“SQLNCLI11”
【发布时间】:2016-12-13 12:31:46
【问题描述】:

您好,我有 2 个不同的 SQL Server 数据库。

它们通过链接服务器相互连接。链接服务器工作正常。

当我尝试时:

SELECT 
    * 
FROM 
    OPENQUERY
        ([192.168.1.170], 
        'SELECT MalCRM.dbo.ContractedNumber(1)')

我收到以下错误。我该如何解决?

链接服务器“192.168.1.170”的 OLE DB 提供程序“SQLNCLI11”返回消息“延迟准备无法完成。”。 消息 229,第 14 级,状态 5,第 1 行 对象“ContractedNumber”、数据库“MalCrm”、架构“dbo”的 EXECUTE 权限被拒绝。

【问题讨论】:

  • 尝试使用相同的登录名直接在链接服务器上运行查询SELECT MalCRM.dbo.ContractedNumber(1)。您几乎肯定会发现该帐户没有完整的所需权限集。
  • 对不起,我不确定我是否理解。你能更详细地解释一下吗? select 语句在目标服务器上也能正常工作。但是当我尝试通过数据库链接运行时,我不能。
  • 我怀疑您不能直接在 [192.168.1.170] 上运行查询。尽管链接已就位,但您在该服务器上没有必要的权限。通过 ssms 连接到 [192.168.1.170]。运行查询 (SELECT MalCRM.dbo.ContractedNumber(1))。如果您收到相同的错误消息,请要求 dba 修改您的权限。
  • 160 DwhCRM 170 MalCRM。选择在 160 上工作,但不在 170 上工作。如果您可以指示,我也有 sys 权限,我可以给自己。
  • 链接用什么账号连接170?该帐户没有函数ContractedNumber的执行权限。

标签: sql-server tsql dynamic-sql openquery


【解决方案1】:

梅哈巴·伯汉,

我尝试了以下完美的 sql 查询

SELECT * FROM OPENQUERY([myInstance], 'SELECT AdventureWorks.dbo.test(3)')

您是否检查了数据库功能上的凭据是否有效? 这似乎是一个权限问题。 请检查SQL Server linked server 安全上下文并检查它是否对数据库对象具有执行权限。 在引用的教程中,在安全上下文中,您可以将源数据库用户映射到链接服务器上的其他用户。 可能是这个问题

【讨论】:

  • Merhaba Alper,我可以从选择中检索结果,但只有当我转到链接服务器属性-安全并选择模拟时。如果它不是模仿我写的错误。有什么解决办法吗?
  • 那么为什么不将链接服务器配置更改为选择“模拟”。这将映射两台服务器上的 SQL 登录
  • 我为任何开始无法连接到数据库的用户选择了这个=)我现在不知道该怎么办?
  • 如果您将源数据库中的登录用户映射到目标中的其他用户,则查询将使用第二个登录凭据。如果您没有将其分配给其他用户,那么您现有的登录名应该存在于目标实例中。您可以运行 sql 分析器并跟踪查询以详细查看错误。您可能需要更改您正在尝试的 sp 或用户定义函数的执行权限
猜你喜欢
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 2014-07-23
相关资源
最近更新 更多