ホームページ  >  記事  >  データベース  >  SQLServer 動的マスキングの詳細な紹介 (コード例)

SQLServer 動的マスキングの詳細な紹介 (コード例)

不言
不言転載
2019-02-01 10:30:202668ブラウズ

この記事では、SQLServer の動的マスキングについて詳しく説明します (コード例)。必要な方は参考にしてください。

ダイナミック データ マスキング (DDM) は、SQL Server 2016 で導入された新機能です。その目的は、許可なく人々が一部の個人情報を閲覧することを制限することです。管理者ユーザーはどのフィールドをマスクする必要があるかを決定できますが、アプリケーション コードを変更せずにフィールドをマスクするにはどうすればよいでしょうか?データへのアクセス方法に関係なく、一貫性があることを保証することも必要です。

これは、Azure SQL Database で初めて導入された機能であり、クラウド上のユーザーによってテストされており、オンプレミス製品に移行されました。他の多くの新機能もこのアプローチ (クラウドローカル) に従うと思います。

以前の行レベルのデータ セキュリティと同様に、これらはデータ セキュリティ関連のコンテンツであることに注意してください (推奨コース: MySQL チュートリアル )

Columnデータのマスキング

まず、一部のデータのマスクされたバージョンを含むテーブルを作成します。テーブル定義から始まるフィールドの 1 つにマスクを追加します。これを行う方法は、データ型の後、NULL オプションとデフォルト オプションの前に、関数を指定する括弧内に FUNCTION = " を含めて「mask with()」形式を使用することです。引用符内で、 CREATE TABLE ステートメントは次のとおりです。

CREATE TABLE MyTable
  ( MySSN VARCHAR (10) MASKED WITH (FUNCTION = 'default()') DEFAULT ('0000000000' )
 , MyName VARCHAR (200) DEFAULT ( ' ')
 , MyEmail VARCHAR (250) DEFAULT ( '')
 , MyInt int
)
GO
INSERT dbo. MyTable
 ( MySSN , MyName, MyEmail , MyInt)
VALUES
 ( '1234567890', 'Steve Jones', 'SomeSteve@SomeDomain.com', 10 )

作成者がこのテーブルをクエリすると、特権ユーザー (db_owner または sysadmin ロール) を持つユーザーには、そのテーブルが挿入されたときにすべてのデータが表示されます。マスクされたデータを作成します。もちろん、テーブル内のデータを表示するには、通常の SQL Server 権限を付与する必要があります。

最初の列には、データが存在する場所に x のみが表示されます。これにより、目的の結果が得られます。非特権ユーザーからのデータは、非特権ユーザーに返されるまで変更されないことに注意してください。

これは実行計画の最後の部分で発生していることがわかります。上記と同じクエリを使用して、ユーザーのプランを確認します。


テーブルには、次のようなカスタム マスク形式を定義できます。メール アドレスの表示内容と乱数マスクを制御できるようになります。これらの問題については、別の記事で詳しく説明します。

これで、メール MyEmail などの別の列にマスクを追加できるようになります。列では、メール マスクを使用できます。その形式、具体的なコードは次のとおりです。

CREATE USER mytest WITHOUT LOGIN
GRANT SELECT ON mytable TO mytest

その後、クエリの結果は次のようになります。

You複数の合計列をマスクすることもできます

ALTER TABLE dbo.MyTable
 ALTER COLUMN MyEmail VARCHAR(250) MASKED WITH (FUNCTION='email()')
GO

クエリ結果は次のとおりです:


ご覧のとおり、異なる行から異なるマスクが取得されます。であり、各マスクは特定の行データに適用されます。

ユーザーにマスクされた実際のデータの表示を許可する

SQL Server 2016 には新しい DDM 権限があります。 UNMASK 権限は、他の権限と同様に付与されます。これがどのように機能するかを見てみましょう。

# #同様の結果になります。

##NewTester ユーザーの場合と同じ方法でデータが表示され、すべてのデータが「マスクされていない」ことがわかります。 "

ただし、欠点もあります。 UNMASK 権限はデータベース全体でユーザーに付与されます。テーブルまたは列ごとの粒度はありません。ユーザーが UNMASK を持っている場合、データベースに保存されているテーブル内のすべてのデータを SELECT 権限で表示できます。 Newtest を使用して最初のテーブルをクエリすると、これを確認できます。


マスクを削除します

コードは次のとおりです:

CREATE TABLE MySecondTable (
  MyEmail VARCHAR( 250) MASKED WITH (FUNCTION= 'email()')
, MySSN VARCHAR (10) MASKED WITH (FUNCTION ='default()')
, MyID INT MASKED WITH (FUNCTION ='random(1,4)')
)GOINSERT MySecondTable VALUES
   ( 'myname@mydomain.com', '1234567890', 100 )
 , ( 'abrother@mycorp.com' , '0123456789' , 555)
 , ( 'somesister@somecompany.org' , '9876543210' , 999)

これを実行すると、ユーザーは実際のデータを直接確認できるようになります。 。

MySSN 列のデータはマスクされていませんが、MyEmail と MyID のデータは依然としてマスクされています

概要

動的データ マスキングは、特権のないユーザーからデータを簡単に保護できるように設計された優れた新機能です。これは、アプリケーション コードを変更することなくデータベースに実装できるため、最小限のコストと労力で機密データをアプリケーション ユーザーからマスクすることができます。また、これは真のセキュリティ機能ではないことにも注意してください。ディスクとテーブルに保存されているデータはまったく変更されません。これは依然としてプレーン テキスト データであり、ユーザーがシステムにクエリを実行できる場合でも、データをクエリしてその値を発見できる可能性があります。

いずれにせよ、この機能は、特にデータの復号化が必要なシステムにとって、間違いなく役立ちます。もちろん機能も17から大きく進化していますので、また機会があれば紹介していきたいと思います。

以上がSQLServer 動的マスキングの詳細な紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。