これは私が恐れている長い話になるでしょう;
いくつかのテキストファイルをSQLデータベースに読み込む必要があります。このデータベースは、SQL 2008 R2 x64データベースサーバー上にあります。リンクサーバーを使用したいので、調査の結果、Microsoft.ACE.OLEDB.12.0 x64プロバイダーをインストールする必要があることがわかりました。私は自分のローカルマシンでこれを行い、リンクサーバーを作成した後、テキストファイルの読み取りに問題が発生しました。
リンクサーバーのプロバイダーはMicrosoft.ACE.OLEDB.12.0を使用するように設定され、データソースは正しいフォルダーを指し、providerstringは "TEXT"に設定されましたが、接続をテストできませんでした。それはこのエラーを投げていました:
リンクサーバー "XXXXXXXXX"のOLE DBプロバイダー "Microsoft.ACE.OLEDB.12.0"のデータソースオブジェクトを初期化できません。OLE DBプロバイダー "Microsoft。リンクサーバー "XXXXXXX"のACE.OLEDB.12.0 "がメッセージ"不明なエラー "を返しました(Microsoft SQL Server、エラー:7303)
調査の結果、SQLサービスがNETWORKING SERVICEアカウントで実行されていることがわかりました。これをローカルアカウントに変更すると、すべて正常に動作しました。
---(注:プロバイダーの一部の設定も変更する必要があり、[インプロセスを許可する]がオンになっています。
しかし今、私はこのソリューションを顧客のネットワークに実装しようとしていますが、機能させることができません。また、SQL 2008 R2 x64 Dbサーバーであり、Microsoft.ACE.OLEDB.12.0プロバイダーがインストールされていますが、前述のエラーが発生します。そこで、SQLサービスの実行に使用するアカウントを尋ねました。これは、このサーバーのローカル管理者グループに属しているADアカウントであるため、私が見る限り、十分な権限がありました。テストしているユーザーは、Windows ADアカウントを使用してデータベースエンジンに接続されており、これも管理者グループに属しています。しかし、彼が接続をテストしようとすると、同じエラーがスローされます。
私が試したもう1つのことは、OPENROWSETを使用することです。これも不特定のエラーを発生させます。そして、はい、次のステートメントを使用して「アドホック分散クエリ」を設定しました。
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
だから、私はすべてがうまく機能している開発ボックスを手に入れました。しかし、テストサーバーにデプロイすると、これらの接続問題があります。実は、どうすればいいのか、もうチェックしなきゃ。私は今、数日間働いて探しています。誰か私が試すことができる他の提案がありますか?
リンクサーバーをセットアップするときは、ユーザーの資格情報を再利用するか、特定のアカウントを使用するか、匿名にするかを選択できます。同じマシンからテストし、SQL Serverがローカルアカウントとして実行されている場合、ログイン中に管理者権限を再利用できるため、SQL Serverは機能しました。
これをネットワークシナリオで機能させるには、物事が複雑になります。 ADを使用している場合は、AD(principalName)を使用して、SQL ServerマシンとMSAccessファイルをホストしているマシン間のKerberos信頼を構成する必要があります。これは通常、それを正しくするために少し手を加える必要があります。このTechNetの記事は長文ですが、多くの構成手順と提案が含まれています: http://support.Microsoft.com/kb/31972 。
また、ネットワークサービスアカウントを再び使用するようにサーバーを設定し直して、アクセス許可を付与できるようにする必要があります。他のマシンでは、SQL Serverは[domain]\[MachineName] $のような隠しアカウントを使用します。 MS Access DBがSQL Serverと同じマシン上にある場合でも、MSAccess DB(ファイル)に対する読み取り/書き込み権限(NTFS)をSQL Serverプロセスのアカウントとネットワークユーザーに付与する必要があります。
これは、マシン/ SQLサーバーにインストールされている正確なプロバイダーのケースである可能性があります。一部のプロバイダーはデフォルトでは使用できないため、インストールしていない場合は初期化できません。
これを確認するには、サーバー管理->リンクサーバー->プロバイダーでSQL管理スタジオを開き、リストされているかどうかを確認します。
そうでない場合は、プロバイダーをインストールするMicrosoft Accessデータベースエンジン(SQLサーバーのインストールに応じてx86またはx64)をインストールする必要があります。
クラスのセキュリティを構成する必要があります[〜#〜] msdainitialize [〜#〜]コンポーネントサービスのように Microsoft MSDNで説明 =
[〜#〜] msdainitialize [〜#〜]は、OLE DB。クラスはOLE DB接続文字列を解析し、接続文字列のプロパティ値に基づいてプロバイダーをロード/初期化できます。
MSDAINITILIAZEは、SQL Serverに接続しているユーザーによって開始されます。 Windows認証を使用してSQL Serverに接続する場合、プロバイダーはログインユーザーアカウントで初期化されます。ログインしたユーザーがSQLログインの場合、プロバイダーはSQL Serverサービスアカウントで初期化されます。使用するログインのタイプに基づいて、MSDAINITIALIZEの権限を適宜提供する必要があります。
それが私の同じ事件の理由でした。