【发布时间】:2017-05-17 08:05:54
【问题描述】:
在 SQL Server Management Studio 中,我创建了一个链接到另一个 SQL Server 的服务器。我创建的链接服务器的名称是“linkedserver”。链接服务器使用 Microsoft OLE DB 提供程序。但是,下面描述的问题也会发生在其他提供商身上。
在远程 SQL 服务器中,模式 [schema] 中有一个数据库 [db] 和一个表 [table]。 [table] 有两列,[column] 和 [column2]。
我在远程 SQL 服务器中有一个 SQL 用户“用户”,它只有 [column] 的读取权限,但没有 [column2] 的读取权限。问题是,当我尝试像下面的示例那样查询数据时,我得到一个错误,我在 [column2] 中没有访问权限,尽管 [column2] 没有出现在查询中。我的解决方法是创建开放查询,但这并不方便。
-- Fetch one column via the linked server - DOES NOT WORK
SELECT TOP 1 [column]
FROM [linkedserver].[db].[schema].[table]
第一个失败查询的错误信息是:
消息 2557,级别 16,状态 7,过程 sp_table_statistics2_rowset,第 105 行
用户 'user' 没有权限为对象 '[db].[schema].[table]' 运行 DBCC SHOW_STATISTICS。消息 230,级别 14,状态 1,过程 sp_table_statistics2_rowset,第 105 行
对象“表”、数据库“db”、模式“schema”的列“column2”的 SELECT 权限被拒绝。
openquery 的解决方法是:
-- Fetch one column via the linked server through an openquery - WORKS
SELECT *
FROM OpenQuery (linkedserver
'SELECT TOP 1 [column]
FROM [db].[schema].[table]')
您知道如何克服这个问题,或者为什么这样做?我的假设是第一个查询尝试获取 [table] 的所有列并在 SQL Manager Studio 中应用过滤器。我是对的吗?我能以某种方式克服这个问题吗?
【问题讨论】:
标签: sql-server linked-server openquery