면책 조항:블로그에 표현된 모든 견해와 의견은 저자에게만 속하며, 저자의 고용주나 다른 그룹 또는 개인과는 반드시 일치하지 않습니다. 이 기사는 어떠한 클라우드/데이터 관리 플랫폼의 홍보가 아닙니다. 모든 이미지와 코드 조각은 Azure/Databricks 웹사이트에서 공개적으로 사용 가능합니다..
이 기사에서는 Unity Catalog 스키마 수준에서 권한 관리를 자동화하는 스크립트를 제공하겠습니다.
Unity Catalog 스키마 수준에서의 권한
Unity Catalog의 계층적 권한 모델은 사용자가 계층의 어느 수준에서든 권한을 적용할 수 있게 하며, 하위 객체는 자동으로 동일한 권한을 상속받습니다. 따라서 스키마 수준에서 권한이 적용되면 해당 스키마 내의 모든 테이블, 뷰, 볼륨 및 함수에 자동으로 적용됩니다.
Unity Catalog (Databricks)에서 스키마 수준의 권한은 특정 스키마 내의 테이블 및 뷰 집합에 대한 접근을 제어하고자 할 때 적용됩니다. 스키마 수준의 권한은 일반적으로 다음과 같은 시나리오에서 적용됩니다:
- 객체 그룹에 대한 접근 부여: 여러 테이블과 뷰에 대한 권한을 집합적으로 관리하고 싶다면 각 테이블이나 뷰마다 개별적으로 권한을 부여하기보다는 스키마 수준에서 권한을 부여하는 것이 효율적입니다. 이를 통해 해당 스키마 내의 모든 객체에 대한 접근을 동시에 제어할 수 있습니다.
- 조직적 통제: 조직 내 다른 팀이나 부서가 특정 데이터 집합에 액세스해야 할 때, 해당 데이터는 별도의 스키마로 저장됩니다. 스키마 수준의 권한을 적용하면 해당 스키마 내 팀에 관련된 모든 객체에 대한 액세스를 승인하거나 제한할 수 있습니다.
- 일관된 권한 관리: 새로운 객체(테이블/뷰)가 스키마에 자주 추가되는 환경에서, 스키마 수준에서 권한을 설정하면 새로운 객체가 권한을 자동으로 상속받아 수동 권한 업데이트를 줄일 수 있습니다.
- 데이터 보안 유지: 특정 데이터 집합 범주(예: 금융 데이터, 인사 데이터)에 대한 액세스 제어를 강제하려는 경우, 해당 스키마 하위에 논리적으로 구성된 데이터 집합에 대한 권한을 설정함으로써 데이터 보안을 유지하면서 관리를 간소화할 수 있습니다.
자동화 스크립트
필수 사항
- Unity Catalog가 이미 설정되어 있습니다.
- 주체(들)이 Databricks 워크스페이스에 연결되어 있습니다.
- 권한 스크립트를 실행하는 사용자가 스키마와 카탈로그에 적절한 권한을 갖고 있습니다.
단계1: 노트북 생성 및 변수 선언
Databricks 워크스페이스에 노트북을 생성합니다. 워크스페이스에서 노트북을 만들려면 사이드바의 “+” 새로 만들기를 클릭한 다음 노트북을 선택합니다.
아래의 코드 스니펫을 노트북 셀에 복사하여 셀을 실행합니다.
catalog = 'main' # Specify your catalog name
schema = 'default' # Specify your schema name
principals_arr = '' # Specify the Comma(,) seperated values for principals in the blank text section (e.g. groups, username)
principals = principals_arr.split(',')
privileges_arr = 'SELECT,APPLY TAG' # Specify the Comma(,) seperated values for priviledges in the blank text section (e.g. SELECT,APPLY TAG)
privileges = privileges_arr.split(',')
단계 2: 카탈로그 및 스키마 설정
아래의 코드 블록을 복사하여 새 셀이나 기존 셀에 붙여넣고 실행하세요.
query = f"USE CATALOG `{catalog}`" #Sets the Catalog
spark.sql(query)
단계 3: 주체 및 권한을 루프하고 카탈로그와 스키마에 권한을 부여하세요
아래의 코드 블록을 복사하여 새 셀이나 기존 셀에 붙여넣고 실행하여 권한을 적용하세요.
for principal in principals:
query = f"GRANT USE_CATALOG ON CATALOG `{catalog}` TO `{principal}`" # Apply use catalog permission at Catalog level
spark.sql(query)
query = f"USE SCHEMA `{schema}`" # Sets the schema
spark.sql(query)
query = f"GRANT USE_SCHEMA ON SCHEMA `{schema}` TO `{principal}`" # Apply use schema permission at Schema level
spark.sql(query)
for privilege in privileges:
query = f"GRANT `{privilege}` ON SCHEMA `{schema}` TO `{principal}`" # Use schema permission at Schema level
spark.sql(query)
유효성 검사
권한을 확인하려면 Databricks UI를 열고 카탈로그로 이동하세요. 카탈로그가 데이터 섹션에 나타나면 해당 카탈로그를 클릭한 후 권한을 적용한 스키마를 선택하고 권한 탭으로 이동하세요. 이제 스키마에 적용된 모든 권한을 확인할 수 있습니다.
또한 유효성 검사의 일환으로 노트북에서 아래의 SQL 스크립트를 실행하여 스키마의 모든 권한을 표시할 수도 있습니다.
SHOW GRANTS ON SCHEMA my_schema;
결론
Databricks Unity Catalog에서 스키마 수준에서 권한 관리를 자동화하는 것은 카탈로그 내의 객체 그룹(예: 테이블, 뷰, 함수 및 볼륨)에 대한 일관된 효율적인 액세스 제어를 보장하는 데 도움이 됩니다. 제공된 코드는 스키마 수준 권한을 할당하는 실용적인 방법을 보여주며, 사용자 및 그룹과 같은 주체 간 권한을 관리하기 쉽게 만듭니다. 이 접근 방식은 스키마 내의 테이블과 뷰를 그룹화하고 전체 스키마에 대해 일관된 권한을 적용함으로써 관리 작업과 수동 오류 발생 가능성을 줄입니다.
Source:
https://dzone.com/articles/automate-databricks-unity-catalog-permissions-at-schema-level