Azure SQL中Entra组拥有db_ddladmin等角色仍无法创建架构
解决Azure SQL中AAD组身份创建架构的权限错误问题
1. 验证身份与权限映射
- 先确认当前会话的实际身份:执行
SELECT USER_NAME(), CURRENT_USER, SUSER_SNAME();,检查返回的用户是否是你创建的AAD组对应的数据库用户。如果不对,重新登录清除会话缓存。 - 检查组用户的实际权限:运行
EXEC sp_helprotect @username = '你的AAD组数据库用户名';,确认是否包含CREATE SCHEMA权限。db_ddladmin角色默认带这个权限,但如果有拒绝规则会覆盖,得排查这点。
2. 确认默认架构与授权方式
- 核对组用户的默认架构设置:执行
SELECT name, default_schema_name FROM sys.database_principals WHERE type = 'G' AND name = '你的AAD组名';,确保default_schema_name确实是dbo。 - 尝试用组自身作为授权者创建架构:把语句改成
CREATE SCHEMA [TEST] AUTHORIZATION [你的AAD组数据库用户名];,有时候指定自身组比用dbo授权更可靠。
3. 排查AAD会话与组嵌套问题
- 完全断开当前连接后重新登录,避免之前的身份缓存导致权限不生效。
- 如果你的账号属于多层嵌套的AAD组,要确认数据库里创建的是你直接所属的组的用户,而不是上层父组的。嵌套组的权限传递可能出现异常。
4. 检查是否存在权限拒绝规则
- 执行
SELECT * FROM sys.database_permissions WHERE permission_name = 'CREATE SCHEMA' AND state = 'D';,如果结果里有针对你的组或用户的拒绝权限,必须先移除这个规则,否则允许权限会被覆盖。
内容的提问来源于stack exchange,提问作者Sam Hamer
相关产品推荐
相关产品推荐

