Azure SQL:使用Azure AD用户无法从bacpac创建数据库,SQL用户可正常操作
Azure AD身份执行SQL备份恢复/导出Bacpac失败的权限排查
核心权限排查项
1. 确认服务器角色映射有效性
先验证你的Azure AD身份是否真正拥有sysadmin权限,执行以下SQL语句:
-- 检查AD身份的服务器主体状态 SELECT name, type_desc, is_disabled FROM sys.server_principals WHERE name = '你的Azure AD用户名/所属组名'; -- 检查是否属于sysadmin角色 SELECT spr.name AS role_name, sp.name AS principal_name FROM sys.server_role_members srm JOIN sys.server_principals spr ON srm.role_principal_id = spr.principal_id JOIN sys.server_principals sp ON srm.member_principal_id = sp.principal_id WHERE sp.name = '你的Azure AD用户名/所属组名' AND spr.name = 'sysadmin';
确保结果显示身份未被禁用,且明确属于sysadmin角色。
2. 存储账户访问权限(备份恢复/导出必看)
如果备份文件或导出目标是Azure存储账户,你的AD身份需要额外的存储权限:
- 对存储账户授予Storage Blob Data Contributor角色(在Azure Portal的存储账户“访问控制(IAM)”中添加)
- 执行恢复/导出操作时,选择Azure AD身份验证访问存储,而非存储账户密钥,确保用当前登录的AD身份完成存储访问。
3. 数据库级导出权限补充
导出Bacpac除了服务器级权限,还需要目标数据库的:
CONTROL DATABASE权限,或ALTER ANY DATABASE+VIEW DEFINITION权限
可以执行以下语句给AD身份授予数据库级权限(替换数据库名和身份名):
USE [目标数据库名]; CREATE USER [你的Azure AD用户名/所属组名] FROM EXTERNAL PROVIDER; ALTER ROLE db_owner ADD MEMBER [你的Azure AD用户名/所属组名];
4. 验证Azure AD服务器管理员身份
部分高级操作(如批量恢复、跨实例导出)要求身份是SQL服务器的Azure AD管理员,而非仅sysadmin角色成员:
- 登录Azure Portal,找到目标SQL服务器
- 进入“Active Directory管理员”页面,确认你的账户或所属组已被设置为管理员
5. SSMS操作上下文检查
- 确保登录SSMS时使用Azure AD身份验证(通用),避免使用其他兼容模式
- 执行恢复/导出时,不要勾选“使用SQL身份验证”访问存储,保持AD身份上下文一致
内容的提问来源于stack exchange,提问作者kaklarsson
相关产品推荐
相关产品推荐

