외부 위치

적용 대상:검사 '예'로 표시 Databricks SQL 검사 '예'로 표시 Databricks 런타임 검사 '예'로 표시 Unity 카탈로그만

Unity Catalog 및 기본 제공 Azure Databricks Hive 메타스토어는 관리되는 테이블의 기본 위치를 사용합니다. Unity Catalog는 클라우드 개체 스토리지의 데이터에 권한을 부여하기 위해 몇 가지 새로운 보안 개체를 도입했습니다.

외부 위치

외부 위치는 스토리지 경로와 해당 경로에 대한 액세스 권한을 부여하는 스토리지 자격 증명을 결합하는 보안 개체입니다.

외부 위치의 작성자는 초기 소유자입니다. 외부 위치의 소유자는 외부 위치의 이름, URI 및 스토리지 자격 증명을 수정할 수 있습니다.

외부 위치를 만든 후 계정 수준 보안 주체 (사용자 및 그룹)에게 액세스 권한을 부여할 수 있습니다.

외부 위치를 사용할 권한이 있는 사용자 또는 그룹은 스토리지 자격 증명에 직접 액세스하지 않고도 위치 경로 내의 모든 스토리지 경로에 액세스할 수 있습니다.

액세스 제어를 더욱 세분화하려면 외부 테이블에서 GRANT를 사용하여 외부 위치 내의 개별 파일에 대한 액세스를 캡슐화할 수 있습니다.

외부 위치 이름은 정규화되지 않았으며 메타스토어 내에서 고유해야 합니다.

외부 위치의 스토리지 경로는 다른 외부 위치의 스토리지 경로 또는 명시적 스토리지 자격 증명을 사용하는 외부 테이블의 스토리지 경로 내에 포함될 수 없습니다.

Warning

스키마(데이터베이스)가 작업 영역 수준 Hive 메타스토어에 등록된 경우 CASCADE 옵션을 사용하여 해당 스키마를 삭제하면 테이블 형식(관리형 또는 외부)에 관계없이 해당 스키마 위치의 모든 파일이 재귀적으로 삭제됩니다.

스키마가 Unity 카탈로그 메타스토어에 등록되면 Unity 카탈로그 관리 테이블의 파일이 재귀적으로 삭제됩니다. 그러나 외부 테이블의 파일은 삭제되지 않습니다. 클라우드 스토리지 공급자를 사용하여 해당 파일을 직접 관리해야 합니다.

따라서 실수로 인한 데이터 손실을 방지하려면 Hive 메타스토어의 스키마를 기존 데이터가 있는 위치에 등록해서는 안 됩니다. Hive 메타스토어 스키마가 관리하거나 Unity 카탈로그 관리 테이블을 포함하는 위치에 새 외부 테이블을 만들지 않아야 합니다.

관계의 그래픽 표현

다음 다이어그램은 다음 간의 관계를 설명합니다.

  • 스토리지 자격 증명
  • 외부 위치:
  • 외부 테이블
  • 스토리지 경로
  • IAM 엔터티
  • Azure 서비스 계정

외부 위치 ER 다이어그램

예제

-- 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