다음을 통해 공유


Fabric 데이터 웨어하우징의 동적 데이터 마스킹

적용 대상:Microsoft Fabric의 ✅ SQL 분석 엔드포인트 및 웨어하우스

동적 데이터 마스킹에서는 권한이 없는 사용자로 마스킹하여 중요한 데이터 노출을 제한합니다. 애플리케이션의 보안 설계 및 코딩을 크게 간소화하는 데 사용됩니다.

동적 데이터 마스킹을 사용하면 관리자가 애플리케이션 계층에 미치는 영향을 최소화하면서 표시할 중요한 데이터의 양을 지정할 수 있게 하여 중요한 데이터에 대한 무단 액세스를 방지할 수 있습니다. 지정된 데이터베이스 필드에 동적 데이터 마스킹을 구성하여 쿼리의 결과 집합에서 중요한 데이터를 숨길 수 있습니다. 동적 데이터 마스킹을 사용하면 데이터베이스의 데이터가 변경되지 않으므로 마스킹 규칙이 쿼리 결과에 적용되어 기존 애플리케이션에서 사용할 수 있습니다. 많은 애플리케이션에서 기존 쿼리를 수정하지 않고 중요한 데이터를 마스킹할 수 있습니다.

  • 중앙 데이터 마스킹 정책은 데이터베이스의 중요한 필드에서 직접 작동합니다.
  • 중요한 데이터에 액세스할 수 있는 권한 있는 사용자 또는 역할을 지정합니다.
  • 동적 데이터 마스킹은 전체 마스킹 및 부분 마스킹 기능과 숫자 데이터에 대한 임의 마스크 기능을 갖추고 있습니다.
  • 간단한 Transact-SQL 명령에서 마스크를 정의하고 관리합니다.

동적 데이터 마스킹의 목적은 중요한 데이터의 노출을 제한하여 데이터에 대한 액세스 권한이 없는 사용자가 보지 못하게 하는 것이지 데이터베이스 사용자가 데이터베이스에 직접 연결하여 중요한 데이터 조각을 노출하는 과도한 쿼리를 실행하지 못하게 하는 것은 아닙니다.

동적 데이터 마스킹은 열 수준 보안행 수준 보안과 같은 다른 Fabric 보안 기능을 보완됩니다. 데이터베이스의 중요한 데이터를 보호하기 위해 이러한 데이터 보호 기능을 함께 사용하는 것이 좋습니다.

동적 데이터 마스크 정의

해당 열의 데이터를 난독 처리하기 위해 테이블의 열에 마스킹 규칙을 정의할 수 있습니다. 마스크에는 네 가지 유형이 있습니다.

함수 설명 예제
기본값 지정된 필드의 데이터 형식에 따라 전체 마스킹.

문자열 데이터 형식의 경우 필드의 크기가 4자 미만인 경우 XXXX 미만의 XXXX를 사용합니다(char, nchar, varchar, nvarchar, text, ntext).

숫자 데이터 형식(bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real)의 경우 0 값을 사용합니다.

날짜 및 시간 데이터 형식(date, datetime2, datetime, datetimeoffset, smalldatetime, time)의 경우 1900-01-01 00:00:00.0000000을 사용합니다.

이진 데이터 형식의 경우 단일 바이트의 ASCII 값 0을 사용합니다(binary, varbinary, image).
열 정의 구문 예시: Phone# varchar(12) MASKED WITH (FUNCTION = 'default()') NULL

변경 구문 예시: ALTER COLUMN Gender ADD MASKED WITH (FUNCTION = 'default()')
전자 메일 이메일 주소의 형식에서 이메일 주소의 첫 번째 문자와 상수 접미사 ".com"을 표시하는 마스킹 방법입니다. aXXX@XXXX.com; 정의 구문 예시: Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL

변경 구문 예시: ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')
임의 지정된 범위 내에서 임의 값으로 원래 값을 마스킹하기 위해 숫자 유형에서 사용할 임의 마스킹 함수입니다. 정의 구문 예시: Account_Number bigint MASKED WITH (FUNCTION = 'random([start range], [end range])')

변경 구문 예시: ALTER COLUMN [Month] ADD MASKED WITH (FUNCTION = 'random(1, 12)')
사용자 지정 문자열 첫 번째 및 마지막 문자를 표시하고 가운데에 사용자 지정 안쪽 여백 문자열을 추가하는 마스킹 방법입니다. prefix,[padding],suffix

원래 값이 너무 짧아서 전체 마스크를 완료할 수 없는 경우 접두사 또는 접미사 부분이 표시되지 않습니다.
정의 구문 예시: FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(prefix,[padding],suffix)') NULL

변경 구문 예시: ALTER COLUMN [Phone Number] ADD MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)')

이렇게 하면 555.123.1234와 같은 전화 번호가 5XXXXXXX로 바뀝니다.

추가 예시:

ALTER COLUMN [Phone Number] ADD MASKED WITH (FUNCTION = 'partial(5,"XXXXXXX",0)')

이렇게 하면 555.123.1234와 같은 전화 번호가 555.1XXXXXXX로 바뀝니다.

더 많은 예시를 보려면 Synapse Data Warehouse에서 동적 데이터 마스킹을 구현하는 방법을 참조하세요.

사용 권한

작업 영역에 대한 관리자, 구성원 또는 기여자 권한이 없고, 웨어하우스에 대한 상승된 권한이 없는 사용자는 마스킹된 데이터를 볼 수 있습니다.

동적 데이터 마스크로 테이블을 만드는 데에는 특별한 권한이 필요하지 않습니다. 스키마 권한에 대한 표준 CREATE TABLEALTER만 있으면 됩니다.

열 마스크를 추가, 대체 또는 제거하려면 테이블에서 ALTER ANY MASK 권한 및 ALTER 권한이 필요합니다. 보안 관리자에게 ALTER ANY MASK를 부여하는 것이 적절합니다.

테이블에 대한 권한이 있는 SELECT 사용자는 테이블 데이터를 볼 수 있습니다. 마스킹된 것으로 정의된 열에는 마스킹된 데이터가 표시됩니다. 마스킹이 정의된 열에서 UNMASK 마스킹되지 않은 데이터를 검색할 수 있도록 사용자에게 권한을 부여합니다.

데이터베이스에 대한 CONTROL 권한에는 사용자가 마스킹되지 않은 데이터를 볼 수 있도록 하는 ALTER ANY MASK 권한과 UNMASK 권한이 모두 포함됩니다. 관리자, 구성원, 기여자와 같은 관리자 또는 역할은 설계상 데이터베이스에 대한 CONTROL 권한을 가지며 마스킹되지 않은 데이터를 볼 수 있습니다. 웨어하우스에 대한 상승된 권한에는 사용 CONTROL 권한이 포함됩니다.

보안 고려 사항: 유추 또는 무차별 대입 기술을 사용하여 마스킹 바이패스

동적 데이터 마스킹은 애플리케이션에서 사용되는 미리 정의된 쿼리 집합에서 데이터 노출을 제한하여 애플리케이션 개발을 간소화하도록 설계되었습니다. 동적 데이터 마스킹은 데이터에 직접 액세스하는 경우 중요한 데이터를 실수로 노출하지 않도록 하는 데 유용할 수 있지만, 쿼리 권한이 있는 권한 없는 사용자가 실제 데이터에 액세스하기 위해 기술을 사용할 수 있음을 알고 있어야 합니다.

예를 들어 웨어하우스에서 쿼리를 실행할 수 있는 충분한 권한이 있는 사용자가 기본 데이터를 '추측'하고 궁극적으로 실제 값을 추론하려는 경우를 생각해 보겠습니다. [Employee].[Salary] 열에 마스크를 정의하고 이 사용자가 직접 데이터베이스에 연결하여 값 추측을 시작하면서 결국 Employees 테이블의 [Salary] 값을 유추한다고 가정해보겠습니다.

SELECT ID, Name, Salary FROM Employees
WHERE Salary > 99999 and Salary < 100001;

결과:

ID 속성 급여
62543 Jane Doe 0
91245 John Smith 0

이는 동적 데이터 마스킹을 단독으로 사용하여 웨어하우스 또는 SQL 분석 엔드포인트에 대한 쿼리 액세스 권한이 있는 사용자의 중요한 데이터를 완벽하게 보호해서는 안 된다는 것을 보여 줍니다. 중요한 데이터의 노출을 방지하는 데는 적절하지만, 기본 데이터를 유추하려는 악의적인 의도로부터는 보호되지 않습니다.

SQL 세부 권한으로 개체 수준 보안을 적절히 관리하고 항상 필요한 최소 권한 원칙에 따르는 것이 중요합니다.

다음 단계