SQL Server 2016 [新機能] 動的なデータマスキングでクエリの変更が必要な場面は?

  みなさん、こんにちは。 Microsoft SQL Server/Microsoft Azure SQL Database サポートチーム です。 SQL Server 2016 から動的なデータマスキングの機能が加わりました。 動的なデータマスキングの特徴として、クエリの結果に対してマスクが適用されるため、アプリケーション側でのクエリの変更が不要な場合が多い点にあります。   動的なデータ マスキング https://msdn.microsoft.com/ja-jp/library/mt130841.aspx 動的データマスクは、クエリの結果にマスク ルールが適用されるため、既存のアプリケーションで簡単に使用できます。 多くのアプリケーションは、既存のクエリを変更せずに、デリケートなデータをマスクすることができます。     一方で意図した結果にならないということでお問い合わせを頂くケースも出てきました。 ここではアプリケーション側でのクエリの変更が必要な場面の例をご紹介したいと思います。 いずれも仕様に沿った結果ではありますが、ご参考頂ければ幸いです。   変更が必要な場面 カーソルで取得した値がマスクされる前の値であることを前提としている実装 カーソルで取得した値は既にマスクされているため、マスクされた後の値であることを前提とした実装に変更する必要があります。 取得した値をクエリ内で置き換えた場合 置き換えた値もマスク対象となるため、マスクされた値であることを前提とした実装が必要です。   以下は、上記の具体例です。 前準備   ※公開情報で紹介しているテーブルとデータを使用しています。    動的なデータマスキング    https://msdn.microsoft.com/ja-jp/library/mt130841.aspx   テーブルを作成します。 CREATE TABLE Membership    (MemberID int IDENTITY PRIMARY KEY,     FirstName…

0

イベント ID : 455/489/490 及び 413/486 の対処方法について

  皆さん、こんにちは。 BI Data Platform サポートチーム です。 ※ BI Data Platformサポートチーム では、Microsoft SQL Server/Azure SQL Database/BI Azure などの製品をサポートしています。 今回は、イベント ID : 455/489/490 及び 413/486 の対処方法について、紹介したいと思います。   Windows Server 2012 以降、ソフトウェアの使用状況を収集する機能が追加されており、ソフトウェアの使用状況 を収集する機能の中で、“C:\Windows\system32\LogFiles\Sum” フォルダ配下への読み取り、書き込みが行われています。 そして、SQL Server サービス に指定された サービス起動アカウントに、“C:\Windows\system32\LogFiles\Sum” フォルダ配下に対する読み取り、書き込み、変更権限が付与されていない場合、権限不足に起因し、イベント ID : 455/489/490 がイベントログに記録されます。   ソース:ESENT イベントID:455 内容:   sqlservr (2032) ログファイル C:\Windows\system32\LogFiles\Sum\Api.log を開いているときに、エラー -1032 (0xfffffbf8) が発生しました。 ソース:ESENT…

0

照合順序 – 文字の比較と並び順 (その 2)

神谷 雅紀Escalation Engineer   照合順序 – 文字の比較と並び順 (その 1) では照合順序とは何かを書きました。今回は、照合順序に関わるいくつかの注意点について書きます。     照合順序の衝突   異なる照合順序が指定されている列同士は、比較することができません。 以下は、その簡単なサンプルです。   use mastergodrop database ja_90_bin2go— 照合順序 japanese_90_bin2 のデータベースを作成create database ja_90_bin2 collate japanese_90_bin2gouse ja_90_bin2go— 照合順序 japanese_90_bin2 のデータベースに japanese_90_ci_as と japanese_90_cs_as の列を持つテーブルを作成create table dbo.ja_90_cias (c1 int, c2 nvarchar(10) collate japanese_90_ci_as)create table dbo.ja_90_csas (c1 int, c2 nvarchar(10) collate japanese_90_cs_as)go— japanese_90_ci_as と japanese_90_cs_as…

0

照合順序 – 文字の比較と並び順 (その 1)

神谷 雅紀Escalation Engineer 照合順序が分かりにくいという意見がありましたので、今回は照合順序を取り上げます。        照合順序とは何か SQL Server では、文字の大小関係を比較する場合の基準を照合順序 (collation) と呼んでいます。例えば、「朝」と「海」ではどちらが大きいのか、「あ」「ア」「ア」を大きい順に並べた場合どのように並ぶのかといった、文字の大小関係を決めているのが照合順序です。 言語としての日本語の観点では、「朝」と「海」のどちらが大きくても、さほど問題にはならないように思えるかもしれません。しかし、もしこれらの文字に大小関係がなかったら、データを大きい順に並べても毎回違った並び順になる可能性があります。さらに、もしこれらの文字に大小関係がなかったら、大きくも小さくもないということになります。大きくも小さくもないということは、   if (a < b) …else if (a > b) …else …   の式で最後の else に入るということであり、そこに入るのは a = b の場合だけです。つまり、等しいということです。「朝」と「海」が等しいとなると、それは言語としての日本語でも問題となってきます。 このように、照合順序 (文字の大小関係) は、データを扱う処理にとっては、重要な要素です。 照合順序はどのような場面で使われるのか 文字の比較を行うすべての場面で使われます。 例えば、インデックスを作成する際には、キー列の値順にインデックス行を並び替えるために使われます。select … from … order by Col1 のようなクエリでデータを並び替える際にも使われます。select … from … group by Col1 のようなクエリでグルーピングを行う際にも使われます。また、if (@a = @b)…

1

FlushCache メッセージ

  神谷 雅紀Escalation Engineer     SQL Server 2012 以降では、以下のメッセージが Errorlog ファイルに記録されることがあります。今回はこのメッセージを解説します。   メッセージ   FlushCache: cleaned up 39907 bufs with 1628 writes in 74882 ms (avoided 30218 new dirty bufs) for db 5:0            average writes per second: 21.74 writes/sec average throughput: 4.15 MB/sec, I/O saturation: 3296, context switches 9000            last target outstanding: 153600, avgWriteLatency…

0

トラブルシューティング手法とサポートサービス

システムで何らかのエラーが発生したという場合や、やりたいことができないといった場合に、トラブルシューティングを行うことになりますが、その際の一般的なトラブルシューティングの流れについてご紹介します。私たちサポートチームもだいたいこのようなフローの考え方をもとに調査を行っています。また、テクニカルサポートでは、インシデント単位で承っているプロフェッショナルサービスと、時間単位で承っているプレミアサービスがあります。トラブルシューティング内容に応じた、それらのサポートサービスの違いについても、参考としてご案内します。 大きく、運用でのエラー発生、開発時の How-to では考え方も異なりますので、それぞれ分けて見ていきます。 エラー発生 A) いま事象が発生しているか これは一番重要なポイントになります。いま事象が発生している場合には、すぐに対処が必要なため緊急度は高くなり、できることも多くなります。復旧優先で対処となりそうな対応をすぐに行ったり、原因調査のためにいったん情報も採取してから対処を行うといった対応があります。 一方、いま発生していないけれども、過去発生していたエラーをさかのぼって調査することもあります。この場合には、どれだけ手掛かりとなる情報が残っているかが重要です。 B)エラーメッセージやログから調査 いま事象が発生している場合には、エラーメッセージやログを確認します。 SQL Server を例にとると、既定で出力されている情報として参考になるのは、下記があります。 既定の情報 SQL Server エラーログ (ERRORLOGファイルや、同じフォルダにあるデフォルトトレースやダンプファイル等) Reporting Services ログ (ログファイルや同じフォルダにあるダンプファイル、ExcecutionLog ビュー) Analysis Services ログ (msmdsrv.logやフライトレコーダー) イベントログ その他、事象に応じて、次のような情報を採取することもあります。 追加情報 ブロッキング情報 動的管理ビュー サーバートレース 拡張イベント パフォーマンス カウンター 問題ステップ記録ツール BID トレース ネットワークトレース ダンプファイル プロフェッショナルサービス、プレミアサービスのいずれでも、これらの情報からの調査は承っています。違いとしては、下記があります。 プロフェッショナルサービス これらの情報から、対処方法を調査してご案内します。 プレミアサービス これらの情報から、対処方法を調査してご案内します。また、必要に応じて原因追及の調査も行うことが可能です。 追加情報の中でも、BIDトレース、ネットワークトレース、ダンプファイルを採取する必要がある事象については、環境依存の問題の可能性が一般的には高いと言えます。その場合にはプレミアサービスでのみ調査可能です。   C) 発生状況の切り分け 事象によっては、情報採取よりも、事象が発生するパターン、発生しないパターンを切り分けることによって、問題点が特定できる場合があります。また、発生しないパターンが確認できると、それが対処方法に直結する場合もあります。例えば、次のような切り分けがあります。 特定の環境で発生する、もしくは複数の環境で発生する 特定のクライアントで発生する、複数のクライアントで発生する 特定のユーザーで発生する、複数のユーザーで発生する…

0

用語解説: 復旧、復元、修復

神谷 雅紀 Escalation Engineer 今回は、混同しやすい用語である「復旧」「復元」「修復」について解説します。 復旧 復旧 (英語では recover, recovery) は、データベース開始時に実行されるトランザクションのロールフォワード、ロールバックなどの処理を表します。 SQL Server は、多くのデータベースシステムと同様に、ログ先行書き込み (Write-Ahead-Logging, WAL) を行います。データベースファイルへの書き込みは、必ずトランザクションログファイルへの書き込みが先行されます。トランザクション完了時、トランザクションログへの書き込みは必ず同期されます。言い換えれば、クライアントが COMMIT を発行しても、トランザクションログへの書き込みが終わらないと、クライアントへは制御が返されません。一方、データファイルへの書き込みは非同期です。そのため、データベースクローズ時にデータファイルの内容が最新の状態であるとは限りません。データベース開始時には、トランザクションログを使用して、データファイルをトランザクションとして整合性のとれた最新の状態にするために、未完了トランザクションをロールバックしたり、データファイルへ未反映のトランザクションをロールフォワードしたりします。つまり復旧が必要になります。 データベースの開始は、SQL Server の起動時やデータベースのアタッチ時に実行されたり、WITH RECOVERY の指定された RESTORE DATABASE または RESTORE LOG ステートメントの実行時に実行されます。データベースが開始されると、Errorlog ファイルには “Starting up <database name>” と記録されます。 復元 復元 (restore, restoration) は、RESTORE ステートメントによってバックアップデータからデータベースを作成したり、復元中 (restoring) の状態にあるデータベースにトランザクションログを適用することを指します。 修復 修復 (repair) は、SQL Server のデータベースとして論理的に正常ではない状態になってしまったデータベースを、データベースとして使用可能な状態に戻すことを指します。 通常は、復旧に失敗し、データベースが未確認 (suspect) の状態となってしまったものの、そのデータベースのバックアップがなく、バックアップからデータベースを復元できない状況の場合に、最後の手段として、DBCC CHECKDB に修復オプションを指定することで修復します。…

0

SQL Server 2012/2014 をインストールするために必要な .NET Framework について

皆さん、こんにちは。 SQL Server/Microsoft Azure SQL Database サポートチームです。 今回は、SQL Server 2012/2014 をインストールするために必要な .NET Framework について紹介します。   SQL Server 2012/2014 をインストールするために必要な .NET Framework については、以下の Books Online で公開していますが、本 Blog の中で、.NET Framework の要件について補足したいと思います。 SQL Server 2014 のインストールに必要なハードウェアおよびソフトウェア SQL Server 2012 のインストールに必要なハードウェアおよびソフトウェア     .NET Framework  バージョン  補足説明  .NET Framework 3.5 SP1  データベース エンジン、Reporting  Service、SQL Server Management Studio などの 機能/ツールをインストールする場合に必要  .NET Framework…

1

イベント ID 10016 エラーについて

胡 淑鳳 SQL Developer Support SQL Server 2014環境では、メンテナンスプランの構築により作成されたSQL Server エージェント ジョブを実行する場合、システムイベントログに以下のようなエラーメッセージが記録される場合があります。 ログ種類:システム イベントソース:Microsoft-Windows-DistributedCOM イベントID:10016 レベル:エラー ユーザー:S-1-5-80-344959196-2060754871-2302487193-2804545603-1466107430 説明: アプリケーション固有 のアクセス許可の設定では、CLSID {806835AE-FD04-4870-A1E8-D65535358293} および APPID {EE4171E6-C37E-4D04-AF4C-8617BC7D4914} の COM サーバー アプリケーションに対するローカルアクティブ化のアクセス許可を、アプリケーション コンテナー 利用不可 SID (利用不可) で実行中のアドレス LocalHost (LRPC 使用) の ユーザー NT SERVICE\SQLSERVERAGENT SID (S-1-5-80-344959196-2060754871-2302487193-2804545603-1466107430) に与えることはできません。 このセキュリティ アクセス許可は、コンポーネント サービス管理ツールを使って変更できます。   原因 当該のエラーは、ユーザー (NT SERVICE\SQLSERVERAGENT) が [ローカルからのアクティブ化] というアクセス許可を AppID {EE4171E6-C37E-4D04-AF4C-8617BC7D4914}…

0

[SQL Database] Web および Business エディションの終了に伴う、新エディションへの移行について (Microsoft Azure SQL Database)

  皆さん、こんにちは。 SQL Server/Microsoft Azure SQL Database サポートチーム です。 既にご存知の方も多いかと思いますが、Microsoft Azure SQL Database (以下 MASD) の 旧エディション (Web および Business) が、2015年9月以降、利用できなくなります。 本サービスの終了に伴い、現在 旧エディション (Web および Business) をご利用のお客様は、新エディションへの移行 (アップグレード) が必要となります。 そのため、本サービスが終了するまでに、計画的に新エディションへの移行 (アップグレード) をお願いします。 尚、新エディション (Basic/Standard/Premium) への移行 (アップグレード) は、Windows Azure 管理ポータル から オンライン処理 で実施することが可能です。※ 新エディションへの移行中も、お客様データベースへのアクセス (SELECT/UPDATE/DELETE/INSERT) が可能です。   [新エディションへの移行手順] 1) Windows Azure 管理ポータルにログインします。 2) 移行対象 (アップグレード対象) のデータベースを選択します。…

0