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

Azure SQL托管实例无法创建包含数据库问题咨询

Azure SQL托管实例包含数据库配置问题排查与解决方案

核心问题复盘

  • 混合模式认证(同时启用Azure AD+SQL Server认证)的托管实例中,即便执行启用包含数据库的命令并重启实例,仍无法正常使用PARTIAL包含数据库:
    • SSMS新建数据库时「Containment type」选项灰化不可用
    • 通过T-SQL创建CONTAINMENT = PARTIAL数据库后,SSMS显示其Containment状态为None,且无法创建带密码的包含用户
    • 纯SQL Server认证的托管实例可正常创建包含数据库及用户,但SSMS仍会显示Containment为None(属于界面显示bug,不影响功能)

问题根源

混合模式认证的托管实例存在包含数据库功能的兼容性限制:

  • 当实例启用Azure AD认证时,包含数据库的核心功能会被静默限制,导致T-SQL创建命令执行成功后,数据库实际仍为非包含状态,无法创建带密码的包含用户
  • 纯SQL Server认证实例无此限制,SSMS显示Containment为None属于界面同步延迟问题,可通过T-SQL验证实际状态:
    SELECT name, containment_desc FROM sys.databases WHERE name = 'Test'
    
    若返回结果为PARTIAL,则说明数据库已正确配置为包含数据库,SSMS显示不影响功能使用

正确配置方案(按实例认证类型区分)

场景1:纯SQL Server认证托管实例(推荐用于依赖包含数据库的业务场景)

  1. 创建实例时选择仅SQL Server认证,不启用Azure AD认证
  2. 执行命令启用包含数据库认证:
    EXEC sys.sp_configure N'contained database authentication', N'1'
    GO
    RECONFIGURE WITH OVERRIDE 
    GO
    
  3. 通过Azure门户重启托管实例
  4. 创建包含数据库:
    CREATE DATABASE [Test] CONTAINMENT = PARTIAL;
    
  5. 验证包含状态(以T-SQL查询结果为准,忽略SSMS显示):
    SELECT containment_desc FROM sys.databases WHERE name = 'Test';
    
  6. 在包含数据库内创建带密码的用户:
    USE [Test];
    CREATE USER [TestUser] WITH PASSWORD = 'Test.12345';
    

场景2:混合模式认证托管实例(需同时使用Azure AD与包含数据库)

目前该场景下包含数据库的SQL Server密码用户功能存在限制,可采用以下替代方案:

  • 使用Azure AD包含用户替代SQL Server密码用户:
    USE [Test];
    CREATE USER [AADUser@domain.com] FROM EXTERNAL PROVIDER;
    
  • 若必须使用SQL Server密码用户,需将实例切换为纯SQL Server认证(注意:切换会清除所有Azure AD相关配置,需提前备份)

关键注意事项

  • 微软文档中「Azure SQL托管实例与本地SQL Server行为一致」的描述未明确混合模式认证下的功能限制,属于文档细节缺失
  • 依赖包含数据库实现行级安全时,必须确保用户为数据库级包含用户,而非实例级登录映射的用户

内容的提问来源于stack exchange,提问作者Emperor Eto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:42:17