你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure HDInsight 中使用托管标识进行 SQL 数据库身份验证

HDInsight 添加了托管标识选项,用于在其群集产品/服务中对 SQL 数据库进行身份验证并提供更安全的身份验证机制。

本文概述了在创建 HDInsight 群集时使用托管标识 (MSI) 选项进行 SQL 数据库身份验证的过程。

托管标识 (MI) 选项适用于以下数据库:

数据库 代表主机 (HoBo) 数据库 自带 (BYO) 数据库
Ambari
Hive
Oozie
Ranger (ESP)

注意

  • 托管标识 (MI) 目前仅在公共区域可用。
  • 默认情况下未启用 MI 选项。 若要启用它,请使用订阅和区域详细信息提交支持工单

重要

  • 建议不要在重新创建群集后更新托管标识,因为它可能会中断群集操作。
  • 重新创建具有相同名称的 MSI 时,用户必须重新创建包含的用户并重新分配角色,因为新 MSI 将具有不同的对象和客户端 ID,即使名称保持不变也是如此。

在 Azure 门户中创建群集期间使用托管标识的步骤

  1. 在创建群集过程中,导航到“存储”部分,然后选择 Ambari/Hive/Oozie 的 SQL 数据库。 选择“托管标识”作为身份验证方法。

    显示“基本信息”选项卡的屏幕截图。

  2. 选择托管标识来对 SQL 数据库进行身份验证。

    显示“存储”选项卡的屏幕截图。

  3. 在相应的 SQL 数据库中创建具有托管标识的包含用户。

    按照 Azure SQL 数据库查询编辑器中的这些步骤创建数据库用户并向其授予读写权限。 针对要用于不同服务(如 Ambari、Hive 或 Oozie)的每个 SQL 数据库执行这些步骤。

    注意

    用户名必须包含由用户定义的后缀扩展的原始 MSI 名称。 作为最佳做法,后缀可以包含其对象 ID 的初始部分。 可以从门户上的托管标识门户页获取托管标识的对象 ID。

    例如:

    • MSI 名称:contosoMSI
    • 对象 ID:aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
    • user_name 可能是 contosoMSI-2ba6c
    CREATE USER {user_name} FROM EXTERNAL PROVIDER WITH OBJECT_ID={object id of cluster managed identity};   
    
    ALTER ROLE db_datareader ADD MEMBER {user_name};   
    ALTER ROLE db_ddladmin ADD MEMBER {user_name};   
    ALTER ROLE db_datawriter ADD MEMBER {user_name};   
    

    注意

    如果数据库中已定义角色 db_executordb_view_defdb_view_state,则无需继续执行后续步骤。

    CREATE ROLE db_executor;   
    GRANT EXECUTE TO db_executor;   
    ALTER ROLE db_executor ADD MEMBER {user_name};   
    
    CREATE ROLE db_view_def;   
    GRANT VIEW DEFINITION TO db_view_def;   
    ALTER ROLE db_view_def ADD MEMBER {user_name};   
    CREATE ROLE db_view_db_state;  
    
    GRANT VIEW DATABASE STATE TO db_view_db_state;   
    
    ALTER ROLE db_view_def ADD MEMBER {user_name};  
    
  4. 输入必要的详细信息后,请在门户中继续创建群集。