ようこそ!
答えてねっと for Businessは、
マイクロソフトが運営する
ビジネスで使うパソコンや
ITに関するQ&Aサイトです。

質問

Active Directory 環境下で自社製ソフトの時刻をずらしたテストを行うには?

製品名:デスクトップ OS、サーバー OS/Windows Server 2003

現象:したい/その他

この質問は解決で締め切られています

たとえばとあるスケジューラソフトを開発していて、"今日から一ヶ月後にアラームを鳴らす" といった機能を実装し、さて動作確認をしたいとします。

ところでこの開発環境は Active Directory を導入した社内LAN環境下にあり、加えて、このスケジューラソフトは開発マシンとは別の共用サーバーにある SQL Server 2005 Workgourp Edition に Windows 認証で接続してスケジュールのデータを読み書きしています。

このときに、さて、開発マシンのシステム日付を1ヶ月先に進めて、スケジューラソフトがアラームを鳴らすかどうか見てみようとすると、何が起こるかというと、SQL Server に接続できない例外が発生してしまいます。

どういうことかというと、Active Directory 環境下では kerberos 認証が使われると言うことで、クライアントPCのシステム日付が5分以上ずれていると認証されない、ということです。

SQL認証使えば...などのご指摘もあるかと思いますが、ここには書き切れていない諸般の事情により、どうしてもクライアントPCの時刻を詐称 & しかし SQL Srever への Win認証は通過したい、という要件があるものとお察し頂ければと思います。

はてさて、同様の難題(?)に遭遇された方は他にも多々いらっしゃると思うのですが、いかがでしょうか?
また、その際、どのように解決されたのでしょうか?
開発者一人一人につき、"開発向け専用のローカルな" 小さなActive Directory 環境をすべて再現して、一斉にシステム日付を変更するという力業でやるしかないのでしょうか? (しかし、いくら今時代は仮想化できるとはいえ機材とOS、SQL Server の各ライセンス購入にかける予算が... MSDN Subscription で一人あたり15万円ほどずつ追加出費ですかね...まぁ、必要な経費だとしても、やりたいことに対してコストパフォーマンスが悪いような気も...)
ご教示頂ければ幸いです。

補足:サーバーOSはドメインコントローラやSQL Server を搭載しているものも含め一切が Win2003 Std SP2、開発マシンは WinXP Pro SP3 です。

質問者からのコメント

  • 投稿日時:2009/05/20 09:16

まだ追試できていないのですが、じゅうぶんイケる可能性も高いと判断し、また、それでなくとも大変示唆に富んだヒントをご教示頂けましたので、これにて「解決」にて締め切ります。

ありがとうございました。

回答1 (この回答は質問に対する回答です)

  • 投稿ID:A2009006130
  • 投稿日時:2009/05/07 05:24

回答2 (この回答は回答1に対する回答です)

  • 投稿ID:A2009006131
  • 投稿日時:2009/05/07 09:20

ご回答ありがとうございます。

> 質問の趣旨がよく理解できていないのですが

そうでしたね、ちょっとわかりにくい投稿だったかもしれません。

実は、ご教示頂いた"時刻同期をどうするか?" ということではなく、"AD環境では時刻が同期していないといけないところ、ソフトウェア開発中の動作確認のために、あえてクライアントPC時刻を未来の日付等に変更して動作確認したいが、どうするのがベストプラクティスか?" というのが主旨でございました。

特に、SQL Server との Windows 認証による接続を行う場合、時刻がずれていると認証してもらえないという問題があるが、これを何か工夫で回避できるものなのか、というのが焦点になります。あくまで、開発目的、動作確認目的であるわけですが。

なお、社内PCの時刻同期の体制は外部NTPとの同期を含め万全にできております。
実は話を端折るために書きませんでしたが、クライアントPCのシステム日付をずらす際には、W32Time サービスを一時停止させて、あえて時刻同期させないようにしたりしております。

  •  

回答3 (この回答は回答2に対する回答です)

  • 投稿ID:A2009006140
  • 投稿日時:2009/05/07 11:08

AD環境では時刻が同期していないとkerberos 認証されないということであれば、検証クライアントはワークグループ環境か、スタンドアロンで検証するしかないと思います。自分は外部NTPとの時刻同期の検証はしたことがないので、したのページなどを読んでみてください。

http://www.atmarkit.co.jp/fwin2k/operation/winntp01/winntp01_01.htmlマイクロソフト以外のサイトへ移動する
http://www.atmarkit.co.jp/fwin2k/win2ktips/050nettime/nettime.htmlマイクロソフト以外のサイトへ移動する

  •  

回答4 (この回答は質問に対する回答です)

  • 投稿ID:A2009006251
  • 投稿日時:2009/05/09 01:14
  • 最も役に立った投稿として評価されました

## 試せる環境もないので書くべきかどうか迷ってたのですが
## 他に回答も付かないようですし、一応参考程度にしてください。

SQL ServerがドメインAにあるとして、
別にドメインBを立てます。(別のフォレストにします。注参照)
ドメインBはドメインAを一方的に信頼します。
クライアントPCをドメインBに接続すると
ドメインAのユーザーXでログインできますので、
ユーザーXでログインして、
SQL ServerにWindows認証してみてはどうでしょうか?
なお、ドメインBのDCとクライアントPCの時刻は同期させます。
(テストさせたい時刻)
ドメインAのDCとSQL Serverの時刻は同期させます。
(今の時刻)

クライアント⇒(kerberos)⇒ドメインB⇒(NTLM)⇒ドメインA⇒(kerberos)⇒SQL Server
となってくれるとうまくいくかもしれないと思うのですが、
自信はまったくありません。
(試して見れたらいいんですが、そんな環境もないので。
・・・そちらも簡単に試せる環境が作れないなら無視しといてください。)

注:下記を読むと異なるフォレスト間ではKerberosの認証が推移しない
らしい。(ただし、Win2000ドメインの話なんで、そちらのドメインがどうなっているかによってはうまくいかないかもしれません。)
http://www.itmedia.co.jp/help/howto/win/win2000/0007trust/01/16.htmlマイクロソフト以外のサイトへ移動する

ちなみに、クライアントPCにSQL Server 2005 Expressが入っていて
クライアントPCはドメインBに入っていてドメインBはドメインAを
一方的に信頼しています。
で、ドメインAのXユーザーでログインして
クライアントPCの日付を1ヶ月後にして、
SQL Server Management StudioでWindows認証すると
問題なくつながります。
・・・クライアントPCにSQL Server 2005 Expressを入れてそこと
つないで試してみるのが安価にできるのかなあと思いますが、
そちらの思われているようなテストにならないのかもしれません。
注:この環境ではドメインAと別フォレストのドメインBで5分以上
時間差がありますが問題なくつながってます。
(信頼関係にkerberosは使われていない模様)

  •  

回答5 (この回答は回答4に対する回答です)

  • 投稿ID:A2009006301
  • 投稿日時:2009/05/10 21:28

なるほど、別ドメインを立てて、信頼関係を結ぶわけですね。ドメイン間ではNTLM認証で推移すると。
NTLM認証を介在させることにより、時刻同期を必須でなくするところがポイントですね。

まだ実際に検証できていませんが、論理的には上手くいくと思われます。
これから実際に取り組んでみたいと思います(TechNet Plus Direct 会員なのでこの手の実験・検証は可能)。

それでもなお、開発者1人ごとに別ドメインをひとつずつ独立して立てる必要があるので、OS追加購入費用が少々かさみそうですが、共用の SQL Server 2005 Workgroup を省けるだけでもよしとすべきようです。

あるいは、別ドメインを作るのに、Linux + Samba ベースで WinNT 4.0 相当のPDC を立ててこれと信頼関係を結べば、もしかしたらそれでも上手くいくかもしれませんね。
要件的に問題なければ、この方法ならば追加費用なく実現できそうです。

大変重要な手法・ヒントを示唆頂き、ありがとうございます。
お陰様でスマートな解決策にたどり着けそうな気がしてきました。

  •