다음을 통해 공유


Hive 메타스토어 권한 및 보안 개체(레거시)

이 문서에서는 각 Azure Databricks 작업 영역에 기본 제공되는 레거시 Azure Databricks Hive 메타스토어에 대한 권한 모델을 설명합니다. 또한 기본 제공 Hive 메타스토어에서 개체에 대한 권한을 부여, 거부 및 취소하는 방법에 대해서도 설명합니다. Unity 카탈로그는 권한을 부여하기 위해 다른 모델을 사용합니다. Unity Catalog 권한 및 보안 개체을 참조하세요.

참고 항목

Hive 메타스토어에서 관리하는 데이터에 대한 테이블 액세스 제어는 레거시 데이터 거버넌스 모델입니다. Databricks는 Hive 메타스토어에서 관리하는 테이블을 Unity 카탈로그 메타스토어업그레이드할 권장합니다. Unity 카탈로그는 계정의 여러 작업 영역에서 데이터 액세스를 관리하고 감사하는 중앙 위치를 제공하여 데이터의 보안 및 거버넌스를 간소화합니다. 레거시 권한 모델이 Unity 카탈로그 권한 모델과 어떻게 다른지에 대한 자세한 내용은 Unity 카탈로그 작업 및 레거시 Hive 메타스토어참조하세요.

요구 사항

참고 항목

  • 데이터브릭스 SQL에서 데이터 액세스 제어는 작업 영역에 대해 테이블 액세스 제어가 사용하도록 설정되지 않은 경우에도 항상 사용하도록 설정됩니다.
  • 작업 영역에 대해 테이블 액세스 제어를 사용하도록 설정하고 작업 영역에서 ACL(부여 및 거부된 권한)을 이미 지정한 경우 해당 ACL은 Databricks SQL에서 적용됩니다.

Hive 메타스토어의 개체에 대한 권한 관리

Hive 메타스토어에서 관리하는 데이터 개체에 대한 권한은 작업 영역 관리자 또는 개체 소유자가 부여할 수 있습니다. SQL 명령을 사용하여 Hive 메타스토어 개체에 대한 권한을 관리할 수 있습니다.

SQL에서 권한을 관리하려면 다음 구문을 사용하여 notebook 또는 Databricks SQL 쿼리 편집기에서 GRANT, REVOKE, DENY, MSCKSHOW GRANTS 문을 사용합니다.

GRANT privilege_type ON securable_object TO principal

어디:

작업 영역의 모든 사용자에게 권한을 부여하려면 users 그룹에 권한을 부여합니다. 예시:

GRANT SELECT ON TABLE <schema-name>.<table-name> TO users

SQL 명령을 사용하여 Hive 메타스토어의 개체에 대한 권한을 관리하는 방법에 대한 자세한 내용은 Hive 메타스토어의 Privileges 및 보안 개체를 참조 하세요.

Databricks Terraform 공급자 및 databricks_sql_permissions사용하여 완전히 자동화된 설정에서 테이블 액세스 제어를 관리할 수도 있습니다.

개체 소유권

클러스터 또는 SQL 웨어하우스에서 테이블 액세스 제어를 사용하도록 설정하면 스키마, 테이블, 뷰 또는 함수를 만드는 사용자가 해당 소유자가 됩니다. 소유자에게 모든 권한이 부여되며 다른 사용자에게 권한을 부여할 수 있습니다.

그룹은 개체를 소유할 수 있으며 해당 그룹의 모든 멤버는 소유자로 간주됩니다.

개체의 소유자 또는 작업 영역 관리자는 다음 명령을 사용하여 개체의 소유권을 이전할 수 있습니다.

ALTER <object> OWNER TO `<user-name>@<user-domain>.com`

참고 항목

클러스터 또는 SQL 웨어하우스에서 테이블 액세스 제어를 사용하지 않도록 설정하면 스키마, 테이블 또는 뷰를 만들 때 소유자가 등록되지 않습니다. 작업 영역 관리자는 명령을 사용하여 ALTER <object> OWNER TO 개체에 소유자를 할당해야 합니다.

Hive 메타스토어의 보안 개체

보안 개체는 다음과 같습니다.

  • CATALOG: 전체 데이터 카탈로그에 대한 액세스를 제어합니다.

    • SCHEMA: 스키마에 대한 액세스를 제어합니다.
      • TABLE: 관리되는 테이블 또는 외부 테이블에 대한 액세스를 제어합니다.
      • VIEW: SQL 뷰에 대한 액세스를 제어합니다.
      • FUNCTION: 명명된 함수에 대한 액세스를 제어합니다.
  • ANONYMOUS FUNCTION: 익명 또는 임시 함수에 대한 액세스를 제어합니다.

    참고 항목

    ANONYMOUS FUNCTION 개체는 Databricks SQL에서 지원되지 않습니다.

  • ANY FILE: 기본 파일 시스템에 대한 액세스를 제어합니다.

    Warning

    ANY FILE 대한 액세스 권한이 부여된 사용자는 파일 시스템으로부터 직접 읽어 카탈로그, 스키마, 테이블 및 뷰에 적용된 제한을 무시할 수 있습니다.

참고 항목

전역 및 로컬 임시 보기에 대한 권한은 지원되지 않습니다. 로컬 임시 뷰는 동일한 세션 내에서만 표시되며 global_temp 스키마에서 만든 보기는 클러스터 또는 SQL 웨어하우스를 공유하는 모든 사용자에게 표시됩니다. 그러나 임시 뷰에서 참조하는 기본 테이블 및 뷰에 대한 권한이 적용됩니다.

Hive 메타스토어 개체에 부여할 수 있는 권한

  • SELECT: 개체에 대한 읽기 권한을 부여합니다.
  • CREATE: 개체를 만드는 기능(예: 스키마의 테이블)을 제공합니다.
  • MODIFY: 개체에 또는 개체로부터 데이터를 추가, 삭제, 수정할 수 있는 기능을 제공합니다.
  • USAGE: 기능을 제공하지 않지만 스키마 개체에 대한 작업을 수행하기 위한 추가 요구 사항입니다.
  • READ_METADATA: 개체와 해당 메타데이터를 볼 수 있는 기능을 제공합니다.
  • CREATE_NAMED_FUNCTION: 기존 카탈로그 또는 스키마에서 명명된 UDF를 만드는 기능을 제공합니다.
  • MODIFY_CLASSPATH: Spark 클래스 경로에 파일을 추가하는 기능을 제공합니다.
  • ALL PRIVILEGES: 모든 권한을 부여합니다(위의 모든 권한으로 변환됨).

참고 항목

MODIFY_CLASSPATH 권한은 Databricks SQL에서 지원되지 않습니다.

USAGE 권한

Hive 메타스토어의 스키마 개체에 대한 작업을 수행하려면 사용자는 해당 작업을 수행할 수 있는 권한 외에도 해당 스키마에 대한 USAGE 권한이 있어야 합니다. 다음 중 하나가 요구 사항을 충족합니다 USAGE .

  • 작업 영역 관리자 되기
  • 스키마에 대한 USAGE 권한이 있거나 스키마에 대한 USAGE 권한이 있는 그룹에 있어야 합니다.
  • USAGE에 대한 CATALOG 권한이 있거나 USAGE 권한이 있는 그룹에 있어야 합니다.
  • 스키마의 소유자이거나 스키마를 소유한 그룹에 있어야 합니다.

스키마 내의 개체 소유자도 사용하려면 USAGE 권한이 있어야 합니다.

권한 계층 구조

작업 영역 및 모든 클러스터에서 테이블 액세스 제어를 사용하도록 설정하면 Azure Databricks의 SQL 개체는 계층적이며 권한은 아래쪽으로 상속됩니다. 즉, CATALOG 권한을 부여하거나 거부하면 카탈로그의 모든 스키마에 대한 권한이 자동으로 부여되거나 거부됩니다. 마찬가지로 스키마 개체에 부여된 권한은 해당 스키마의 모든 개체에서 상속됩니다. 이 패턴은 모든 보안 개체에 적용됩니다.

테이블에 대한 사용자 권한을 거부하는 경우 스키마의 모든 테이블을 나열하려고 시도하여 테이블을 볼 수 없습니다. 스키마에 대한 사용자 권한을 거부하는 경우 사용자는 카탈로그의 모든 스키마를 나열하려고 시도하여 스키마가 존재하는 것을 볼 수 없습니다.

동적 뷰 함수

Azure Databricks에는 Hive 메타스토어에서 관리되는 뷰 정의 본문에서 열 및 행 수준 권한을 동적으로 표현할 수 있는 두 가지 사용자 함수가 포함되어 있습니다.

  • current_user(): 현재 사용자 이름을 반환합니다.
  • is_member(): 현재 사용자가 작업 영역 수준에서 특정 Azure Databricks 그룹의 구성원인지 확인합니다.

다음 예제에서는 두 함수를 결합하여 사용자에게 적절한 그룹 멤버 자격이 있는지 확인합니다.

-- Return: true if the user is a member and false if they are not
SELECT
  current_user as user,
-- Check to see if the current user is a member of the "Managers" group.
  is_member("Managers") as admin

열 수준 권한

동적 보기를 사용하여 특정 그룹 또는 사용자가 볼 수 있는 열을 제한할 수 있습니다. auditors 그룹에 속한 사용자만 sales_raw 테이블에서 전자 메일 주소를 볼 수 있는 다음 예제를 살펴보겠습니다. 분석 시 Spark는 CASE 문을 리터럴 'REDACTED' 또는 열 email로 바꿉니다. 이 동작을 사용하면 Spark에서 제공하는 모든 일반적인 성능 최적화를 할 수 있습니다.

-- 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_group_member('auditors') THEN email
    ELSE 'REDACTED'
  END AS email,
  country,
  product,
  total
FROM sales_raw

행 수준 권한

동적 보기를 사용하여 행 또는 필드 수준까지 권한을 지정할 수 있습니다. 다음 예제에서는 managers 그룹에 속한 사용자만 $1,000,000.00보다 큰 트랜잭션 금액(total 열)을 볼 수 있습니다.

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

데이터 마스킹

앞의 예제와 같이 사용자가 올바른 그룹에 있지 않으면 사용자가 특정 열 데이터를 볼 수 없도록 열 수준 마스킹을 구현할 수 있습니다. 이러한 뷰는 표준 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_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END
  FROM sales_raw