동적 데이터 마스킹 (DDM)SQL Server 2016에 추가 된 유용한 기능입니다. DDM을 사용하면 인증되지 않은 사용자의 민감한 데이터를 숨길 수 있습니다. 가장 중요한 것은 데이터 마스킹과 암호화는 데이터를 보호하는 두 가지 방법입니다. 동적 데이터 마스킹은 여러 가지 전략을 사용하여 데이터를 숨 깁니다. SQL Server에서 저장된 데이터를 암호화 기능으로 수정하지 않으면 도움이됩니다.
다이내믹 데이터 마스킹은 헬스 케어, 뱅킹 도메인에서 광범위하게 사용되어 권한이없는 엔티티의 데이터 기밀성을 유지하기위한 엄격한 조치를 취할 수 있습니다. DDM을 통해 우리는 응용 프로그램 코드 및 쿼리를 수정하지 않고 기존 저장된 데이터를 보호.
사례 연구로서 개발자는신원, 연락처, 신용 카드 번호 및 재무 기록과 같은 고객의 건강 및 은행 기록이있는 생산 데이터에 노출됩니다. 타사 영업 담당자는 자신의 제품을 마케팅하는 데 사용할 수있는 고객의 보험 내역을 알고 있어야합니다.
따라서 동적 데이터 마스킹은 기밀 데이터를 일반 텍스트 형식으로 무단 사용자에게 노출하는 것을 제한 읽기 권한이 있어도.
마스킹 기능을 테스트 할 새 사용자 작성
동적 데이터 마스킹 쿼리를 진행하기 전에. 우리는 새로운 사용자를 만들 것입니다 MaskedTestUser 갖는 것 고르다 아래에 생성 된 테이블에 대한 권한 dbo 사용자. 마스크 된 열 기능을 사용하여 dbo 사용자 아래에 테이블을 만들고 MaskedTestUser를 사용하여 쿼리하여 마스크 된 데이터를 봅니다. MaskedTestUser는 실제 데이터에 액세스 할 수없는 권한이없는 사용자라고 가정합니다.
DROP USER IF EXISTS MaskedTestUser;
CREATE USER MaskedTestUser WITHOUT LOGIN;
SQL Server에서 마스킹 기능 및 지원되는 데이터 형식
SQL Server는 서로 다른 네 가지를 통합했습니다민감한 데이터를 마스크하는 기능. XML, varbinary 및 hierarchyid와 같은 일부 특수 데이터 유형과 함께 문자열, 숫자 및 날짜와 같은 가능한 모든 데이터 유형과 작동하도록 설계되었습니다.
기능과 사용법을 이해하기 위해 각각을 살펴 보겠습니다.
1. 태만
데이터의 전체 마스킹 기본 마스킹 기능을 사용하여 달성 할 수 있습니다. 가능한 모든 데이터 유형과 호환 SQL Server에서. 마스크 된 데이터는 마스크 된 열의 데이터 유형에 따라 표시됩니다. 문자열 데이터 유형은 IdentityNumber 및 Phone 열과 같은 XXXX 문자를 사용하여 표시됩니다. 숫자 데이터 유형은 0으로 표시됩니다. 날짜는 DateOfBirth 열과 같은 기본 날짜 '1900-01-01'로 표시됩니다.
데모 목적으로 샘플 데이터를 마스킹 열로 채 웁니다.
DROP TABLE IF EXISTS DefaultMaskTest;
CREATE TABLE DefaultMaskTest
(
ID INT IDENTITY (1,1) PRIMARY KEY NOT NULL
,DefaultMask_Varchar VARCHAR(255) MASKED WITH (FUNCTION = 'default()') NULL
,DefaultMask_Char CHAR(1) MASKED WITH (FUNCTION = 'default()') NOT NULL
,DefaultMask_Bit BIT MASKED WITH (FUNCTION = 'default()') NOT NULL
,DefaultMask_Date DATE MASKED WITH (FUNCTION = 'default()') NOT NULL
,DefaultMask_DateTime DATETIME MASKED WITH (FUNCTION = 'default()') NOT NULL
,DefaultMask_Time TIME MASKED WITH (FUNCTION = 'default()') NOT NULL
,DefaultMask_Integer BIGINT MASKED WITH (FUNCTION = 'default()') NOT NULL
,DefaultMask_Decimal DECIMAL(9,2) MASKED WITH (FUNCTION = 'default()') NOT NULL
,DefaultMask_XML XML MASKED WITH (FUNCTION = 'default()') NOT NULL
);
GO
INSERT INTO DefaultMaskTest
(
DefaultMask_Varchar, DefaultMask_Char, DefaultMask_Bit, DefaultMask_Date, DefaultMask_DateTime, DefaultMask_Time
, DefaultMask_Integer, DefaultMask_Decimal, DefaultMask_XML
)
VALUES
(
'Chetan Sharma', 'M', 1, '2020-06-12', '2021-06-12 12:23:32:543', '08:12:46:342'
, 5282991, 45628.39,'<root>Tech-Recipes</root>'
);
다음 쿼리는 MaskedTestUser 및 dbo 사용자에게 마스크 된 데이터가 표시되는 방법을 보여줍니다.
--Drop & Create User - MaskedTestUser
DROP USER IF EXISTS MaskedTestUser;
CREATE USER MaskedTestUser WITHOUT LOGIN;
--Query table using dbo user
SELECT * FROM DefaultMaskTest;
--Grant SELECT permission to MaskedTestUser
GRANT SELECT ON DefaultMaskTest TO MaskedTestUser;
--Query table using MaskedTestUser
EXECUTE AS USER = 'MaskedTestUser';
SELECT * FROM DefaultMaskTest;
--Revert user impersonation to dbo user
REVERT;
2.부분
부분 기능 문자열 데이터 유형에서만 작동. 데이터의 부분 마스킹에 문자가 거의 없음문자열의 시작 또는 끝에서 기본 'XXXX'문자를 사용하는 대신 맞춤 문자열을 사이에 삽입 할 수 있습니다. 위의 예에서 CreditCard 열은 partial (2,“XXXXXXX”, 0) 방법을 사용하여 마스킹되어 처음 두 문자 만 표시하고 사용자 정의 가능한 X 문자를 추가합니다.
데모 목적으로 샘플 데이터를 마스킹 열로 채 웁니다.
DROP TABLE IF EXISTS PartialMaskTest;
CREATE TABLE PartialMaskTest
(
ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL
,PartialMask_Varchar VARCHAR(255) MASKED WITH (FUNCTION = 'partial(1, "XXXX",1)') NOT NULL
,PartialMask_Nvarchar NVARCHAR(255)MASKED WITH (FUNCTION = 'partial(2, "ABCDEFG",3)') NOT NULL
);
GO
INSERT INTO PartialMaskTest
(
PartialMask_Varchar
,PartialMask_Nvarchar
)
VALUES
(
'I am on tech-recipes.com'
,'SQL Server keep rocking'
);
다음 쿼리는 MaskedTestUser 및 dbo 사용자에게 마스크 된 데이터가 표시되는 방법을 보여줍니다.
--Drop & Create User - MaskedTestUser
DROP USER IF EXISTS MaskedTestUser;
CREATE USER MaskedTestUser WITHOUT LOGIN;
--Query table using dbo (owner) user
SELECT * FROM PartialMaskTest;
--Grant SELECT permission to MaskedTestUser
GRANT SELECT ON PartialMaskTest TO MaskedTestUser;
--Query table using MaskedTestUser
EXECUTE AS USER = 'MaskedTestUser';
SELECT * FROM PartialMaskTest;
--Revert user impersonation to dbo user
REVERT;
3.이메일
이메일, 중요한 기능을 고려하여 이메일 ID를 마스킹하는 특정 기능인 이메일. 이메일 기능은 문자열 데이터 유형에서만 작동합니다. 에 이메일 ID 및 도메인 이름 마스킹 ‘[이메일 보호]’ 첫 문자를 그대로 유지하고 도메인 이름을 .COM으로 변경합니다. 고객 테이블의 EmailId 열이에서 마스크되었습니다. [이메일 보호] 에 [이메일 보호]. 부분 기능조차도 이메일 기능 사용을 다음과 같이 복제 할 수 있습니다 부분적 (1, '[이메일 보호]’, 0).
이메일 기능이 작동하는지 확인하기 위해 샘플 데이터를 마스킹 열로 채 웁니다.
DROP TABLE IF EXISTS EmailMaskTest;
CREATE TABLE EmailMaskTest
(
ID INT IDENTITY (1,1) PRIMARY KEY NOT NULL
,EmailMask VARCHAR(255) MASKED WITH (FUNCTION = 'email()') NOT NULL
);
GO
INSERT INTO EmailMaskTest
(
EmailMask
)
VALUES ('[email protected]'),
('[email protected]'),
('[email protected]');
다음 쿼리는 MaskedTestUser 및 dbo 사용자에게 마스크 된 데이터가 표시되는 방법을 보여줍니다.
--Drop & Create User - MaskedTestUser
DROP USER IF EXISTS MaskedTestUser;
CREATE USER MaskedTestUser WITHOUT LOGIN;
--Query table using dbo (owner) user
SELECT * FROM EmailMaskTest;
--Grant SELECT permission to MaskedTestUser
GRANT SELECT ON EmailMaskTest TO MaskedTestUser;
--Query table using MaskedTestUser
EXECUTE AS USER = 'MaskedTestUser';
SELECT * FROM EmailMaskTest;
--Revert user impersonation to dbo user
REVERT;
4.무작위
마스킹 숫자 데이터 유형 열 원래 값에 난수를 사용합니다. 정의 된 범위 사이에서 난수를 생성 할 수 있습니다. 고객 테이블의 급여 열이 랜덤 (1,10) – 1에서 10 사이의 난수 만 생성합니다. 우리는 다음을 사용하여 소수 범위를 정의 할 수 있습니다 무작위 (0.1,0.75).
DROP TABLE IF EXISTS RandomMaskTest;
CREATE TABLE RandomMaskTest
(
ID INT IDENTITY (1,1) PRIMARY KEY NOT NULL
,RandomMask_INT INT MASKED WITH (FUNCTION = 'random(1,999)') NOT NULL
,RandomMask_BIGINT BIGINT MASKED WITH (FUNCTION = 'random(1000,2000)') NOT NULL
,RandomMask_DECIMAL DECIMAL(9,2) MASKED WITH (FUNCTION = 'random(1.1,10.5)') NOT NULL
);
GO
INSERT INTO RandomMaskTest
(
RandomMask_INT
,RandomMask_BIGINT
,RandomMask_DECIMAL
)
VALUES
(33405691, 401204193524, 311531.56);
다음 쿼리는 MaskedTestUser 및 dbo 사용자에게 마스크 된 데이터가 표시되는 방법을 보여줍니다.
--Drop & Create User - MaskedTestUser
DROP USER IF EXISTS MaskedTestUser;
CREATE USER MaskedTestUser WITHOUT LOGIN;
--Query table using dbo (owner) user
SELECT * FROM RandomMaskTest;
--Grant SELECT permission to MaskedTestUser
GRANT SELECT ON RandomMaskTest TO MaskedTestUser;
--Query table using MaskedTestUser
EXECUTE AS USER = 'MaskedTestUser';
SELECT * FROM RandomMaskTest;
--Revert user impersonation to dbo user
REVERT;
마스킹 기능 및 데이터 유형 호환성
마스킹 기능은 지원되는 데이터와 작동유형 만. 호환되지 않는 데이터 형식으로 마스킹 기능을 사용하려고하면 SQL Server에서 다음 오류가 발생합니다. 문자 데이터 유형에 임의의 함수를 사용하려고 할 때. 임의 함수는 숫자 데이터 유형과 만 호환됩니다.
16003 메시지, 수준 16, 상태 0, 줄 21열 'IdentityNumber'의 데이터 유형은 데이터 마스킹 기능 'random'을 지원하지 않습니다.</br>
데이터베이스에서 마스크 된 열 쿼리
추가 sys.masked_columns 뷰는 데이터베이스의 모든 마스크 열을 포함합니다. 이를 사용하여 마스크 된 열 이름, 마스킹 기능 및 관련 테이블 이름을 쿼리 할 수 있습니다.
SELECT OBJECT_NAME(mc.object_id) as TableName
,mc.name as ColumnName
,TYPE_NAME(system_type_id) as DataType
,mc.is_masked as IsMasked
,mc.masking_function as MaskingFunction
FROM sys.masked_columns as mc
WHERE mc.is_masked = 1;
테이블 문을 만들기 위해 다중 마스킹 기능 추가
우리는 이미 유용한 예제를 통해 각 마스킹 기능을 자세히 살펴 보았습니다. 요구 사항에 따라 모든 마스킹 기능이 포함 된 테이블을 만들고 출력을 봅시다.
사용자 역할 및 권한 이해는중대한. MaskedTestUser는 실제 데이터를 볼 수있는 권한이 없으므로 마스크 된 데이터가 그에게 표시되지만 권한이있는 사용자 및 고객 테이블 소유자 인 dbo는 사용 가능한 모든 데이터를 일반 텍스트로 볼 수 있습니다.</br>
Use tempdb;
DROP TABLE IF EXISTS Customer;
CREATE TABLE Customer
(
Id INT IDENTITY(1,1)
,DateOfBirth DATE MASKED WITH (FUNCTION = 'default()') NOT NULL
,EmailId VARCHAR(255) MASKED WITH (FUNCTION = 'email()') NOT NULL
,IdentityNumber VARCHAR(11) MASKED WITH (FUNCTION = 'default()') NOT NULL
,Phone VARCHAR(11) MASKED WITH (FUNCTION = 'default()') NOT NULL
,Salary INT MASKED WITH (FUNCTION = 'random(1,9)') NOT NULL
,CreditCard VARCHAR(20) MASKED WITH (FUNCTION = 'partial(2,"XXXXXX",0)') NOT NULL
);
INSERT INTO Customer (DateOfBirth, EmailId, IdentityNumber, Phone, Salary, CreditCard)
VALUES ('1985-10-28', '[email protected]', 'BZVLPE1258Q', '98564533213', 85000, '9764-3451-0916-1047');
다음 쿼리는 MaskedTestUser 및 dbo 사용자에게 마스크 된 데이터가 표시되는 방법을 보여줍니다.
--Drop and Create MaskedTestUser
DROP USER IF EXISTS MaskedTestUser;
CREATE USER MaskedTestUser WITHOUT LOGIN;
--Query table using dbo user
SELECT * FROM Customer;
--Grant SELECT permission to MaskedTestUser
GRANT SELECT ON Customer TO MaskedTestUser;
--Query table using MaskedTestUser
EXECUTE AS USER = 'MaskedTestUser';
SELECT * FROM Customer;
--Revert user impersonation to dbo user
REVERT;
테이블의 기존 열에 마스킹 기능 추가
ALTER TABLE Customer DROP COLUMN IF EXISTS AccountNumber;
ALTER TABLE Customer
ADD AccountNumber INT;
ALTER TABLE Customer
ALTER COLUMN AccountNumber ADD MASKED WITH (FUNCTION = 'random(1000,5000)');
개요
동적 데이터 마스킹은 권한이 없는 사용자로부터 민감한 데이터를 숨기는 데 유용합니다. 데이터 기밀성이 비즈니스에 중요한 경우에 사용할 수 있습니다.
'Database > SQL Server' 카테고리의 다른 글
조인 조건자 없음 (0) | 2020.08.27 |
---|---|
DB 보안 (0) | 2020.08.27 |
Missing Index (0) | 2020.08.27 |
인덱스 리빌드는 통계를 업데이트 할까? (0) | 2020.08.27 |
INDEX 인덱스 상세 정보 확인 (0) | 2020.08.27 |