Sql server 链接服务器OLE DB提供程序“;SQLNCLI11";用于链接服务器

Sql server 链接服务器OLE DB提供程序“;SQLNCLI11";用于链接服务器,sql-server,tsql,dynamic-sql,openquery,Sql Server,Tsql,Dynamic Sql,Openquery,你好,我有两个不同的SQL Server数据库 它们通过链接服务器相互连接。链接服务器工作正常 当我尝试时: SELECT * FROM OPENQUERY ([192.168.1.170], 'SELECT MalCRM.dbo.ContractedNumber(1)') 我得到下面的错误。我怎么能修好它 链接服务器“192.168.1.170”的OLE DB提供程序“SQLNCLI11”返回消息“延迟准备无法完成”。 Msg 229,

你好,我有两个不同的SQL Server数据库

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

当我尝试时:

SELECT 
    * 
FROM 
    OPENQUERY
        ([192.168.1.170], 
        'SELECT MalCRM.dbo.ContractedNumber(1)')
我得到下面的错误。我怎么能修好它

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

梅哈巴·伯汉

我尝试了以下sql查询,效果非常好

SELECT * FROM OPENQUERY([myInstance], 'SELECT AdventureWorks.dbo.test(3)')
您是否检查了数据库函数上的凭据是否有效? 这似乎是一个许可问题。 请检查安全上下文,并检查它是否对数据库对象具有执行权限。 在参考的教程中,在安全上下文中,您可以将源数据库用户映射到链接服务器上的其他用户。 这可能就是问题所在

Merhaba Berhan

我尝试了以下sql查询,效果非常好

SELECT * FROM OPENQUERY([myInstance], 'SELECT AdventureWorks.dbo.test(3)')
您是否检查了数据库函数上的凭据是否有效? 这似乎是一个许可问题。 请检查安全上下文,并检查它是否对数据库对象具有执行权限。 在参考的教程中,在安全上下文中,您可以将源数据库用户映射到链接服务器上的其他用户。

这可能就是问题所在

尝试直接在链接服务器上运行查询
选择MalCRM.dbo.ContractedNumber(1)
,使用相同的登录名。您几乎肯定会发现该帐户没有所需的全部权限。对不起,我不确定我是否也理解了。你能详细解释一下吗?select语句也适用于目标服务器。但是当我尝试通过db link运行时,我不能。我怀疑您不能直接在[192.168.1.170]上运行查询。虽然链接已就位,但您在该服务器上没有必要的权限。通过ssms连接到[192.168.1.170]。运行查询(
选择MalCRM.dbo.ContractedNumber(1)
)。如果您收到相同的错误消息,请要求dba修改您的权限。160 DwhCRM 170 MalCRM。选择在160上工作,但不在170上工作。我有sys的许可,如果你可以指示,我可以给自己这个。链接使用什么帐户连接到170?该帐户没有对函数
ContractedNumber
的执行权限。请尝试使用相同的登录名在链接服务器上直接运行查询
选择MalCRM.dbo.ContractedNumber(1)
。您几乎肯定会发现该帐户没有所需的全部权限。对不起,我不确定我是否也理解了。你能详细解释一下吗?select语句也适用于目标服务器。但是当我尝试通过db link运行时,我不能。我怀疑您不能直接在[192.168.1.170]上运行查询。虽然链接已就位,但您在该服务器上没有必要的权限。通过ssms连接到[192.168.1.170]。运行查询(
选择MalCRM.dbo.ContractedNumber(1)
)。如果您收到相同的错误消息,请要求dba修改您的权限。160 DwhCRM 170 MalCRM。选择在160上工作,但不在170上工作。我有sys的许可,如果你可以指示,我可以给自己这个。链接使用什么帐户连接到170?该帐户对函数
ContractedNumber
没有执行权限。Merhaba Alper,我可以从select中检索结果,但只有在转到linkedserver属性安全性并选择impersonate时。如果它不是模拟的,我会在写的时候出错。有什么解决方案吗?那么为什么不将链接服务器配置更改为选中“模拟”。这将映射两台服务器上的SQL登录。在任何用户开始无法连接到数据库=)后,我为他们选择了此选项。我不知道现在该怎么办?如果将源数据库中的登录用户映射到目标中的其他用户,则查询将使用第二个登录的凭据。如果未将其分配给其他用户,则目标实例中应存在现有登录名。您可以运行sql探查器并跟踪查询以查看错误的详细信息。您可能需要更改正在尝试的sp或用户定义函数的执行权限Merhaba Alper,我可以从select中检索结果,但只有在转到linkedserver properties security并选择impersonate时。如果它不是模拟的,我会在写的时候出错。有什么解决方案吗?那么为什么不将链接服务器配置更改为选中“模拟”。这将映射两台服务器上的SQL登录。在任何用户开始无法连接到数据库=)后,我为他们选择了此选项。我不知道现在该怎么办?如果将源数据库中的登录用户映射到目标中的其他用户,则查询将使用第二个登录的凭据。如果未将其分配给其他用户,则目标实例中应存在现有登录名。您可以运行sql探查器并跟踪查询以查看错误的详细信息。您可能需要更改正在尝试的sp或用户定义函数的执行权限