sql >> データベース >  >> RDS >> Sqlserver

初心者向けのSQLServerでの動的データマスキング

    この記事では、SQL Serverの動的データマスキング(DDM)の基本と、データマスキングの実装の簡単な例でサポートされている概要を紹介します。さらに、読者は動的データマスキングの利点に慣れることになります。このホワイトペーパーでは、標準的な慣行に準拠するために機密性が高いために一部のフィールドをマスクする必要がある場合の、日常のデータベース開発タスクにおけるデータマスキングの重要性についても説明します。

    データマスキングについて

    データマスキングの基本的な概念と、SQLServerでこの機能を利用できるかどうかを見ていきましょう。

    簡単な定義

    データマスキングは、データを完全にまたは部分的に非表示にして、マスキングを適用した後のデータの認識や理解を困難にする方法です。

    Microsoftの定義

    Microsoftのドキュメントによると、動的データマスキング(DDM)は、非特権ユーザーにデータをマスキングすることにより、機密データの公開を制限します。

    機密データとは

    機密データとは、個人を特定できる個人情報、財務情報、またはセキュリティ情報を含むデータを意味します。これらの情報が明らかになると、悪用されたり、組織の評判を傷つけたりする可能性があります。

    機密データの例

    機密データの良い例は、データベースに保存されているデビットカード番号であり、不正使用から保護する必要があります。機密データのもう1つの良い例は、個人を簡単に識別できる個人の電子メールアドレスです。

    非特権ユーザー

    機密データの表示を許可されていないデータベースユーザーは、非特権ユーザーと見なされます。

    動的データマスキング(DDM)

    SQL Serverでサポートされているデータマスキング機能は、動的データマスキングと呼ばれ、MicrosoftのドキュメントではDDMとも呼ばれています。つまり、MicrosoftはデータマスキングをSQLServerの動的データマスキングと呼んでいます。

    互換性

    Microsoftのドキュメントによると、動的データマスキング機能は、次のバージョンのSQLServerでサポートされています。
    1。 SQLServer2016以降のバージョン
    2。 AzureSQLデータベース
    3。 AzureSQLデータウェアハウス
    したがって、Azure SQLデータベースの使用をまだ開始していない場合は、動的データマスキング機能を使用するために最小限のSQLServer2016が必要です。

    動的データマスキングの構成

    動的データマスキングは、T-SQLコマンドを使用するだけで構成できます。
    動的データマスキングの実装は、T-SQLスクリプトを介して行われ、権限のないユーザーが機密データを表示するのを防ぎます。

    動的データマスキングの利点

    最後に、動的データマスキングのいくつかの重要な利点について説明しますが、その前に、SQLの専門家ではなくSQLの初心者に、整合性制約の利点は何ですか?
    ユニークな例を考えてみましょう。それが適用される列が明確な(重複しない)値を持つことを保証するキー制約。フロントエンドアプリケーションでのデータ入力時に個別の列値を適用できる場合、一意のキー制約を適用してデータベースを介して強制する必要があるのはなぜですか?
    答えは、ルール(整合性制約)を確保することです。 )一貫性を保ち、一元的に管理されます。これはデータベースレベルで行う必要があります。そうしないと、データベースにアクセスする現在および今後のすべてのアプリケーションで一意の値を適用するコードを記述しなければならない場合があります。
    動的データマスキングは、データベースレベルで列をマスクするため、データベースにアクセスするアプリケーションによって追加のマスキング(コード)を実行する必要はありません。

    動的データマスキングには、従来のアプローチに比べて次の利点があります。
    1。動的データマスキングは、データへのアクセスを希望するアプリケーションによって継承されるデータベース内の機密データを非表示または変更する一元化されたポリシーを実装します。
    2。 SQL Serverの動的データマスキングは、機密データを表示する権限を持つユーザーと、データの表示を許可されていないユーザーを管理するのに役立ちます。
    3。 T-SQLスクリプトの形式で簡単に実装できます。

    動的データマスキングの実装

    動的データマスキングを実装する前に、SQLまたはAzureSQLデータベースのテーブルの列に適用できる動的データマスキングの種類を理解する必要があります。

    データマスクの種類

    列に適用できるデータマスクには、次の4つのタイプがあります。
    1。デフォルトのデータマスク
    2。部分データマスク
    3。ランダムデータマスク
    4。カスタムデータマスク
    この記事では、デフォルトのデータマスキングタイプに焦点を当てます。

    動的データマスクの適用

    動的データマスクは、次の方法でテーブルの列に適用できます。
    1。新しいテーブルを作成するとき
    2。作成済みのテーブルを変更して、その列にデータマスキングを適用する

    サンプルデータベースのセットアップ

    SQLDevBlogV5という名前のサンプルデータベースを作成しましょう 次のT-SQLスクリプトを実行します。

    -- Create sample database (SQLDevBlogV5)
    CREATE DATABASE SQLDevBlogV5;
    GO
    
    
    USE SQLDevBlogV5;
    
    -- (1) Create Article table in the sample database
    CREATE TABLE Article (
      ArticleId INT PRIMARY KEY IDENTITY (1, 1)
     ,Category	VARCHAR(50)
     ,Author VARCHAR(50)
     ,Title VARCHAR(150)
     ,Published DATETIME2
     ,Notes VARCHAR(400)  
    )
    
    GO
    
    -- (2) Populating Article table
    SET IDENTITY_INSERT [dbo].[Article] ON
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (1, N'Development', N'Atif', N'Introduction to T-SQL Programming ', N'2017-01-01 00:00:00', NULL)
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (2, N'Testing', N'Peter', N'Database Unit Testing Fundamentals', N'2017-01-10 00:00:00', NULL)
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (3, N'DLM', N'Sadaf', N'Database Lifecycle Management for beginners', N'2017-01-20 00:00:00', NULL)
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (4, N'Development', N'Peter', N'Common Table Expressions (CTE)', N'2017-02-10 00:00:00', NULL)
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (5, N'Testing', N'Sadaf', N'Manual Testing vs. Automated Testing', N'2017-03-20 00:00:00', NULL)
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (6, N'Testing', N'Atif', N'Beyond Database Unit Testing', N'2017-11-10 00:00:00', NULL)
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (7, N'Testing', N'Sadaf', N'Cross Database Unit Testing', N'2017-12-20 00:00:00', NULL)
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (8, N'Development', N'Peter', N'SQLCMD - A Handy Utitliy for Developers', N'2018-01-10 00:00:00', NULL)
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (9, N'Testing', N'Sadaf', N'Scripting and Testing Database for beginners ', N'2018-02-15 00:00:00', NULL)
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (10, N'Development', N'Atif', N'Advanced Database Development Methods', N'2018-07-10 00:00:00', NULL)
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (11, N'Testing', N'Sadaf', N'How to Write Unit Tests for your Database', N'2018-11-10 00:00:00', NULL)
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (12, N'Development', N'Peter', N'Database Development using Modern Tools', N'2018-12-10 00:00:00', NULL)
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (13, N'DLM', N'Atif', N'Designing, Developing and Deploying Database ', N'2019-01-01 00:00:00', NULL)
    INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (14, N'DLM', N'Peter', N'How to Apply Database Lifecycle Management  ', N'2019-02-10 00:00:00', NULL)
    SET IDENTITY_INSERT [dbo].[Article] OFF

    次のクエリを使用して記事を表示します:

    -- View articles 
    SELECT
      [a].[ArticleId]
     ,[a].[Category]
     ,[a].[Author]
     ,[a].[Title]
     ,[a].[Published]
     ,[a].[Notes]
    FROM dbo.Article A

    作成者の名前をマスクするためのビジネス要件

    ここで、この情報の機密性のために作成者名をマスクする必要があるというビジネス要件を受け取ったとします。このビジネス要件を満たす最善の方法は、DDMを使用して[名前]列をマスクすることです。

    著者名のマスキング

    次のようにデータマスキング機能を追加するために、テーブルを変更します。

    -- Masking Author column
    ALTER TABLE Article
    ALTER COLUMN [Author] varchar(50) MASKED WITH (FUNCTION = 'default()');

    マスキングステータスの確認

    Microsoftのドキュメントに記載されている次のT-SQLスクリプトを使用して、動的データマスキングのステータスをいつでも確認できます。

    -- Checking dynamic data masking status
    SELECT c.name, tbl.name as table_name, c.is_masked, c.masking_function  
    FROM sys.masked_columns AS c  
    JOIN sys.tables AS tbl   
        ON c.[object_id] = tbl.[object_id]  
    WHERE is_masked = 1;

    出力には、どの列が正常にマスクされたかが表示されます:

    データチェック

    次に、マスキングを適用したテーブルの上位5つのレコードをクエリして、データを確認します。

    -- View top 5 artices records
    SELECT TOP 5
      [a].[ArticleId]
     ,[a].[Category]
     ,[a].[Author]
     ,[a].[Title]
     ,[a].[Published]
     ,[a].[Notes]
    FROM dbo.Article A
    ORDER BY a.ArticleId

    出力は期待される結果を示していないようです:

    ご覧のとおり、Author列をマスクしたにもかかわらず、実際の値が表示されています。この動作の背後にある理由は、動的データマスキングを適用するために使用したアカウントが昇格された特権を持っているためです。そのため、現在のアカウントを使用してテーブルをクエリすると、マスクされたデータが元の形式で表示されます。
    解決策は選択権限を持つ新しいユーザーを作成します。

    テーブルに対する選択権限を持つユーザーの作成

    次に、次のように、Articleテーブルに対するSelect権限のみを持つログインなしで新しいデータベースユーザーを作成しましょう。

    -- Create ArticleUser to have Select access to Article table
    CREATE USER ArticleUser WITHOUT LOGIN;  
    GRANT SELECT ON Article TO ArticleUser;

    ArticleUserとして上位5つの記事を表示する

    次に、Selectステートメントを実行して、新しく作成されたユーザーArticleUserを選択権限のみで使用して上位5つの記事を取得します。

    -- Execute SELECT Article as ArtilceUser
    EXECUTE AS USER = 'ArticleUser';  
    
    -- View artices 
    SELECT TOP 5
      [a].[ArticleId]
     ,[a].[Category]
     ,[a].[Author]
     ,[a].[Title]
     ,[a].[Published]
     FROM dbo.Article A
    ORDER BY a.ArticleId
    
    -- Revert the User back to what user it was before
    REVERT;

    おめでとう!要件に従って、作成者列を正常にマスクしました。

    マスクされた列の削除

    次のT-SQLコマンドを発行するだけで、以前に適用した列に動的データマスキングをドロップできます。

    -- Removing dynamic data masking on Author column
    ALTER TABLE Article   
    ALTER COLUMN Author DROP MASKED;

    次の記事では、動的データマスキングのより高度な使用法が進行中であるため、連絡を取り合ってください。

    やるべきこと

    データベース内のテーブルの列をマスクできるようになったので、スキルをさらに向上させるために次のことを試してください。
    1。サンプルデータベースのCategory列をマスクしてみてください。
    2。 AuthorId、Name、Email列を使用してAuthorテーブルを作成し、Articleテーブルの外部キーとしてAuthorIdを渡してから、テストユーザーを作成してAuthorテーブルのName列とEmail列に動的データマスキングを適用してください。
    3.3。 SQLテーブルで動的データマスキングを正常に追加および削除できるように、動的データマスキングを作成および削除してみてください


    1. UptimeInfrastructureMonitorを使用してデータベースのパフォーマンスを追跡します

    2. MySQLでマージンを計算する方法

    3. Oracle SQL Developerで変数を使用するにはどうすればよいですか?

    4. MySQLデータベース開発のためのGearHost入門