SQLマネージャーStudioでは、別のSQLサーバーへのリンクサーバーを作成しました。私が作成したリンクサーバーの名前は "linkedserver"です。リンクサーバーは、Microsoft OLE DBプロバイダーを使用します。ただし、他のプロバイダーでも以下の問題が発生します。直接リンクされたサーバーの照会openqueryを使用したVS照会
リモートSQLサーバには、スキーマ[schema]にデータベース[db]とテーブル[table]があります。 [table]には[column]と[column2]という2つの列があります。
リモートユーザーは、リモートユーザーのSQLユーザーに[読み取り専用]と[列2]の[列]のみがあります。問題は、下の例のようなデータをクエリしようとすると、[column2]はクエリに表示されませんが、私は[column2]でアクセスできないというエラーが発生します。私の回避策は、代わりにオープンクエリを作成することですが、これは便利ではありません。
-- Fetch one column via the linked server - DOES NOT WORK
SELECT TOP 1 [column]
FROM [linkedserver].[db].[schema].[table]
最初の失敗したクエリのエラーメッセージは次のとおりです。OPENQUERYと回避策がある
Msg 2557, Level 16, State 7, Procedure sp_table_statistics2_rowset, Line 105
User 'user' does not have permission to run DBCC SHOW_STATISTICS for object '[db].[schema].[table]'.
Msg 230, Level 14, State 1, Procedure sp_table_statistics2_rowset, Line 105
The SELECT permission was denied on the column 'column2' of the object 'table', database 'db', schema 'schema'.
:
-- Fetch one column via the linked server through an openquery - WORKS
SELECT *
FROM OpenQuery (linkedserver
'SELECT TOP 1 [column]
FROM [db].[schema].[table]')
あなたはこれを克服する方法を知っていますか、なぜこれが行われます?私の前提は、最初のクエリが[テーブル]のすべての列をフェッチしようとし、SQLマネージャスタジオでフィルタを適用することです。私はそれの権利ですか?何とかこの問題を克服できますか?
お返事ありがとうございます。プロパティを見ると、リモートサーバーのバージョンは "11.0.6567.0"と表示されます。残念ながら、私はリンクサーバーを作成したSQLサーバーにSQLNCLI10プロバイダーをインストールする権利がありません。 SQLNCLI11プロバイダーのみがインストールされています。あなたのソリューションは有望ですが、私はそれを試すことができたらいいと思う。 – aragorn
SQL Server 2012 SP3のテーブルの1つの列に対するアクセス許可を持つユーザーと同じ状況を作成してエラーを再現しようとしました.2014年からのリンクを作成し、それ自体からループバックできませんでしたリンクされたサーバからの直接選択とopenqueryを使用して同じエラーを取得することはできませんが、そのユーザがターゲット2012でそのテーブルに対して直接sp_table_statistics2_rowsetを実行するとエラーが発生します。だから私はそれが重要なサーバーの正確なバージョンであるかどうかと私はそれを接続して検索すると、この項目を接続していると思っていた: – sepupic
https://connect.microsoft.com/SQLServer/feedback/details/796349/distributed-query-fails-on-tables部分アクセスを伴う – sepupic