管理外部位置和存储凭据

外部位置和存储凭据允许 Unity Catalog 代表用户在云租户上读写数据。 这些对象用于:

存储凭据表示一种身份验证和授权机制,这种机制使用 Azure 托管标识(强烈建议)或服务主体来访问存储在云租户上的数据。 每个存储凭据都服从 Unity Catalog 访问控制策略,该策略控制哪些用户和组可以访问该凭据。 如果用户无法访问 Unity Catalog 中的存储凭据,则请求将失败,Unity Catalog 不会代表用户向你的云租户进行身份验证。

外部位置是将云存储路径与授权访问云存储路径的存储凭据相结合的对象。 每个存储位置都服从 Unity Catalog 访问控制策略,该策略控制哪些用户和组可以访问凭据。 如果用户无法访问 Unity Catalog 中的存储位置,则请求失败,Unity Catalog 不会代表用户向你的云租户进行身份验证。

Databricks 建议使用外部位置,而不是直接使用存储凭据。

若要创建或管理存储凭据或外部位置,你必须是要从中访问存储的已启用 Unity Catalog 的工作区的工作区管理员。

要求

  • 必须是 Azure Databricks 中的帐户管理员。
  • Azure Databricks 帐户必须使用高级计划
  • 你必须具有 Unity 目录元存储。
  • 若要管理外部位置或存储凭据的权限,你必须是元存储管理员。

管理存储凭据

以下各节说明如何创建和管理存储凭据。

创建存储凭据

可以使用 Azure 托管标识或服务主体作为授权访问存储容器的标识。 强烈建议使用托管标识。 它们的优点是允许 Unity Catalog 访问受网络规则保护的存储帐户(而使用服务主体无法实现此目的),并且无需管理和轮换机密。

若要使用托管标识创建存储凭据:

  1. 创建 Azure Databricks 访问连接器,并使用为 Unity Catalog 配置托管标识中的说明向其分配对你要访问的存储容器的权限。

    Azure Databricks 访问连接器是一种第一方 Azure 资源,让你可以将托管标识连接到 Azure Databricks 帐户。

    记下访问连接器的资源 ID。

  2. 以工作区管理员身份登录到已启用 Unity Catalog 的 Azure Databricks 工作区。

  3. 在边栏顶部的“角色”切换器中,选择“SQL”。

  4. 单击 Data Icon“数据”。

  5. 单击右上角的 + 菜单,然后选择“添加存储凭据”。

  6. 在“创建新存储凭据”对话框中,选择“托管标识(推荐)”。

  7. 输入凭据的名称,并按以下格式输入访问连接器的资源 ID:

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource_group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    
  8. 单击“保存” 。

  9. 创建引用此存储凭据的外部位置

若要使用服务主体创建存储凭据:

  1. 在 Azure 门户中,创建服务主体并向其授予对存储帐户的访问权限。
    1. 为服务主体创建一个客户端秘密并记下这个客户端机密。
    2. 记下服务主体的目录 ID 和应用程序 ID。
    3. 转到存储帐户,授予服务主体“Azure Blob 参与者”角色。
  2. 以工作区管理员身份登录到已启用 Unity Catalog 的 Azure Databricks 工作区。
  3. 在边栏顶部的“角色”切换器中,选择“SQL”
  4. 单击 Data Icon“数据”。
  5. 单击右上角的 + 菜单,然后选择“添加存储凭据”。
  6. 在“创建新存储凭据”对话框中,选择“服务主体”。
  7. 输入凭据的名称,以及在你要访问的存储容器上被授予“Azure Blob 参与者”角色的服务主体的目录 ID、应用程序 ID 和客户端密码。
  8. 单击“保存” 。
  9. 创建引用此存储凭据的外部位置

列出存储凭据

若要查看元存储中所有存储凭据的列表,可以使用数据资源管理器或 SQL 命令。

数据资源管理器

  1. 登录到链接到元存储的工作区。
  2. 从 persona 切换器中,选择 SQL。
  3. 单击 Data Icon“数据”。
  4. 在屏幕底部,单击“存储凭据”。

Sql

在笔记本或 Databricks SQL 编辑器中运行以下命令。

SHOW STORAGE CREDENTIALS;

查看存储凭据

若要查看存储凭据的属性,可以使用数据资源管理器或 SQL 命令。

数据资源管理器

  1. 登录到链接到元存储的工作区。
  2. 从 persona 切换器中,选择 SQL。
  3. 单击 Data Icon“数据”。
  4. 在屏幕底部,单击“存储凭据”。
  5. 单击存储凭据的名称以查看其属性。

Sql

在笔记本或 Databricks SQL 编辑器中运行以下命令。 将 <credential_name> 替换为凭据的名称。

DESCRIBE STORAGE CREDENTIAL <credential_name>;

重命名存储凭据

若要重命名存储凭据,可以使用数据资源管理器或 SQL 命令。

数据资源管理器

  1. 登录到链接到元存储的工作区。
  2. 从 persona 切换器中,选择 SQL。
  3. 单击 Data Icon“数据”。
  4. 在屏幕底部,单击“存储凭据”。
  5. 单击存储凭据的名称以打开编辑对话框。
  6. 重命名存储凭据并保存。

Sql

在笔记本或 Databricks SQL 编辑器中运行以下命令。 替换占位符值替:

  • <credential_name>:该凭据的名称。
  • <new_credential_name>:凭据的新名称。
ALTER STORAGE CREDENTIAL <credential_name> RENAME TO <new_credential_name>;

管理存储凭据的权限

你可以直接授予对存储凭据的权限,但 Databricks 建议你在外部位置引用存储凭据,并改为向该位置授予权限。 外部位置将存储凭据与特定路径相结合,并只授权访问该路径及其内容。

可以使用数据资源管理器或 SQL 命令管理存储凭据的权限。 你可以对存储凭据授予和撤销以下权限:

  • CREATE TABLE
  • READ FILES
  • WRITE FILES

数据资源管理器

  1. 登录到链接到元存储的工作区。
  2. 从 persona 切换器中,选择 SQL。
  3. 单击 Data Icon“数据”。
  4. 在屏幕底部,单击“存储凭据”。
  5. 单击存储凭据的名称以打开其属性。
  6. 单击“权限”。
  7. 若要向用户或组授予权限,请选择每个标识,然后单击“授予”。
  8. 若要撤销用户或组的权限,请取消选择每个标识,然后单击“撤销”。

Sql

在以下示例中,替换占位符值:

  • <principal>:帐户级用户的电子邮件地址或要向其授予权限的帐户级组的名称。
  • <storage_credential_name>:存储凭据的名称。

若要显示存储凭据上的授权,请使用如下命令。 你可以选择筛选结果以只显示指定主体的授权。

SHOW GRANTS [<principal>] ON STORAGE CREDENTIAL <storage_credential_name>;

若要授予直接使用存储凭据创建外部表的权限:

GRANT CREATE TABLE ON STORAGE CREDENTIAL <storage_credential_name> TO <principal>;

若要直接使用存储凭据授予从外部表中进行选择的权限:

GRANT READ FILES ON STORAGE CREDENTIAL <storage_credential_name> TO <principal>;

注意

如果组名包含空格,请在其周围使用反勾(而不是撇号)。

更改存储凭据的所有者

存储凭据的创建者是其初始所有者。 若要将所有者更改为其他帐户级别的用户或组,请在笔记本或 Databricks SQL 编辑器中运行以下命令。 替换占位符值替:

  • <credential_name>:该凭据的名称。
  • <principal>:帐户级用户的电子邮件地址或帐户级组的名称。
ALTER STORAGE CREDENTIAL <credential_name> OWNER TO <principal>;

删除存储凭据

若要删除存储凭据,可以使用数据资源管理器或 SQL 命令。

  1. 登录到链接到元存储的工作区。
  2. 从 persona 切换器中,选择 SQL。
  3. 单击 Data Icon“数据”。
  4. 在屏幕底部,单击“存储凭据”。
  5. 单击存储凭据的名称以打开编辑对话框。
  6. 单击“删除” 按钮。

在笔记本或 Databricks SQL 编辑器中运行以下命令。 将 <credential_name> 替换为凭据的名称。 括号中的命令部分是可选的。 默认情况下,如果凭据由外部位置使用,则不会删除它。 将 <credential_name> 替换为凭据的名称。

  • 如果凭据不存在,则 IF EXISTS 不返回错误。
  • 即使凭据被外部位置使用,FORCE 也会删除该凭据。 不能再使用依赖于此凭据的外部位置。
DROP STORAGE CREDENTIAL [IF EXISTS] <credential_name> [FORCE];

管理外部位置

以下各节说明如何创建和管理外部位置。

创建外部位置

可以使用数据资源管理器或 SQL 命令创建外部位置。

数据资源管理器

  1. 从 persona 切换器中,选择 SQL。
  2. 单击 Data Icon“数据”。
  3. 单击右上角的 + 菜单,然后选择“添加外部位置”。
  4. 单击“创建位置”。
    1. 输入位置的名称。
    2. (可选)从现有装入点复制存储容器路径。
    3. 如果不从现有装入点复制,请输入存储容器路径。
    4. 选择授予对该位置的访问权限的存储凭据。
    5. 单击“保存” 。

Sql

在笔记本或 Databricks SQL 编辑器中运行以下 SQL 命令。 替换占位符值替:

  • <location_name>:外部位置的名称。

  • <bucket_path>:云租户中此外部位置授予访问权限的路径。

  • <storage_credential_name>:存储凭据的名称,该凭据包含有关被授权从存储容器路径读写的服务主体的详细信息。

注意

每个云存储路径只能与一个外部位置相关联。 如果试图创建引用相同路径的第二个外部位置,则命令失败。

CREATE EXTERNAL LOCATION <location_name>
URL 'abfss://<bucket_path>'
WITH ([STORAGE] CREDENTIAL <storage_credential_name>);

描述外部位置

若要查看外部位置的属性,可以使用数据资源管理器或 SQL 命令。

数据资源管理器

  1. 登录到链接到元存储的工作区。
  2. 从 persona 切换器中,选择 SQL。
  3. 单击 Data Icon“数据”。
  4. 在屏幕底部,单击“外部位置”。
  5. 单击外部位置的名称以查看其属性。

Sql

在笔记本或 Databricks SQL 编辑器中运行以下命令。 将 <credential_name> 替换为凭据的名称。

DESCRIBE EXTERNAL LOCATION <location_name>;

修改外部位置

若要重命名外部位置,请在笔记本或 Databricks SQL 编辑器中运行以下命令。 替换占位符值替:

  • <location_name>:位置的名称。
  • <new_location_name>:位置的新名称。
ALTER EXTERNAL LOCATION <location_name> RENAME TO <new_location_name>;

要更改云租户中外部位置指向的 URI,请在笔记本或 Databricks SQL 编辑器中运行以下命令。 替换占位符值替:

  • <location_name>:外部位置的名称。
  • <url>:该位置应该授权你的云租户访问的新存储 URL。
ALTER EXTERNAL LOCATION location_name SET URL ‘<url>’ [FORCE];

即使外部表依赖于外部位置,FORCE 选项也会更改 URL。

若要更改外部位置使用的存储凭据,请在笔记本或 Databricks SQL 编辑器中运行以下命令。 替换占位符值替:

  • <location_name>:外部位置的名称。
  • <credential_name>:允许访问云租户中位置 URL 的存储凭据的名称。
ALTER EXTERNAL LOCATION <location_name> SET STORAGE CREDENTIAL <credential_name>;

管理外部位置的权限

你可以在外部位置授予和撤销以下权限:

  • CREATE TABLE
  • READ FILES
  • WRITE FILES

数据资源管理器

  1. 登录到链接到元存储的工作区。
  2. 从 persona 切换器中,选择 SQL。
  3. 单击 Data Icon“数据”。
  4. 在屏幕底部,单击“外部位置”。
  5. 单击外部位置的名称以打开其属性。
  6. 单击“权限”。
  7. 若要向用户或组授予权限,请选择每个标识,然后单击“授予”。
  8. 若要撤销用户或组的权限,请取消选择每个标识,然后单击“撤销”。

Sql

在以下示例中,替换占位符值:

  • <principal>:帐户级用户的电子邮件地址或要向其授予权限的帐户级组的名称。

  • <location_name>:授权读取和写入云租户中存储容器路径的外部位置的名称。

  • <principal>:帐户级用户的电子邮件地址或帐户级组的名称。

若要在外部位置显示授予,请使用如下命令。 你可以选择筛选结果以只显示指定主体的授权。

SHOW GRANTS [<principal>] ON EXTERNAL LOCATION <location_name>;

授予使用外部位置创建表的权限:

GRANT CREATE TABLE ON EXTERNAL LOCATION <location_name> TO <principal>;

授予从外部位置读取文件的权限:

GRANT READ FILES ON EXTERNAL LOCATION <location_name> TO <principal>;

注意

如果组名包含空格,请在其周围使用反勾(而不是撇号)。

更改外部位置的所有者

外部位置的创建者是它的初始所有者。 若要将所有者更改为其他帐户级别的用户或组,请在笔记本或 Databricks SQL 编辑器中运行以下命令。 替换占位符值替:

  • <location_name>:该凭据的名称。
  • <principal>:帐户级用户的电子邮件地址或帐户级组的名称。

删除外部位置

若要删除外部位置,请在笔记本或 Databricks SQL 编辑器中运行以下命令。 括号中的项是可选的。 将 <location_name> 替换为外部位置的名称。

即使外部表依赖于外部位置,FORCE 选项也会删除外部位置。

DROP EXTERNAL LOCATION [IF EXISTS] location_name [FORCE];

后续步骤