Azure如何为另一租户的应用注册创建SQL外部用户
跨租户为Azure应用注册授予SQL Server访问权限操作指南
前置操作逻辑说明
要让租户B的应用注册访问租户A的SQL Server,首先需要将租户B的应用注册作为来宾服务主体添加到租户A的Azure AD中,之后才能在SQL内创建外部用户并授权。
步骤1:将租户B的应用注册添加到租户A
首先切换到租户A的Azure权限上下文,执行如下Azure CLI命令,将租户B的应用注册同步为租户A的来宾服务主体:
# 登录租户A az login --tenant <租户A的租户ID> # 同步租户B的应用注册到租户A,此处填租户B应用注册的客户端ID(应用程序ID) az ad sp create --id <租户B应用注册客户端ID>
执行完成后,可在租户A的「Azure AD > 企业应用」列表中搜索到该应用注册的来宾实例,获取其在租户A中的对象ID即可。你之前疑问的同一条命令多次传入的object-id-of-sp-in-one-tenant,分别对应不同租户下的服务主体实例ID:同一个应用注册在所属租户和受邀租户中的对象ID是完全独立的,需要分别取值传入,不可混用。
步骤2:配置SQL Server的Azure AD管理员
执行创建外部用户的SQL命令,必须使用Azure AD管理员身份连接SQL,首先完成管理员配置:
- 进入租户A的SQL Server资源页
- 左侧菜单栏选择「Azure Active Directory」
- 点击「设置管理员」,选择租户A内的任意AAD用户/组作为管理员,保存配置
步骤3:执行SQL授权命令
使用刚才设置的AAD管理员身份连接到需要授权的目标用户数据库(不要连接默认master库,除非需要全实例权限),直接执行你准备好的SQL语句即可:
-- 方括号内填写租户B应用注册的显示名称,也可填写其客户端ID CREATE USER [tenant_b_app_reg] FROM EXTERNAL PROVIDER; EXEC sp_addrolemember [db_datareader], [tenant_b_app_reg];
常见参数说明
你提到的role-id是Azure AD自定义应用角色的唯一标识,如果你仅使用SQL内置的db_datareader这类固定角色,不需要额外配置role-id参数,直接执行上述SQL语句即可。只有在需要自定义数据访问权限时,才需要预先在应用注册中定义角色、获取对应的role-id进行授权。
权限验证
可使用租户B应用注册的客户端ID、客户端密钥请求Azure AD令牌,用令牌连接租户A的SQL Server执行查询操作,确认权限配置生效。
内容的提问来源于stack exchange,提问作者John Stud
相关产品推荐
相关产品推荐

