2016-11-29 9 views
0

これは私の問題です。ExcelでのT-SQL OPENROWSET SQLサーバー以外のマシンから実行した場合のみエラー

次のクエリを実行しています。最初は、ネットワーク上の場所にあるファイルにアクセスしたいので、本当に必要なものです。 2番目の問題は、問題の絞り込みに役立つことが示されています。

私が手にエラーが

Msg 7399, Level 16, State 1, Line 3 
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. The provider did not give any information about the error. 
Msg 7303, Level 16, State 1, Line 3 
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)". 

です。注:I以下の例ではmyXXXXで実際のファイル、サーバー名とフォルダ名を置き換えています。しかし、いくつかのコンテキストを取得するには、

1. Select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=\\myFileServer\MyFolder\myFileName.xlsx;HDR=YES', 'SELECT * FROM [mySheetName$]') 
2. Select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\MyFolder\myFileName.xlsx;HDR=YES', 'SELECT * FROM [mySheetName$]') 

まずすべての問題(スペースなし、特殊文字など)が発生します名には何もありません。クエリ2については、myFileName.xlsxを、SQL Server 2008インスタンスをホストするWindows ServerのC:ドライブにコピーしました。 SSMSは

Query 1: 
c. Run from SSMS connected to MySQLServer on SQl Server Box directly: Works 
d. Run from SSMS connected to MySQLServer on my Windows 10 PC: FAILS 

偶数のWindows Serverと私のローカルアカウントの作品としてSSMSを実行するにログインし、ドメイン管理者アカウントの私のドメインユーザーアカウントとして実行されているかどうか仕事上の

Query 2: Accessing the file that is stored locally on the SQL Server box: 
a. Run from SSMS connected to MySQLServer on SQl Server Box directly: Works 
b. Run from SSMS connected to MySQLServer on my Windows 10 PC: Works 

両方。

次のステップは、SQLホストボックスのイベントをチェックすることでした(BTW:SQLインスタンスがホストOS上で直接実行されていて、どこにでもVMが含まれていません) SQLホストボックスでprocmonを実行し、私はシナリオdを実行する。上記。

Process = sqlservr.exe 
Operation = CreateFile 
Path = \\myFileServer\MyFolder\myFileName.xlsx 
Result = ACCESS DENIED 
Details = Desired Access: Read Attributes, Disposition: Open, Options: Open For Backup, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, Impersonating: myDomainName\administrator 

ログの実行シナリオの確認c。上記

Process = sqlservr.exe 
Operation = CreateFile 
Path = \\myFileServer\MyFolder\myFileName.xlsx 
Result = SUCCESS 
Details = Desired Access: Read Attributes, Disposition: Open, Options: Open For Backup, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, Impersonating: myDomainName\administrator, OpenResult: Opened 

を与える私は、フォルダとファイルがSQLインスタンスが稼働することを完全なドメイン管理者とドメインユーザーアカウントからアクセスしても、サービスアカウントを持っていることをチェックしました。 私はまた、同じアカウントがSQLホストボックスのC:\ tempにアクセスできることを確認しました。

私は次に何を試していいのか分かりません。私はこのようなデータを同じサーバー上で何年もインポートしてきましたが、私はこれまでこれをOKにすることができたと確信していますが、見つかった既存のスクリプトはすべてローカルドライブを指していました。

もう1つ:フォルダにドライブをマップしようとしましたが、同じエラーが発生しました。

誰かが私を正しい方向に向けることができればと思っています。

読んでいただきありがとうございます!

答えて

1

発言セクション、OPENROWSET documentationで、リモートOLEDB上のいくつかのポイントを強調:

OPENROWSETをすることができDisallowAdhocAccessレジストリオプションが明示的に に設定されており、アドホック分散クエリ 詳細設定オプションが有効になっている場合のみ、OLE DBデータソースからリモートデータにアクセスするために使用されます。これらのオプションが に設定されていない場合、デフォルトの動作ではアドホックアクセスが許可されません。

リモートOLE DBデータソースにアクセスする、 信頼関係接続のログインIDは、自動的にクライアントが照会されているサーバーに接続されている 上のサーバーから委任されていません。 認証委任を設定する必要があります。

非ローカルファイルがこの制限を受けていると思われます。

+0

ありがとう、私は認証委任をチェックアウトし、何か成功したかどうかを知らせます。私は今朝までこれを行うことができないかもしれないが、私は返信する。 –

0

アクセスしようとしているスプレッドシートが開いている(自分自身か他の誰か)ときには、まったく同じエラーが表示されます。また、シートが時々見つけることがトリッキーである、メモリ内でのみ開くことができます

Msg 7399, Level 16, State 1, Line 54 
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. The provider did not give any information about the error. 
Msg 7303, Level 16, State 1, Line 54 
Cannot initialize the data source object of OLE DB provider  "Microsoft.ACE.OLEDB.12.0" for linked server "(null)". 
+0

ありがとうございます。私はかなりファイルが開いていないと確信していますが、私はチェックし、必要に応じてサーバーを再起動します! :) ちょうどチェックされ、ファイルは開いていませんが、とにかく感謝します。 –

+0

ここに運がありますか? – Amirreza

0

私は正しい方向に私を指摘したように、回答として宛先データの投稿をマークしました。

アドホッククエリを使用して認証委任を適用する方法が見つかりませんでした。これは、Excelファイルを指し示すリンクサーバーを追加するのに手間がかかりましたが、

最初に私は新しいSQLログイン 'ACEDriverLogin'を作成し、完全な権限(すべての役割を追加)を割り当てました。私はこれが必要ではないと思うので、それが壊れるまで役割を取り除き始めますが、今はそれが必要です。

私は元のクエリを変数に入れて、次のように新しいログインの資格情報を使って実行します。

DECLARE @cmdSQL nvarchar(max) 
set @cmdSQL = 'Select * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''Excel 12.0;Database=\\myFileServer\MyFolder\myFileName.xlsx;HDR=YES'', ''SELECT * FROM [mySheetName$]'')' 
exec(@cmdSQL) AS Login = 'ACEDriverLogin' 
関連する問題