외부 위치
적용 대상: Databricks SQL Databricks 런타임 Unity Catalog만 표시
Unity Catalog 및 Azure Databricks Hive 기본 제공 메타스토어는 관리되는 tables의 기본 위치를 사용합니다. Unity Catalog은 클라우드 객체 저장소의 데이터에 대한 grant 권한을 부여하는 몇 가지 새로운 보안 가능한 개체를 도입했습니다.
-
Unity Catalog 개체는 클라우드 스토리지 providers에서 장기 credentials을 추상화하는 데 사용됩니다.
-
Unity Catalog 개체는 클라우드 개체 스토리지 URI를 스토리지 자격 증명와 연결하는 데 사용됩니다.
외부 위치
외부 위치는 스토리지 경로와 해당 경로에 대한 액세스 권한을 부여하는 스토리지 자격 증명을 결합하는 보안 개체입니다.
외부 위치의 작성자는 초기 소유자입니다. 외부 위치의 소유자와 MANAGE
권한이 있는 사용자는 외부 위치의 이름, URI 및 스토리지 자격 증명을 수정할 수 있습니다.
외부 위치를 만든 후 계정 수준 보안 주체(사용자 및 그룹) 액세스 권한을 grant 수 있습니다.
외부 위치를 사용할 권한이 있는 사용자 또는 그룹은 스토리지 자격 증명에 직접 액세스하지 않고도 위치 경로 내의 모든 스토리지 경로에 액세스할 수 있습니다.
보다 정교한 액세스 제어를 위해, 외부 위치 내의 개별 파일에 대한 액세스를 캡슐화하려면 외부 에서 tables의 GRANT을 사용할 수 있습니다.
외부 위치 이름은 정규화되지 않았으며 메타스토어 내에서 고유해야 합니다.
외부 위치의 스토리지 경로는 다른 외부 위치의 스토리지 경로에 포함될 수 없으며, 명시된 스토리지 자격 증명을 사용하여 외부 table의 스토리지 경로 내에 포함될 수도 없습니다.
Warning
schema(데이터베이스)가 작업 영역 수준 Hive 메타스토어에 등록된 경우 CASCADE
옵션을 사용하여 해당 schema 삭제하면 table 형식(관리형 또는 외부)에 관계없이 해당 schema 위치의 모든 파일이 재귀적으로 삭제됩니다.
schema가 Unity Catalog 메타스토어에 등록될 경우, Unity Catalog에 의해 관리되는 tables 파일이 재귀적으로 삭제됩니다. 그러나 외부 tables에 대한 파일은 삭제되지 않습니다. 클라우드 스토리지 공급자를 사용하여 해당 파일을 직접 관리해야 합니다.
따라서 실수로 인한 데이터 손실을 방지하기 위해 Hive 메타스토어의 schema 기존 데이터가 있는 위치에 등록해서는 안 됩니다. Hive 메타스토어 스키마로 관리되거나 Unity Catalog에서 관리되는 tables를 포함하는 위치에 새 외부 tables를 만들어서는 안 됩니다.
관계의 그래픽 표현
다음 다이어그램은 다음 간의 관계를 설명합니다.
- 스토리지 credentials
- 외부 위치:
- 외부 tables
- 스토리지 경로
- IAM 엔터티
- Azure 서비스 계정
예제
-- Grant `finance` user permission to create external location on `my_azure_storage_cred` storage credential, and then create an external location on the specific path to which `my_azure_storage_cred` has access
> GRANT CREATE EXTERNAL LOCATION ON STORAGE CREDENTIAL `my_azure_storage_cred` TO `finance`
> CREATE EXTERNAL LOCATION `finance_loc` URL 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance'
WITH (CREDENTIAL `my_azure_storage_cred`)
COMMENT 'finance';
-- Grant read, write, and create table access to the finance location to `finance` user
> GRANT READ FILES, WRITE FILES, CREATE EXTERNAL TABLE ON EXTERNAL LOCATION `finance_loc` TO `finance`;
-- `finance` can read from any storage path under abfss://depts/finance but nowhere else
> SELECT count(1) FROM `delta`.`abfss://container@storageaccount.dfs.core.windows.net/depts/finance` WITH (CREDENTIAL my_azure_storage_cred);
100
> SELECT count(1) FROM `delta`.`abfss://container@storageaccount.dfs.core.windows.net/depts/hr/employees` WITH (CREDENTIAL my_azure_storage_cred);
Error
-- `finance` can create an external table over specific object within the `finance_loc` location
> CREATE TABLE main.default.sec_filings LOCATION 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings';
-- Cannot list files under an external table with a user that doesn't have SELECT permission on it
> LIST 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings'
Error
> LIST 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings/_delta_log'
Error