<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SQL Server 開発チーム ブログ : Security</title><link>http://blogs.msdn.com/sqljapan/archive/tags/Security/default.aspx</link><description>Tags: Security</description><dc:language>ja</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>暗号化されたデータベースとログ配布、ミラーリング、クラスタリング</title><link>http://blogs.msdn.com/sqljapan/archive/2008/11/13/9065451.aspx</link><pubDate>Thu, 13 Nov 2008 08:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9065451</guid><dc:creator>osamuhir</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sqljapan/comments/9065451.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqljapan/commentrss.aspx?PostID=9065451</wfw:commentRss><description>&lt;P&gt;マイクロソフトの平山です。&lt;/P&gt;
&lt;P&gt;前回、前々回と続けてきた SQL Server 2008 からの新機能「透過的なデータ暗号化」を、他の機能の組み合わせて使うときの注意点を紹介するというテーマの最終回です。&lt;BR&gt;今回は「ログ配布」、「データベースミラーリング」、「フェールオーバークラスタリング」を取り上げてみます。&lt;/P&gt;
&lt;P&gt;それぞれ機能の基本的な動作を考えてみると、注意点や必要な事前準備を推測することができると思います。&lt;/P&gt;
&lt;P&gt;まず&lt;STRONG&gt;「ログ配布」&lt;/STRONG&gt;について考えてみます。&lt;BR&gt;通常の場合は初期同期のための作業として、プライマリデータベースをセカンダリサーバーに復元します。&lt;BR&gt;その際に、プライマリデータベースが暗号化されていると、セカンダリサーバーへの復元が失敗してしまいます。&lt;/P&gt;
&lt;P&gt;次に&lt;STRONG&gt;「データベースミラーリング」&lt;/STRONG&gt;の場合です。&lt;BR&gt;ミラーリングの設定の事前準備として、プリンシパルサーバーのデータベースをミラーサーバーに復元しておく必要があります。&lt;BR&gt;その際に、プリンシパルサーバーのデータベースが暗号化されていると(ログ配布の場合と同様に)、ミラーサーバへの復元時にエラーが発生してしまいます。&lt;/P&gt;
&lt;P&gt;さて、この問題を回避するには、どうすればよいでしょうか?&lt;BR&gt;その答えは&lt;A class="" href="http://blogs.msdn.com/sqljapan/archive/2008/10/22/9010764.aspx" mce_href="http://blogs.msdn.com/sqljapan/archive/2008/10/22/9010764.aspx"&gt;前々回のエントリ&lt;/A&gt;で紹介してあります。それぞれの場合の事前準備として、「ログ配布」の場合はセカンダリサーバーで、「データベースミラーリング」の場合はミラーサーバーで、サービスマスターキーの作成と証明書の復元を行っておく必要があります。&lt;BR&gt;それ以外は、通常の設定方法と同じです。&lt;/P&gt;
&lt;P&gt;最後に&lt;STRONG&gt;「フェールオーバークラスタリング」&lt;/STRONG&gt;について紹介します。&lt;BR&gt;フェールオーバークラスタリングが構成されている SQL Server インスタンスに暗号化されているデータベースが存在したとしても、特に事前準備はありません。&lt;BR&gt;クラスタリング環境では、複数のノードのうちのいづれかひとつのノードで SQL Server インスタンスが稼働することができます。しかし、実体としてのデータベース (ユーザデータベースおよびシステムデータベース) は複数のノード分存在するのではなく、全ノードで共有しています。&lt;BR&gt;そのため、サービスマスターキーや証明書も、どのノードで SQL Server インスタンスが起動しても同じものを使用していることになります。&lt;BR&gt;ということで、事前に特別な考慮をすることなくクラスタ環境で暗号化されたデータベースを使用することができます。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9065451" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqljapan/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://blogs.msdn.com/sqljapan/archive/tags/Security/default.aspx">Security</category></item><item><title>暗号化されたデータベースとレプリケーション</title><link>http://blogs.msdn.com/sqljapan/archive/2008/11/06/9047162.aspx</link><pubDate>Thu, 06 Nov 2008 09:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9047162</guid><dc:creator>osamuhir</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sqljapan/comments/9047162.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqljapan/commentrss.aspx?PostID=9047162</wfw:commentRss><description>&lt;P&gt;マイクロソフトの平山です。&lt;BR&gt;「透過的なデータ暗号化」を使用して暗号化されたデータベースの使い勝手を追求するシリーズの 2 回目の今回は、レプリケーションとの関連を紹介します。&lt;/P&gt;
&lt;P&gt;レプリケーションでパブリッシュしようとするデータベースが暗号化されていても、サブスクライバへレプリケートを行うときに必要となる情報は、暗号化されていない状態で distribution データベースに格納されています。&lt;BR&gt;つまり、レプリケート実行時にデータを復号化する必要がないため、サブスクライバ側でのサービスマスターキーの作成や証明書のリストアは必須ではありません。また、この動作はいずれレプリケーションのタイプにも当てはまります。&lt;/P&gt;
&lt;P&gt;といった前提のもとに、暗号化されたデータベースをレプリケートする場合の注意点は次のようになります。&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;注意点 1:&lt;BR&gt;&lt;/STRONG&gt;パブリッシャデータベースが暗号化されていたとしても、サブスクライバデータベースが自動的に暗号化されることはありません。必要に応じて個別に暗号化を行ってください。&lt;BR&gt;サブスクライバの暗号化の際には、必ずしもパブリッシャと同じ証明書を使用する必要はありません。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;注意点 2:&lt;/STRONG&gt;&lt;BR&gt;パブリッシャデータベースが暗号化されていても、スナップショットレプリケーションや他のタイプのレプリケーションの初期化時に使用されるデータベースの初期スナップショットは暗号化されていません。つまり、ネイティブ形式のファイルとして出力されていても、バイナリエディタなどで展開されてしまうと、ファイルの内容をのぞき見られてしまう危険性があります。&lt;BR&gt;そのため、スナップショットファイルを配置するフォルダの権限を適切に管理することで対処する必要があります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;注意点 3:&lt;BR&gt;&lt;/STRONG&gt;レプリケーションに関連するサイト間の通信を、より堅牢にするためにパブリッシャ、ディストリビュータ、サブスクライバ間の&lt;A class="" href="http://technet.microsoft.com/ja-jp/library/ms191192.aspx" mce_href="http://technet.microsoft.com/ja-jp/library/ms191192.aspx"&gt;伝送経路の暗号化&lt;/A&gt;を検討してください。&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9047162" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqljapan/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://blogs.msdn.com/sqljapan/archive/tags/Security/default.aspx">Security</category></item><item><title>暗号化されたデータベースを別インスタンスに復元する方法</title><link>http://blogs.msdn.com/sqljapan/archive/2008/10/22/9010764.aspx</link><pubDate>Wed, 22 Oct 2008 08:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9010764</guid><dc:creator>osamuhir</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sqljapan/comments/9010764.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqljapan/commentrss.aspx?PostID=9010764</wfw:commentRss><description>&lt;P&gt;マイクロソフトの平山です。これから数回にわたり「透過的なデータ暗号化」を使用して暗号化されたデータベースの使い勝手について紹介していきたいと思います。&amp;nbsp;&lt;/P&gt;
&lt;P&gt;SQL Server 2008 から導入された、「&lt;A class="" href="http://technet.microsoft.com/ja-jp/library/bb934049.aspx" mce_href="http://technet.microsoft.com/ja-jp/library/bb934049.aspx"&gt;透過的なデータ暗号化&lt;/A&gt;」のメリットのひとつとして、データベースの物理ファイルやバックアップが流出したり盗難にあってもデータをのぞき見されることがない、ということが挙げられます。それは次のような理由によります。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;データベース全体が暗号化されるため、流出したファイルをバイナリエディタなどで展開しても、ファイルの中身を理解することができない&lt;/LI&gt;
&lt;LI&gt;データベースの復元(あるいはアタッチ)には証明書が必要なので、バックアップファイルのみが流出しても不正にリストアされてしまうことはない&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;SQL Server オンラインブックなどのドキュメントには、データベースを暗号化するための方法は親切に解説してありますが、暗号化したデータベースを復元する方法をわかりやすくまとめている箇所がありません。そこで今回のエントリでは、暗号化されたデータベースを別インスタンスに復元する方法を紹介したいと思います。&lt;/P&gt;
&lt;P&gt;●まずはデータベースの暗号化までのおさらい&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;1. データベースとテーブルを作成します&lt;/STRONG&gt;&lt;BR&gt;create database TDE_DB&lt;BR&gt;go&lt;BR&gt;use TDE_DB&lt;BR&gt;go&lt;BR&gt;create table t1 (c1 nvarchar(500))&lt;BR&gt;go&lt;BR&gt;&lt;STRONG&gt;2. サービスマスターキーを作成します&lt;/STRONG&gt;&lt;BR&gt;use master&lt;BR&gt;go&lt;BR&gt;create master key encryption by password = 'secret!masterKey1'&lt;BR&gt;go&lt;BR&gt;&lt;STRONG&gt;3. 証明書を作成します&lt;/STRONG&gt;&lt;BR&gt;create certificate TDE_TEST with subject = 'Test Certificate'&lt;BR&gt;go&lt;BR&gt;&lt;STRONG&gt;3. データベース暗号化キーを作成します&lt;/STRONG&gt;&lt;BR&gt;use TDE_DB&lt;BR&gt;go&lt;BR&gt;create database encryption key with algorithm = AES_256&lt;BR&gt;encryption by server certificate TDE_TEST&lt;BR&gt;go&lt;BR&gt;&lt;STRONG&gt;4. データベースを暗号化します&lt;/STRONG&gt;&lt;BR&gt;alter database TDE_DB set encryption on&lt;BR&gt;go&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;●続いてデータベースと証明書のバックアップ&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;1. データベースのバックアップ&lt;BR&gt;&lt;/STRONG&gt;backup database TDE_DB to disk='C:\TDE_DB.bak'&lt;BR&gt;go&lt;BR&gt;&lt;STRONG&gt;2. 証明書のバックアップ&lt;BR&gt;&lt;/STRONG&gt;backup certificate TDE_TEST to file = 'C:\TDE_TEST.cer'&lt;BR&gt;with private key (file = 'c:\TDE_TEST_KEY.pvk',encryption by password = 'secret!masterKey1')&lt;BR&gt;go&lt;BR&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;●いよいよ別インスタンスへの復元です。データベースと証明書のバックアップファイルは復元先のマシンにコピーしておいてください。&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;1. 復元先のインスタンスでも独自のサービスマスターキーを作成しておく必要があります&lt;BR&gt;&lt;/STRONG&gt;create master key encryption by password = 'tdetest!tdetest1'&lt;BR&gt;go&lt;BR&gt;&lt;STRONG&gt;2. データベースの復元に先駆けて、証明書を復元します&lt;/STRONG&gt;&lt;BR&gt;create certificate TDE_TEST&lt;BR&gt;from file = 'c:\TDE_TEST.cer'&lt;BR&gt;with private key (file = 'c:\TDE_TEST_KEY.pvk', decryption by password ='secret!masterKey1')&lt;BR&gt;go&lt;BR&gt;&lt;STRONG&gt;3. これで別インスタンスへのデータベースの復元が可能になります&lt;/STRONG&gt;&lt;BR&gt;restore database TDE_DB from disk='C:\TDE_DB.bak'&lt;BR&gt;go&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;ちなみに上記の手順ではなく、単にデータベースの復元のみを行うと次のようなエラーが発生します。&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;メッセージ 33111、レベル 16、状態 3、行 1&lt;BR&gt;拇印 '0xC31E2828C900C230B2BC1E9BEBE5B66DCAB9EFXX' でサーバー 証明書 が見つかりません。&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;また、データベースの復元の際にとても重要な意味を持つ、&lt;STRONG&gt;サービスマスターキーのパスワード&lt;/STRONG&gt;、&lt;STRONG&gt;証明書のバックアップ&lt;/STRONG&gt;の管理には細心の注意を払うようにしてください。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9010764" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqljapan/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://blogs.msdn.com/sqljapan/archive/tags/Security/default.aspx">Security</category></item></channel></rss>