You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将名称含冒号的Azure AD组添加到Azure SQL,是否遗漏操作?

解决Azure SQL添加含冒号的Azure AD安全组报错问题

这个问题我之前帮别人排查过,核心原因是Azure SQL会把名称里的冒号当成登录名与用户名的特殊分隔符来解析,就像传统Windows域账号里的反斜杠一样,所以直接用[SG:Developers]会让SQL Server误判主体名称,导致找不到对应的Azure AD组,抛出15007错误。

给你两个靠谱的解决办法,按优先级推荐:

方法1:用Azure AD组的对象ID创建用户(最稳定)

这种方式完全不受名称特殊字符影响,是最稳妥的方案:

  1. 先获取目标组的对象ID:
    • 可以直接在Azure门户的组详情页找到;
    • 也可以用PowerShell命令快速获取:
      Get-AzureADGroup -Filter "DisplayName eq 'SG:Developers'" | Select-Object ObjectId
      
  2. 在Azure SQL中执行以下语句,把<你的组对象ID>替换成实际值:
    CREATE USER [SG:Developers] FROM EXTERNAL PROVIDER WITH SID = '<你的组对象ID>', TYPE = E;
    

    这里的TYPE = E指定这是Azure AD外部组,通过SID直接关联到Azure AD中的主体,跳过名称解析环节,彻底避免特殊字符的干扰。

方法2:用双引号包裹组名(快速临时方案)

如果不想用对象ID,可以尝试通过双引号明确告诉SQL Server这是完整的主体名称,不过前提是会话的QUOTED_IDENTIFIER设置为开启状态(默认是开启的):

  1. 先确认并开启设置(如果不确定的话):
    SET QUOTED_IDENTIFIER ON;
    
  2. 执行创建语句:
    CREATE USER "SG:Developers" FROM EXTERNAL PROVIDER;
    

    这种方式通过双引号转义冒号,让SQL Server不会把它当成分隔符,但部分环境下可能因为服务器级别的设置限制失效,所以还是优先推荐方法1。

额外提醒

  • 执行创建语句的账号必须拥有Azure SQL的CONTROL权限,同时在Azure AD中能读取目标安全组的信息;
  • 可以执行SELECT name, type_desc FROM sys.database_principals WHERE type = 'E';来验证用户是否成功创建。

内容的提问来源于stack exchange,提问作者Sai Puli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:10:42