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

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

참고 항목

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

요구 사항

참고 항목

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

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

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

SQL에서 권한을 관리하려면 다음 구문을 사용하여 Notebook 또는 Databricks SQL 쿼리 편집기에서 GRANT, REVOKE, DENY, MSCK 및 SHOW 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 권한이 있는 그룹에 있어야 합니다.
  • CATALOG에 대한 USAGE 권한이 있거나 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