none
SQL Server 2008 R2のリンクサーバーについて RRS feed

  • 質問

  • お世話になります。

    新しい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
    2015年3月12日 5:17

回答

  •  単にSQLServerの実行アカウントではネットワークにアクセスできないか、
    そのファイルサーバaaa-svにアクセスする権限がないだけではないですか。

    jzkey

    • 回答としてマーク 星 睦美 2015年3月31日 4:47
    2015年3月16日 7:40
  • こんにちは。
    私も、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
    2015年3月18日 4:28
  • その後進展がありましたのでご報告させていただきます。

    結論から申しますとリンクサーバー接続できました。
    「サービスアカウントの新機能」 というサイトを見つけて サーバー2にドメインコントローラをインストールしアクティブディレクトリとしました。
    仮想アカウントであってもドメイン配下であればネットワークアクセスできるようです。
    SQLサービスアカウントを実アカウントに変更してやってみるというのはできていませんが、本来OSのバージョンとSQLサーバーのセットアップ時にこの辺を分かったうえで作業を進めるということが分かり、大変勉強になりました。

    SIMOZさま、jzkeyさま ありがとうございました。大変参考になりました。

    • 回答としてマーク 星 睦美 2015年3月31日 4:46
    2015年3月27日 0:20

すべての返信

  •  単にSQLServerの実行アカウントではネットワークにアクセスできないか、
    そのファイルサーバaaa-svにアクセスする権限がないだけではないですか。

    jzkey

    • 回答としてマーク 星 睦美 2015年3月31日 4:47
    2015年3月16日 7:40
  • こんにちは。
    私も、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
    2015年3月18日 4:28
  • SIMOZさま

    jzkeyさま

    お二方ともにありがとうございます。なるほど仮想アカウントですか。早速やってみたところ、今度は今までのエラー+認証エラーがでました。

    SQLサーバーにローカルアカウントを作成し、同時にリンク先にも同じID/パスワードのアカウントを作成してフォルダ権限を与えました。

    プロバイダもAccess2010ランタイム×64に変更して設定しましたが結果としては認証できなく一歩前の段階になったような形です。

    リンク先のサーバーにはguestアカウントが有効になっていまして目的のファイルのあるフォルダはいわば公開されている状態ですので

    特別アクセス権限を与えなくてもアクセスできるものと考えておりました。

    その他、Management Studioでリンクサーバーのセキュリティの項目を先ほどのID/パスワードにも変えて見ましたが結果は同じでした。

    でもみなさんの話だと設定やアカウント権限の問題次第でできるはずなので、頑張ってみます。

    また何かご教授いただければ幸いです。

    2015年3月18日 23:59
  • >> Management Studioでリンクサーバーのセキュリティの項目を先ほどのID/パスワードにも変えて見ましたが

    これは違いますよ。これはMS-Accessのログインの話です。通常は、admin/Nullです。MS-Accessで特別なことをしていなければ。

    それと、そのサーバーに新しく作ったIDでログオンしてみて、Accessファイルが読めるかどうかを確認してみてください。
    もうランタイムが入っているのですから、AccessのAutoExecマクロでテーブルを開くなどの設定をすれば、すぐに動作は確認できると思います。

    あとはこちらでも気になる点が1点ありますので、ちょっと確認してからコメント入れますね。

    2015年3月19日 0:24
  • 気になる点は、古い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に変更しましたよね?
    それで他は問題なく動いていますよね?

    2015年3月19日 0:52
  • SIMOZ様わざわざ調査していただいてありがとうございます。遅くなり申し訳ありません。>>SQLサーバーサービスの実行アカウントは、新しく作ったIDに変更しましたよね?
    これはSQL認証のユーザアカウントではなくでサービスそのもののアカウントのことですよね。これは3種類のサービスがそれぞれ別名でログオンされたままです(たぶんデフォルトインストールのまま)。変更していません。
    質問ですがこのSQLサービスアカウントを構成マネージャーで変更しても問題ないでしょうか?問題というかSQLサーバーに多数あるデータべース群が今まで通り動作できれば問題ないのですが。
    それとACCESSの方は新IDで読めたり読めなかったりしますのでこちらも何か設定があるようです。(排他処理かなにか?)

    2015年3月20日 0:21
  • >> これは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がアクセスしている際にほかの誰かがアクセスしているかなども確認されるとよいと思います。

    参考になるとよいのですが。

    2015年3月20日 3:17
  • >>私はトラブルのが怖かったので、インストール時にすでに用意したアカウントを指定してインストールを行いました。
    (インストール中にどのアカウントを使うか指定できますよね)なので、まだ途中でアカウントを変更したことはありません。ですがちょっと調べてみたら・・・
    私もインストール後のアカウント変更を探してみたのですが、SEM 、SSCM、またはレジストリ対応でのやり方はありましたがそれによる影響、変更後にどう変わる可能性があるかの記述を見つけることができませんでした。

    >>テスト環境をお持ちですよね?一度試されてはいかがでしょうか?
    テスト環境あればベストなのですが・・・。よくある話でサーバー老朽化による更新ということで更新やったはいいがSQLサーバーに関しては一部動いていないということで私に話が来たという状態です。その更新した方がいればいいのですが現在いない状態ですので手探りの状態でやっております。

    >>Accessの方は、普段そのMDBをワークグループで使用していますか?
    いいえ、使っていません。そもそも購入品のアプリの一部で、その中のあるテーブルを利用するためにリンクしようとしています。人がそのACCESSファイルを使用するわけではなく、そのアプリの中で使われているようです。

    その他私の方で試したのは2008サーバーでシステムDSNにMicrosoft Access Driver (*.mdb,*.accdb) を追加登録をしてみましたがエラーの状況に変わりはありませんでした。
    色々KB情報等も含めて教えていただき感謝しています。引き続きSIMOZさまの情報を参考にTRYしてみます。


    2015年3月20日 6:38
  • お疲れ様です。

    そうですよね、テスト環境があればやってみることができますよね。
    ご苦労お察しします。

    もう一度改めて、実行アカウント変更の事前準備や問題点について、このサイトで質問してみたらいかがでしょう?

    最後までおつきあいできずにすみません。

    2015年3月20日 7:27
  • いえいえ、本当に感謝しております。望みはありそうなので何かしら進展がありましたら報告させていただきます。
    ありがとうございます。
    2015年3月20日 8:22
  • その後進展がありましたのでご報告させていただきます。

    結論から申しますとリンクサーバー接続できました。
    「サービスアカウントの新機能」 というサイトを見つけて サーバー2にドメインコントローラをインストールしアクティブディレクトリとしました。
    仮想アカウントであってもドメイン配下であればネットワークアクセスできるようです。
    SQLサービスアカウントを実アカウントに変更してやってみるというのはできていませんが、本来OSのバージョンとSQLサーバーのセットアップ時にこの辺を分かったうえで作業を進めるということが分かり、大変勉強になりました。

    SIMOZさま、jzkeyさま ありがとうございました。大変参考になりました。

    • 回答としてマーク 星 睦美 2015年3月31日 4:46
    2015年3月27日 0:20