SQL Serverでのデータの難読化


43

SQL Serverでのデータ難読化のベストプラクティスは何ですか?

UATシステムでマスクされた生産データを使用したいと思います。

より迅速に、より高いレベルの難読化でそれを行いたい場合、どのようなアプローチをとるべきですか?人々の名と姓のスクランブルについて考えていますが、どうですか?自分で関数を作成する必要がありますか、それとも使用可能な定義済み関数がありますか?車輪の再発明に時間をかけたくありません:)

日付フィールドはどうですか?たとえば、生年月日をテーブル全体からランダムに選択してレコードに割り当てる必要がありますか、それとももっと良い方法がありますか?

回答:


25

このことを考えるだけで、100点の賛成票を投じることができたらと思います!私はこの主題が何度も見落とされているのを見たことがあります。私が理解していることから、あなたは実際にフィールド自体内のデータをスクランブルしたいのですが、あなたが達成しようとしていることを理解しているにもかかわらず、そうすることはそれほど必要ではないかもしれません-それはケースバイケースで考慮されるべきです。

ほとんどのデータ保護法は、たとえば生年月日や電話番号など、データと個人を正しく関連付ける機能を中心に展開されています。データを本番環境からUATに移動する際にデータがゴチャゴチャになり、元の人に簡単に再マッピングされないようにすることにより、法律の要件を満たすことができます-特に、名前と姓をゴチャゴチャする場合。

ただし、たとえば連絡先の詳細などの問題は解決しません。データをごちゃ混ぜにすることで法律の要件を満たすことができますが、電話番号はまだ本物であり、電子メールはまだ本物です...それらは正しい人に割り当てられていないだけです。このため、データをUATに渡す前に可能な限り消去することをお勧めします.Red Gateは、データジェネレーターと呼ばれるソフトウェアを実行し、ランダムなテストデータを作成して、テスト可能なデータをフィールドに再入力できるようにします。

データのスクランブルに関しては、あなたのためにこれを行う多くのアプリケーションが存在し、正直なところ、あなたは車輪を再発明したくないのは正しいです。当社で使用しているのは、Net2000という会社のData Maskerという製品です。ライセンスは非常に安く、非常に高速に動作し、データベースをスクランブルする前にすべての制約を無効にする必要があることを心配する必要はありません。

もちろん、要件を満たすものが見つからない場合は、独自のソリューションを展開できます-これを行うことにした場合、CLRプロシージャを使用してそれを実行することを強くお勧めしますTSQLを使用できない場合は、こちらをご覧ください)。

これを実行するアプリケーションを選択したら、次に決定する必要があるのは、実際にスクランブルしたい/必要なものは何ですか?正直なところ、これに最適なリソースは、会社の法務チームまたは監査人です。私は時々彼らと一緒に仕事をするのが好きではないかもしれないことを知っていますが、彼らはあなた自身にそれをして間違ってしようとするのではなく、彼らに近づき質問をする方があなたにとってはるかに良いでしょう、助けを求めることは絶対に悪いことではありません-特にこれと同じくらい重要な場合。

これがあなたのお役に立てば幸いです。そして、あなたの探求に幸運を祈ります... ;-)


1
できれば、会社の方針に言及するために追加の賛成票を投じます。
-dezso

法的要件は利害関係者によって決定されます。今すぐ実装する必要があります。
スカイ

Bownstone氏の説明はいつものように優れています。ありがとうございました。これについてはCLR関数を確認し、T-SQLにも注目します。どちらがより適切で、ビルドが速いかを確認してください。
スカイ

10

ブラウンストーン氏は頭に釘を打ちました。ここで少し手助けするために、ここに文字列を難読化するために使用される私の「文字化け」関数があります(名前の面白い結果!)。文字列を渡すと、文字化けした文字列が返されます。文字列列に対する更新ステートメントにそれを含めます。必要に応じてデータ長を変更します。

---------------------
-- Garble Function --
---------------------
-- Make a function to slightly garble the strings
IF (object_id('fn_Garble') is not null)
  drop function fn_Garble
go
create function fn_Garble
(
  @String varchar(255)
)  
returns varchar(255)
as
BEGIN
  select @String = replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(@String,'o','e'),'a','o'),'i','a'),'u','i'),'t','p'),'c','k'),'d','th'),'ee','e'),'oo','or'),'ll','ski')
  return @String
END
go

3
おなじみですか?(ちょうどあなたのポイントのイラスト。)om o SQL Server thBo an eppowo konotho。プレサテンフとメプレペラスは、ケカンワフSQLを使いました。私たちは、トポボースケンシルポンプスペボラエピブラクオンプラヴォープセッカーエルゴナゾパエンスを普及させています。SQL Server Mogozane on phe oipher ef phe p-SQL 101 seraes ef orpakles / e-bek。SQL Server thBo sanke phe SQL 4.2の両方の利点があります。
-dezso

1
へえ...それを認識するのにしばらくかかった。そこには、文字化けしていない言葉がたくさんあるようです。名、姓、都市名に対してのみ使用したことがあります。ほんの少し愚かな機能。私はそれで私のキャリアを賭けません。
datagod

私はこのアプローチに感謝しています-シンプルでありながら機能しています。そしてプラスは、テキストがまだ読みやすいということです。私はそれを理解できませんでした:)
dezso

7

クライアントの小売販売データに対してこれを行う必要がありました。名前については、国勢調査に行き、すべての名と姓をダウンロードし、それらをループで実行して、名字ごとに結合し、性別コードを追加して、すべて大文字でテーブルにロードしました。その後、約4億の一意の名前を持つテーブルがありました。現在のデータが大文字ではないため、大文字を使用しました。そのため、スクラブされたデータをより簡単に識別できました。

ユーザーデータをスクラブしたとき、名前を入れ替えました。誕生日には、実際に生まれた年の1月1日に全員を置き、郵便番号で電話番号を更新しました(私のデータは米国のみ)。電子メールアドレスは、最初の姓に加えて@ mycompany.coになりました。郵便住所は私に最も悲しみを与えましたが、住所が変更されても問題ではないと信じているので、私は都市、州、郵便番号を保持しました。文字化けした文字を生成し、それで住所行を更新するプログラムを持っている同僚がいました。

データを複製したどこでもメインユーザーにFKがありました(デザインは悪いですが、私のものではありません)そのデータも更新して、ユーザーxのデータベース全体で名前が一致するようにしました。

住所は意味がありませんでしたが、全体的に私のデータは非常に読みやすくなっています。このすべてを機能させるのに数日かかりましたが、いったん完了してSQLエージェントジョブが作成されると、わずか15分でデータをスクラブできました。


私はあなたのアプローチが好きです。名と姓については、データセットが十分な大きさで、十分なバリエーションがある場合、国勢調査のWebサイトから名前をダウンロードするのではなく、ソースとして使用できると思います。SELECT DISTICTでデータを照会すると、再生する必要のある多くの一意の値がわかります。
スカイ

0

単一のフィールドを難読化するには、HASHBYTES関数(SQL 2008+)を使用してください。データをソルトできれば、アルゴリズムを選択できます(MD5で十分でしょう)。そのSELECT HASHBYTES('SHA2_256', <LAST NAME FIELD>) ため、単に確認する代わりに、 SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD> + '<my salt string>')簡単にブルートフォースすることができないハッシュを取得します。

これは、サポート可能で再現性のある実際の機能であり、おそらくはるかに高速です。本当に難読化するか、単に難読化する必要があるかに応じて、より弱い、より速いハッシュを使用することもできます。


あなたはこの日と時代にMD5を使うべきではありません、それは本質的に安全ではありません。
フィリ

OK ... HASHBYTESでの選択肢は次のとおりMD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 です。(はい、使用すべきでないものを含む)。したがって、SHA2_512を使用しているとしましょう...
cmcapellan

-1

Chrissy Lemaire(@ chrissy-lemaire)と彼女のチームが書いた静的データマスキングの無料オプションについては、dbatools PowerShellモジュールをご覧ください。それらのツールはすべて素晴らしいので、これは一見の価値があると確信しています。

dbatoolsで検索する2つのコマンドは次のとおりです。New-DbaDbMaskingConfig Invoke-DbaDbDataMasking

これを発表しているブログ投稿を見てください:自動データマスキング


2
リンクのみの回答はあまり役に立ちません。あなたはなど、コマンドレットを使用する方法の例を与えることによって、あなたの答えを改善することができ
エリック・ダーリン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.