アドホック アクセスが拒否されました。

SQLServer2005で、OPENROWSET関数を使用して、SQLServerからOracleデータベースにアドホッククエリを実行時に、下記エラーが発生。

7415 - OLE DB プロバイダ '%ls' へのアドホック アクセスが拒否されました。リンク サーバーを使用してこのプロバイダにアクセスしてください。

ちなみにこの時の状況としてはこんな感じ

  • 認証モードはSQL Server認証
  • ログインユーザはsysadmin権限などといった強いロール・権限はなし。(せいぜいdb_ownerロールぐらい)

MSDNにあたってみると、必要な要件は2つのようだ

  1. Ad Hoc Distributed Queries 詳細構成オプションが有効
  2. DisallowAdhocAccess レジストリ オプションが明示的に 0 に設定

このうち、2.については構成マネージャやsp_configureから、OLE DB プロバイダへのアドホック アクセスを有効にしておく。

EXEC sp_configure 'Ad Hoc Distributed Queries', '1'
GO
RECONFIGURE
GO

もう一つ、1.についてはSQLServerインスタンスのレジストリを編集
SP2 以後 OPENROWSET でアドホックなアクセス不可
→MSDNでは見つけられず。

レジストリ編集後はインスタンスの再起動が必要。

いずれにしても2は絶対に必要な設定内容。
一方の1については代替方法もあるようだ。
それは、ログインアカウントにsysadminサーバロールを付与してあればレジストエントリは必要なし、というもの。

レジストリエントリをいじること、プラス、インスタンスの再起動がヘビーだという場合の代替として。おそらくワンショット単発で実行する場合か。