Windows Server 2008 R2 x64 SP1、Sql Server 2008 x64 SP3、Access データベース エンジン x64 SP1
リンクサーバーがあります:
EXEC master.dbo.sp_addlinkedserver @server = N'dbf2', @srvproduct=N'dbf2', @provider=N'MSDASQL', @provstr=N'DRIVER={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};'
ローカル ディスクから dbf ファイルをクエリすると、すべて問題ありません。
select * from openquery(dbf2, 'select * from c:\\V4C8MA6.dbf') a
ただし、ネットワーク共有からクエリを実行する場合
select * from openquery(dbf2, 'select * from \\\\gefest\\upload\\V4C8MA6.dbf') a
エラーが発生しました:
Msg 7399, Level 16, State 1, Line 6
The OLE DB provider "MSDASQL" for linked server "dbf2" reported an error. The provider did not give any information about the error.
Msg 7350, Level 16, State 2, Line 6
Cannot get the column information from OLE DB provider "MSDASQL" for linked server "dbf2".
パスを記述するためにさまざまなバリエーションを試しました: []、""、``、\"\"、....ネットワーク共有アクセスですべて問題ありません。SQL サーバー アカウントにはアクセス権が必要です。しかし...
それを機能させる方法は?
2012 年 5 月 4 日に追加:
xp_cmdchell は、ディレクトリを完全に一覧表示します。
これは私が発見したものです: ファイルの場所を示す sprovstr を使用してリンクサーバーを作成しました:
@provstr=N'DRIVER={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};dbq=\\gefest\upload'
これは、sql server authを使用して sql サーバーに接続すると機能します。
これは、 dbqを使用したときに ProcMon が表示するものです。
日付と時刻: 2012 年 5 月 4 日 9:57:55 AM
イベント クラス: ファイル システム
操作: CreateFile
結果:成功 パス: \\gefest\upload\
TID
:
8588 期間: 0.0001988
必要なアクセス: 属性の読み取り
配置: 開く
オプション: Open Reparse Point
Attributes: n/a
ShareMode: Read、Write、Delete
AllocationSize: n/a
OpenResult: Opened
これは、クエリでパスを指定する場合です:
日付と時刻: 2012 年 5 月 4 日 9:58:53 AM
イベント クラス: ファイル システム
操作: CreateFile
結果: OBJECT PATH INVALID
パス: \\gefest\upload\
TID:
8588 期間: 0.0000819
目的の
アクセス: 属性の読み取り
処理: 開く
オプション: リパース ポイントを開く
属性:
なし 共有モード: 読み取り、書き込み、削除
AllocationSize:なし
SQL Server が最初のクエリで共有への必要なアクセスを受け取り、2 番目のクエリでは受け取らないのはなぜですか?
3 番目と 4 番目のバリアントは、Windows authを使用してサーバーに接続する場合です。
dbqを使用:
日付と時刻: 2012 年 5 月 4 日 10:02:54 AM
イベント クラス: ファイル システム
操作: CreateFile
結果:アクセスが拒否されました
パス: \\gefest\upload\
TID:
8588 期間: 0.0031837
必要な
アクセス: 属性の読み取り
配置:オプションを
開く
: Open For Backup、Open Reparse Point
属性:
なし ShareMode: 読み取り、書き込み、削除
AllocationSize:
なし 偽装: GAZ\kozlovai
クエリでパスを示す:
日時: 2012 年 5 月 4 日 10:02:20 AM
イベント クラス: ファイル システム
操作: CreateFile
結果: OBJECT PATH INVALID
パス: \\gefest\upload\
TID:
8588
期間: 0.0000378
必要な
アクセス: 属性の読み取り
処理: 開く
オプション: Open For Backup、Open Reparse Point
属性:
なし ShareMode: 読み取り、書き込み、削除
AllocationSize:
なし 偽装: GAZ\kozlovai
共有に接続するときに、SQL サーバーが偽装します。そして、このアカウント 'GAZ\kozlovai' は共有への完全なアクセス権を持っていますが、SQL サーバーはまだファイルを開くことができません...