다음을 통해 공유


동적 뷰 만들기

Unity 카탈로그에서 동적 뷰를 사용하여 다음을 비롯한 세분화된 액세스 제어를 구성할 수 있습니다.

  • 열 또는 행 수준의 보안.
  • 데이터 마스킹.

Unity 카탈로그에는 뷰에서 행, 열 또는 레코드에 액세스할 수 있는 사용자를 동적으로 제한할 수 있는 다음 함수가 도입되었습니다.

  • current_user(): 현재 사용자의 이메일 주소를 반환합니다.
  • is_account_group_member(): 현재 사용자가 특정 계정 수준 그룹의 멤버면 TRUE를 반환합니다. Unity 카탈로그 데이터는 동적 뷰에서 사용하는 것을 권장합니다.
  • is_member(): 현재 사용자가 특정 작업 영역 수준 그룹의 멤버면 TRUE를 반환합니다. 이 함수는 기존 Hive 메타스토어와의 호환성을 위해 제공됩니다. 계정 수준의 그룹 멤버 자격을 평가하지 않으므로 Unity 카탈로그 데이터에 대한 뷰와 함께 사용하지 마세요.

Azure Databricks는 사용자에게 보기에서 참조되는 테이블 및 뷰를 읽을 수 있는 기능을 부여하지 않는 것이 좋습니다.

다음 예제에서는 Unity 카탈로그에서 동적 뷰를 만드는 방법을 보여 줍니다.

시작하기 전에

동적 보기를 만들거나 읽으려면 컴퓨팅 요구 사항을 제외하고 표준 뷰에 대한 요구 사항은 동일합니다. 다음 컴퓨팅 리소스 중 하나를 사용해야 합니다.

  • SQL 웨어하우스.

  • 공유 액세스 모드를 사용하여 컴퓨팅합니다.

  • Databricks Runtime 15.4 LTS 이상에서 단일 사용자 액세스 모드를 사용하는 컴퓨팅(공개 미리 보기).

    Databricks Runtime 15.3 이하에서는 단일 사용자 컴퓨팅을 사용하여 동적 보기를 읽을 수 없습니다.

    Databricks Runtime 15.4 LTS 이상에서 제공하는 데이터 필터링을 활용하려면 동적 보기를 지원하는 데이터 필터링 기능이 서버리스 컴퓨팅에서 실행되기 때문에 작업 영역이 서버리스 컴퓨팅에 사용하도록 설정되어 있는지도 확인해야 합니다. 따라서 단일 사용자 컴퓨팅을 사용하여 동적 보기를 읽을 때 서버리스 컴퓨팅 리소스에 대한 요금이 부과될 수 있습니다. 단일 사용자 컴퓨팅에 대한 세분화된 액세스 제어를 참조 하세요.

서버 수준 사용 권한

동적 뷰를 사용하면 특정 사용자 또는 그룹이 액세스할 수 있는 열을 제한할 수 있습니다. 다음 예제에서는 auditors 그룹의 멤버만 sales_raw 테이블의 이메일 주소에 액세스할 수 있습니다. 쿼리 분석 중에 Apache Spark는 CASE 문을 리터럴 문자열 REDACTED 또는 이메일 주소 열의 실제 내용으로 바꿉니다. 다른 열은 정상적으로 반환됩니다. 이 전략은 쿼리 성능에 부정적인 영향을 주지 않습니다.

-- Alias the field 'email' to itself (as 'email') to prevent the
-- permission logic from showing up directly in the column name results.
CREATE VIEW sales_redacted AS
SELECT
  user_id,
  CASE WHEN
    is_account_group_member('auditors') THEN email
    ELSE 'REDACTED'
  END AS email,
  country,
  product,
  total
FROM sales_raw

행 수준 권한

동적 뷰를 사용하면 행 또는 필드 수준까지 권한을 지정할 수 있습니다. 다음 예제에서는 트랜잭션 금액이 $1,000,000를 초과하는 경우 managers 그룹의 멤버만 트랜잭션 금액을 볼 수 있습니다. 일치하는 결과 중 다른 사용자의 결과는 필터링됩니다.

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  country,
  product,
  total
FROM sales_raw
WHERE
  CASE
    WHEN is_account_group_member('managers') THEN TRUE
    ELSE total <= 1000000
  END;

데이터 마스킹

Unity 카탈로그의 뷰는 Spark SQL을 사용하므로 더 복잡한 SQL 식과 정규식을 사용하여 고급 데이터 마스킹을 구현할 수 있습니다. 다음 예에서는 모든 사용자가 이메일 도메인을 분석할 수 있지만 auditors 그룹의 멤버만 사용자의 전체 이메일 주소를 볼 수 있습니다.

-- The regexp_extract function takes an email address such as
-- user.x.lastname@example.com and extracts 'example', allowing
-- analysts to query the domain name.

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  region,
  CASE
    WHEN is_account_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END
  FROM sales_raw