トップ回答者
SQL Server 2008 R2のリンクサーバーについて

質問
-
お世話になります。
新しいSQLサーバーに移行してリンクサーバーが接続できずに困っています。
状況は
サーバー1→リンクサーバー→aaa-sv¥bbb¥¥ACCESS.mdb OK
サーバー2→リンクサーバー→aaa-sv¥bbb¥ACCESS.mdb NG
旧サーバー;OS:Windows 2000 server,SQL SERVER 2000 32bit = 仮にサーバー1とします。
このサーバー1からリンクサーバーで別のPCサーバーのbbbというフォルダのACCESS.mdb に接続しています。=サーバー名は仮にaaa-svとします。
プロバイダはMicrosoft.Jet.OLEDB.4.0、datasrcに ¥¥aaa-sv¥bbb¥ACCESS.mdb
この状態でリンクサーバーとして接続できていたのですが、新サーバーではエラーがあり接続できません。
新サーバー;OS:Windows 2008 server,SQL SERVER 2008 R2 64bit = 仮にサーバー2とします。
プロバイダはMicrosoft.ACE.OLEDB.12.0(64bit版) datasrcに¥¥aaa-sv¥bbb¥ACCESS.mdb とすると
データソースを初期化できないというエラー: 7303が発生してうまくいきません。
mdbファイルを仮にサーバー2のドライブ上にコピーしてリンクすると接続でき、テーブル展開できます。SQLServer2008R2では別ハードのサーバーにあるmdbファイルはリンクできないのでしょうか?
OSのセキュリティの問題でしょうか?
どうかよろしくお願いいたします。
- 編集済み SQL-loser 2015年3月16日 4:18
回答
-
こんにちは。
私も、2003Server+SQL2005からの移行準備の際に、同じ問題にぶつかりました。
結局、移行先が2012R2+SQL2014になりましたので、若干異なる部分がありますが参考になれば幸いです。jzkeyさんのご指摘通り、実行アカウントが仮想アカウントなので、リンクするファイルがあるマシンにアクセスができません。
私もこれが理由と思い、下記の手順でテストしたところうまくいきました。SQLサーバーの実行アカウントをローカルアカウントにして(私のテスト環境では2台のサーバーともドメインではなくスタンドアロンです。)、リンクするファイルがあるマシンに同じID/パスワードを持つアカウントを作成し、フォルダに権限を与えました。
プロバイダがインストールされていなかったので、Access2013 Runtime(x64)をインストールしました。
※ Access Database Engine 2010は、サーバーには不可と書かれていましたので、ランタイムにしました。ランタイムはサーバーにインストールしてもOKでしたので。そしてこれをインストールしたら、ACEはVer12.0と15.0の二つが入りました。
どう違うのかまでは確認していません。これでLinked Serverを作成したところ、問題なく参照できました。
ご参考まで。
- 回答としてマーク 星 睦美 2015年3月31日 4:47
-
その後進展がありましたのでご報告させていただきます。
結論から申しますとリンクサーバー接続できました。
「サービスアカウントの新機能」 というサイトを見つけて サーバー2にドメインコントローラをインストールしアクティブディレクトリとしました。
仮想アカウントであってもドメイン配下であればネットワークアクセスできるようです。
SQLサービスアカウントを実アカウントに変更してやってみるというのはできていませんが、本来OSのバージョンとSQLサーバーのセットアップ時にこの辺を分かったうえで作業を進めるということが分かり、大変勉強になりました。
SIMOZさま、jzkeyさま ありがとうございました。大変参考になりました。- 回答としてマーク 星 睦美 2015年3月31日 4:46
すべての返信
-
こんにちは。
私も、2003Server+SQL2005からの移行準備の際に、同じ問題にぶつかりました。
結局、移行先が2012R2+SQL2014になりましたので、若干異なる部分がありますが参考になれば幸いです。jzkeyさんのご指摘通り、実行アカウントが仮想アカウントなので、リンクするファイルがあるマシンにアクセスができません。
私もこれが理由と思い、下記の手順でテストしたところうまくいきました。SQLサーバーの実行アカウントをローカルアカウントにして(私のテスト環境では2台のサーバーともドメインではなくスタンドアロンです。)、リンクするファイルがあるマシンに同じID/パスワードを持つアカウントを作成し、フォルダに権限を与えました。
プロバイダがインストールされていなかったので、Access2013 Runtime(x64)をインストールしました。
※ Access Database Engine 2010は、サーバーには不可と書かれていましたので、ランタイムにしました。ランタイムはサーバーにインストールしてもOKでしたので。そしてこれをインストールしたら、ACEはVer12.0と15.0の二つが入りました。
どう違うのかまでは確認していません。これでLinked Serverを作成したところ、問題なく参照できました。
ご参考まで。
- 回答としてマーク 星 睦美 2015年3月31日 4:47
-
SIMOZさま
jzkeyさま
お二方ともにありがとうございます。なるほど仮想アカウントですか。早速やってみたところ、今度は今までのエラー+認証エラーがでました。
SQLサーバーにローカルアカウントを作成し、同時にリンク先にも同じID/パスワードのアカウントを作成してフォルダ権限を与えました。
プロバイダもAccess2010ランタイム×64に変更して設定しましたが結果としては認証できなく一歩前の段階になったような形です。
リンク先のサーバーにはguestアカウントが有効になっていまして目的のファイルのあるフォルダはいわば公開されている状態ですので
特別アクセス権限を与えなくてもアクセスできるものと考えておりました。
その他、Management Studioでリンクサーバーのセキュリティの項目を先ほどのID/パスワードにも変えて見ましたが結果は同じでした。
でもみなさんの話だと設定やアカウント権限の問題次第でできるはずなので、頑張ってみます。
また何かご教授いただければ幸いです。
-
>> Management Studioでリンクサーバーのセキュリティの項目を先ほどのID/パスワードにも変えて見ましたが
これは違いますよ。これはMS-Accessのログインの話です。通常は、admin/Nullです。MS-Accessで特別なことをしていなければ。
それと、そのサーバーに新しく作ったIDでログオンしてみて、Accessファイルが読めるかどうかを確認してみてください。
もうランタイムが入っているのですから、AccessのAutoExecマクロでテーブルを開くなどの設定をすれば、すぐに動作は確認できると思います。あとはこちらでも気になる点が1点ありますので、ちょっと確認してからコメント入れますね。
-
気になる点は、古いMDBファイルがACEで問題ないかという点でした。問題ありませんでした。
ちなみに、使ったコマンドは次の通りです(SQL2005のときとProvider/SRVProduct以外は同じ)
exec sp_addlinkedserver @server = N'Test_MDB',@provider = N'Microsoft.ACE.OLEDB.15.0', @srvproduct = N'OLE DB Provider for Ace', @datasrc = N'\\192.168.0.172\ftp2\BB20150318.dat'
exec sp_addlinkedsrvlogin @rmtsrvname = 'Test_MDB', @useself = false, @locallogin = 'sa', @rmtuser = 'admin', @rmtpassword = NULLで、次のコマンドでデータ一覧が返ってきました。
select * from Openquery(Test_MDB,'select * from Detail')---------------------------------------------------------------------
ところで・・・・
SQLサーバーサービスの実行アカウントは、新しく作ったIDに変更しましたよね?
それで他は問題なく動いていますよね? -
SIMOZ様わざわざ調査していただいてありがとうございます。遅くなり申し訳ありません。>>SQLサーバーサービスの実行アカウントは、新しく作ったIDに変更しましたよね?
これはSQL認証のユーザアカウントではなくでサービスそのもののアカウントのことですよね。これは3種類のサービスがそれぞれ別名でログオンされたままです(たぶんデフォルトインストールのまま)。変更していません。
質問ですがこのSQLサービスアカウントを構成マネージャーで変更しても問題ないでしょうか?問題というかSQLサーバーに多数あるデータべース群が今まで通り動作できれば問題ないのですが。
それとACCESSの方は新IDで読めたり読めなかったりしますのでこちらも何か設定があるようです。(排他処理かなにか?)
-
>> これはSQL認証のユーザアカウントではなくでサービスそのもののアカウントのことですよね
そのとおりです。デフォルトだと NT Service\MSSQL$SQLEXPRESS(Expressの場合)です。
このアカウントが”仮想アカウント”で、ユーザー一覧にも出てこないアカウントです。私はトラブルのが怖かったので、インストール時にすでに用意したアカウントを指定してインストールを行いました。
(インストール中にどのアカウントを使うか指定できますよね)
なので、まだ途中でアカウントを変更したことはありません。ですがちょっと調べてみたら・・・
SQL Server のサービス開始アカウントの変更 (SQL Server 構成マネージャー)
https://msdn.microsoft.com/ja-jp/library/ms345578.aspx
>> このトピック内の「サービス アカウントの変更に関するその他の注意点」を参照してください。
とありますが、記述が見つかりません。(原文でも見つかりませんでした)
Windows サービス アカウントと権限の構成
https://msdn.microsoft.com/ja-jp/library/ms143504.aspx
ここでは、SQL Server セットアップで付与される権限などがわかります。※この記事が使えるかと思います。
How can i change the sql server configuration to administrators account?(MSDN)
https://social.msdn.microsoft.com/Forums/ja-JP/cfe11e79-8702-43ec-a1dc-822c4b4ee72b/how-can-i-change-the-sql-server-configuration-to-administrators-account?forum=sqldatabaseengine
ここでは、必ずManagement Studioで変更しろと書き込みがあります。
ここに記載あるKB283811の日本語版<https://support.microsoft.com/ja-jp/kb/283811>をみると、”必要なすべてのアクセス許可と Windows ユーザー権利が自動的にその新しい起動アカウントに割り当てられるため、ユーザーは何も行う必要はありません。”と書かれています。テスト環境をお持ちですよね?一度試されてはいかがでしょうか?
----------------------------------------------------------------------------
Accessの方は、普段そのMDBをワークグループで使用していますか?
以前、Linked Serverについて調べていた際、ワークグループの情報をレジストリに書き込むという方法を見つけましたが、うまくいかず、結局ローカルにコピーして使っていました。
また、別サーバーのファイルもLinkしていますが、それは私の場合は他に誰もアクセスしないものです。http://stackoverflow.com/questions/564295/how-to-specify-ms-access-workgroup-file-in-sql-server-linked-server
この書き込みでは、ODBCドライバを使って、そこでワークグループ設定をする旨の書き込みがありますね。
ただ、私は試していません。ワークグループを使っていない場合は、SQL Serverがアクセスしている際にほかの誰かがアクセスしているかなども確認されるとよいと思います。
参考になるとよいのですが。
-
>>私はトラブルのが怖かったので、インストール時にすでに用意したアカウントを指定してインストールを行いました。
(インストール中にどのアカウントを使うか指定できますよね)なので、まだ途中でアカウントを変更したことはありません。ですがちょっと調べてみたら・・・
私もインストール後のアカウント変更を探してみたのですが、SEM 、SSCM、またはレジストリ対応でのやり方はありましたがそれによる影響、変更後にどう変わる可能性があるかの記述を見つけることができませんでした。>>テスト環境をお持ちですよね?一度試されてはいかがでしょうか?
テスト環境あればベストなのですが・・・。よくある話でサーバー老朽化による更新ということで更新やったはいいがSQLサーバーに関しては一部動いていないということで私に話が来たという状態です。その更新した方がいればいいのですが現在いない状態ですので手探りの状態でやっております。>>Accessの方は、普段そのMDBをワークグループで使用していますか?
いいえ、使っていません。そもそも購入品のアプリの一部で、その中のあるテーブルを利用するためにリンクしようとしています。人がそのACCESSファイルを使用するわけではなく、そのアプリの中で使われているようです。その他私の方で試したのは2008サーバーでシステムDSNにMicrosoft Access Driver (*.mdb,*.accdb) を追加登録をしてみましたがエラーの状況に変わりはありませんでした。
色々KB情報等も含めて教えていただき感謝しています。引き続きSIMOZさまの情報を参考にTRYしてみます。 -
その後進展がありましたのでご報告させていただきます。
結論から申しますとリンクサーバー接続できました。
「サービスアカウントの新機能」 というサイトを見つけて サーバー2にドメインコントローラをインストールしアクティブディレクトリとしました。
仮想アカウントであってもドメイン配下であればネットワークアクセスできるようです。
SQLサービスアカウントを実アカウントに変更してやってみるというのはできていませんが、本来OSのバージョンとSQLサーバーのセットアップ時にこの辺を分かったうえで作業を進めるということが分かり、大変勉強になりました。
SIMOZさま、jzkeyさま ありがとうございました。大変参考になりました。- 回答としてマーク 星 睦美 2015年3月31日 4:46