Azure SQL创建含+号外部用户报错,如何转义特殊字符?
能否在Azure SQL用户创建语句中转义特殊字符?
问题场景
在Azure SQL数据库中从Azure Active Directory(AAD)创建外部数据库用户时,若主体名称包含+号,执行创建语句会触发错误,即使已确认AAD租户中该主体名称完全正确。
正常可用的创建语句
CREATE USER [Most Application Names] FROM EXTERNAL PROVIDER
含+号时报错的语句
CREATE USER [Application Name With + Sign] FROM EXTERNAL PROVIDER
错误提示
Principal 'Application Name With + Sign' could not be found or this principal type is not supported.
解决方案
针对带+等特殊字符的AAD主体,推荐以下两种可行方案:
方案1:使用AAD主体的对象ID创建(优先推荐)
通过主体的唯一对象ID创建用户,可彻底规避特殊字符的解析问题:
- 获取目标AAD主体的对象ID:可在Azure门户的AAD管理界面查看,或通过Azure CLI命令获取:
az ad sp show --id "Application Name With + Sign" --query id -o tsv - 使用对象ID执行创建语句:
CREATE USER [替换为实际对象ID] FROM EXTERNAL PROVIDER - (可选)为用户设置友好显示名称:
ALTER USER [替换为实际对象ID] WITH NAME = N'Application Name With + Sign'
方案2:启用QUOTED_IDENTIFIER后用双引号包裹名称
通过开启SQL Server的QUOTED_IDENTIFIER设置,使用双引号包裹含特殊字符的主体名称:
SET QUOTED_IDENTIFIER ON; CREATE USER "Application Name With + Sign" FROM EXTERNAL PROVIDER;
该方案依赖会话设置,兼容性略低于对象ID方案,仅在无法获取对象ID时使用。
内容的提问来源于stack exchange,提问作者Andrew O'Brien
相关产品推荐
相关产品推荐

