Skip to content

SQLServer Azure AD 集成 ​

Azure AD 集成概述 ​

SQL Server Azure AD 集成允许用户使用 Azure Active Directory 凭据登录 SQL Server,实现单一登录 (SSO) 和集中式身份管理。这提供了更高级别的安全性,包括多因素身份验证、条件访问和身份保护等功能。Azure AD 集成是现代化数据库安全架构的重要组成部分,有助于满足合规要求并简化身份管理。

版本差异支持 ​

SQL Server 版本Azure AD 集成支持情况主要功能
2012-2019不直接支持- 需通过 Azure AD 应用程序代理间接实现
- 不支持直接 Azure AD 身份验证
- 有限的 SSO 功能
2022完全支持- 直接 Azure AD 身份验证
- 支持 Azure AD 组和用户
- 支持多因素身份验证
- 支持 Azure AD 应用程序身份验证
- 支持托管身份
Azure SQL Database完全支持- 直接 Azure AD 身份验证
- 支持 Azure AD 组和用户
- 支持多因素身份验证
- 支持 Azure AD 应用程序身份验证
- 支持托管身份
- 支持条件访问
Azure SQL Managed Instance完全支持- 直接 Azure AD 身份验证
- 支持 Azure AD 组和用户
- 支持多因素身份验证
- 支持 Azure AD 应用程序身份验证
- 支持托管身份
- 支持条件访问

支持的集成场景 ​

Azure SQL Database/Azure SQL Managed Instance ​

  • 完全支持 Azure AD 身份验证
  • 支持 Azure AD 组和用户
  • 支持多因素身份验证
  • 支持 Azure AD 应用程序身份验证
  • 支持托管身份
  • 支持条件访问策略

SQL Server 2022 及以上版本 ​

  • 支持直接 Azure AD 身份验证
  • 支持 Azure AD 组和用户
  • 支持多因素身份验证
  • 支持 Azure AD 应用程序身份验证
  • 支持托管身份
  • 支持 Windows 集成 Azure AD 身份验证

SQL Server 2012-2019 ​

  • 不直接支持 Azure AD 身份验证
  • 可通过 Azure AD 应用程序代理间接实现
  • 可通过 AD FS 与 Azure AD 联合实现
  • 有限的 SSO 功能

集成架构 ​

Azure SQL Database/Azure SQL Managed Instance 架构 ​

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────────┐
│ 客户端应用程序   │────▶│  Azure AD       │────▶│  Azure SQL Database │
│ (SSMS, 应用等)   │     │  身份验证服务   │     │  或 Managed Instance│
└─────────────────┘     └─────────────────┘     └─────────────────────┘

SQL Server 2022 架构 ​

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│ 客户端应用程序   │────▶│  Azure AD       │────▶│  SQL Server     │
│ (SSMS, 应用等)   │     │  身份验证服务   │     │  2022+          │
└─────────────────┘     └─────────────────┘     └─────────────────┘

SQL Server 2012-2019 间接集成架构 ​

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│ 客户端应用程序   │────▶│  Azure AD       │────▶│ 应用程序代理   │────▶│  SQL Server     │
│ (SSMS, 应用等)   │     │  身份验证服务   │     │ 或 AD FS        │     │  2012-2019      │
└─────────────────┘     └─────────────────┘     └─────────────────┘     └─────────────────┘

配置步骤 ​

配置 Azure SQL Database/Azure SQL Managed Instance ​

设置 Azure AD 管理员 ​

  1. 登录 Azure 门户
  2. 导航到 Azure SQL Database 或 Managed Instance
  3. 在左侧菜单中选择 "Azure AD 管理员"
  4. 点击 "设置管理员"
  5. 选择 Azure AD 用户或组作为管理员
  6. 点击 "保存"

创建 Azure AD 用户 ​

sql
-- 使用 Azure AD 管理员登录后,创建 Azure AD 用户
CREATE USER [user@contoso.com] FROM EXTERNAL PROVIDER;

-- 创建 Azure AD 组
CREATE USER [SqlAdmins] FROM EXTERNAL PROVIDER;

-- 将用户添加到角色
ALTER ROLE db_datareader ADD MEMBER [user@contoso.com];
ALTER ROLE db_owner ADD MEMBER [SqlAdmins];

配置应用程序身份验证 ​

sql
-- 创建 Azure AD 应用程序用户
CREATE USER [AzureADApp] FROM EXTERNAL PROVIDER WITH IDENTITY = 'application_id';

-- 分配权限
GRANT SELECT ON dbo.TableName TO [AzureADApp];

配置 SQL Server 2022 及以上版本 ​

步骤 1:安装 Azure AD 身份验证扩展 ​

  1. 下载并安装 SQL Server 2022 Azure AD 身份验证扩展
  2. 重启 SQL Server 服务

步骤 2:配置 Azure AD 身份验证 ​

  1. 运行 SqlServerManager2022.msc 打开 SQL Server 配置管理器
  2. 导航到 "SQL Server Services"
  3. 右键点击 SQL Server 服务,选择 "属性"
  4. 在 "Azure AD" 选项卡中配置以下内容:
    • Azure AD 租户 ID
    • Azure AD 应用程序 ID(可选)
    • Azure AD 应用程序密钥(可选)
  5. 重启 SQL Server 服务

步骤 3:创建 Azure AD 登录名和用户 ​

sql
-- 创建 Azure AD 登录名
CREATE LOGIN [user@contoso.com] FROM EXTERNAL PROVIDER;

-- 创建 Azure AD 组登录名
CREATE LOGIN [SqlAdmins] FROM EXTERNAL PROVIDER;

-- 创建数据库用户
USE AdventureWorks2019;
CREATE USER [user@contoso.com] FOR LOGIN [user@contoso.com];
CREATE USER [SqlAdmins] FOR LOGIN [SqlAdmins];

-- 分配权限
ALTER ROLE db_datareader ADD MEMBER [user@contoso.com];
ALTER ROLE db_owner ADD MEMBER [SqlAdmins];

配置 SQL Server 2012-2019 间接集成 ​

对于 SQL Server 2012-2019,可以通过 Azure AD 应用程序代理或 AD FS 实现间接集成:

  1. 使用 Azure AD 应用程序代理:

    • 在 Azure AD 中配置应用程序代理
    • 将 SQL Server 配置为通过应用程序代理访问
    • 用户通过应用程序代理登录 SQL Server
  2. 使用 AD FS 与 Azure AD 联合:

    • 配置 AD FS 与 Azure AD 联合
    • 将 SQL Server 配置为使用 Windows 身份验证
    • 用户使用 Azure AD 凭据登录 Windows,然后访问 SQL Server

身份验证方法 ​

交互式身份验证 ​

  • 适用于 SSMS、Azure Data Studio 等客户端工具
  • 支持多因素身份验证
  • 用户输入用户名和密码,或使用 Azure AD 登录界面
  • 生产建议:用于管理员和开发人员日常访问

密码身份验证 ​

  • 适用于应用程序连接
  • 使用 Azure AD 用户名和密码
  • 不支持多因素身份验证
  • 生产建议:仅用于无法使用其他身份验证方法的旧应用程序

集成身份验证 ​

  • 适用于已加入 Azure AD 的 Windows 设备
  • 使用当前 Windows 登录凭据
  • 支持单一登录
  • 生产建议:用于企业内部应用程序和工具

令牌身份验证 ​

  • 适用于应用程序连接
  • 使用 Azure AD 颁发的访问令牌
  • 支持服务主体和托管身份
  • 生产建议:用于现代应用程序和微服务

托管身份 ​

  • 适用于 Azure 资源之间的身份验证
  • 无需管理凭据
  • 自动轮换凭据
  • 生产建议:用于 Azure 资源(如 Web 应用、函数应用)访问 SQL Server

生产场景示例 ​

场景1:企业数据仓库 Azure AD 集成 ​

项目内容
SQL Server 版本Azure SQL Managed Instance
业务需求实现集中式身份管理,支持多因素身份验证,满足 GDPR 合规要求
配置方案- 设置 Azure AD 组作为管理员
- 创建基于角色的 Azure AD 组(Admins、Developers、Analysts)
- 为每个组分配相应权限
- 启用条件访问,要求多因素身份验证
身份验证方法- 管理员:交互式身份验证 + MFA
- 应用程序:托管身份
- 分析师:集成身份验证
监控和审计- 启用 Azure AD 登录审计
- 配置登录异常告警
- 定期生成权限报告

场景2:SQL Server 2022 混合环境集成 ​

项目内容
SQL Server 版本2022 Enterprise(混合云部署)
业务需求实现本地和 Azure AD 凭据的双重支持,简化身份管理
配置方案- 安装 Azure AD 身份验证扩展
- 配置 Azure AD 租户 ID
- 创建 Azure AD 组登录名
- 保留现有 Windows 身份验证
迁移策略- 逐步将现有用户迁移到 Azure AD
- 新用户直接使用 Azure AD 凭据
- 应用程序使用令牌身份验证
生产收益- 简化身份管理
- 支持 MFA 和条件访问
- 为未来云迁移做准备

场景3:遗留系统间接集成 ​

项目内容
SQL Server 版本2017 Enterprise(本地部署)
业务需求实现 Azure AD 集成,无需升级 SQL Server
解决方案- 使用 Azure AD 应用程序代理
- 配置 SQL Server 允许通过代理访问
- 用户通过应用程序代理登录
限制- 不支持直接 Azure AD 身份验证
- 性能略有影响
- 某些功能受限
替代方案- 升级到 SQL Server 2022
- 使用 AD FS 与 Azure AD 联合

最佳实践 ​

使用 Azure AD 组管理权限 ​

  • 创建基于角色的 Azure AD 组(如 SqlAdmins、SqlDevelopers、SqlReaders)
  • 将用户添加到相应的组中
  • 在 SQL Server 中为组分配权限
  • 简化权限管理,提高安全性
  • 生产建议:定期审查组成员资格,移除不再需要访问权限的用户

启用多因素身份验证 ​

  • 对所有管理员账户启用多因素身份验证
  • 对敏感数据访问启用多因素身份验证
  • 配置条件访问策略
  • 生产建议:使用 Azure AD 条件访问,基于风险评分动态要求 MFA

使用条件访问 ​

  • 基于位置、设备状态、风险评分等条件控制访问
  • 配置 "从非托管设备阻止访问" 策略
  • 配置 "需要批准的客户端应用程序" 策略
  • 生产建议:对敏感数据库配置更严格的条件访问规则

优先使用托管身份 ​

  • 对 Azure 资源之间的连接使用托管身份
  • 避免在代码中硬编码凭据
  • 简化凭据管理
  • 生产建议:所有 Azure 资源访问 SQL Server 时优先使用托管身份

定期审查权限 ​

  • 定期审查 Azure AD 管理员和用户
  • 定期审查角色成员资格
  • 移除不再需要访问权限的用户和组
  • 生产建议:每季度进行一次权限审查,使用 Azure AD 访问评审

监控和审计 ​

  • 启用 Azure AD 登录审计
  • 监控异常登录尝试
  • 定期生成访问报告
  • 生产建议:配置 Azure Monitor 告警,监控可疑登录活动

实现最小权限原则 ​

  • 只为用户和组分配完成任务所需的最小权限
  • 避免使用 db_owner 角色,除非绝对必要
  • 使用自定义角色实现精细权限控制
  • 生产建议:使用基于权限的访问控制 (PBAC) 模型

故障排除 ​

登录失败 ​

症状:无法使用 Azure AD 凭据登录 SQL Server

排查步骤:

  1. 检查 Azure AD 用户是否存在且已启用
  2. 检查用户是否属于正确的 Azure AD 组
  3. 检查 SQL Server 中是否已创建相应的登录名和用户
  4. 检查网络连接和 Azure AD 服务状态
  5. 查看 SQL Server 错误日志
  6. 检查 Azure AD 条件访问策略是否阻止了访问

权限问题 ​

症状:用户可以登录,但无法执行预期操作

排查步骤:

  1. 检查用户的角色成员资格
  2. 检查用户的直接权限
  3. 检查用户所属组的权限
  4. 确保权限已正确应用
  5. 检查是否存在拒绝权限(DENY)覆盖了允许权限(GRANT)

应用程序身份验证失败 ​

症状:应用程序无法使用 Azure AD 身份验证连接到 SQL Server

排查步骤:

  1. 检查应用程序注册是否正确
  2. 检查应用程序密钥是否有效且未过期
  3. 检查应用程序是否具有正确的 API 权限
  4. 检查 SQL Server 中是否已创建应用程序用户
  5. 检查应用程序用户的权限
  6. 查看应用程序日志,确认令牌获取是否成功

多因素身份验证问题 ​

症状:用户无法完成多因素身份验证

排查步骤:

  1. 检查用户的 Azure AD 多因素身份验证配置
  2. 检查用户的设备是否支持多因素身份验证
  3. 检查网络连接是否允许访问 Azure AD 身份验证服务
  4. 查看 Azure AD 登录日志,确认 MFA 失败原因
  5. 检查条件访问策略是否配置正确

常见问题 (FAQ) ​

SQL Server 2019 及以下版本如何实现 Azure AD 集成? ​

可以通过两种方式实现间接集成:

  1. 使用 Azure AD 应用程序代理
  2. 配置 AD FS 与 Azure AD 联合

生产建议:如果可能,考虑升级到 SQL Server 2022 以获得直接 Azure AD 支持

如何在 SSMS 中使用 Azure AD 身份验证? ​

在 SSMS 连接对话框中,选择以下身份验证方式之一:

  • "Azure Active Directory - 通用且具有 MFA 支持"(推荐,支持 MFA)
  • "Azure Active Directory - 密码"
  • "Azure Active Directory - 集成"

输入 Azure AD 凭据,按照提示完成身份验证

如何使用 PowerShell 连接到使用 Azure AD 身份验证的 SQL Server? ​

使用以下 PowerShell 命令:

powershell
# 使用交互式身份验证
$connectionString = "Server=tcp:servername.database.windows.net,1433;Database=dbname;Authentication=Active Directory Interactive;"
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
$connection.Open()

# 使用托管身份
$connectionString = "Server=tcp:servername.database.windows.net,1433;Database=dbname;Authentication=Active Directory Managed Identity;"
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
$connection.Open()

如何配置 Azure AD 应用程序访问 SQL Server? ​

配置步骤:

  1. 在 Azure AD 中注册应用程序
  2. 获取应用程序 ID 和密钥(或证书)
  3. 在 SQL Server 中创建应用程序用户
  4. 为应用程序用户分配权限
  5. 在应用程序中使用应用程序 ID 和密钥获取访问令牌,然后使用令牌连接到 SQL Server

如何实现 Azure AD 单一登录 (SSO)? ​

实现步骤:

  1. 配置 Azure AD 为身份提供商
  2. 在客户端应用程序中集成 Azure AD 登录
  3. 配置 SQL Server 支持 Azure AD 身份验证
  4. 用户只需登录一次 Azure AD,即可访问所有集成的应用程序和 SQL Server

生产建议:使用 Azure AD 无缝 SSO 进一步提高用户体验

Azure AD 集成对性能有影响吗? ​

  • 直接 Azure AD 身份验证(SQL Server 2022+)性能影响很小
  • 间接集成(应用程序代理、AD FS)可能会有轻微的性能开销

生产建议:进行性能测试,确保满足业务需求

如何处理 Azure AD 身份验证失败的情况? ​

  • 确保有备用身份验证方法(如本地管理员账户)
  • 监控 Azure AD 服务状态
  • 配置适当的告警
  • 定期测试身份验证流程

如何迁移现有用户到 Azure AD 身份验证? ​

迁移步骤:

  1. 在 Azure AD 中创建相应的用户和组
  2. 在 SQL Server 中创建 Azure AD 登录名和用户
  3. 为 Azure AD 用户分配与现有用户相同的权限
  4. 通知用户切换到 Azure AD 身份验证
  5. 逐步淘汰旧的身份验证方法

生产建议:制定详细的迁移计划,分阶段进行迁移

如何使用 Azure AD 组管理 SQL Server 权限? ​

最佳实践:

  1. 创建基于角色的 Azure AD 组(如 SqlAdmins、SqlDevelopers)
  2. 将用户添加到相应的组中
  3. 在 SQL Server 中为组创建登录名和用户
  4. 为组分配权限
  5. 通过管理 Azure AD 组成员资格来管理权限

Azure AD 集成如何帮助满足合规要求? ​

好处:

  1. 集中式身份管理,便于审计
  2. 支持多因素身份验证,提高安全性
  3. 条件访问策略,控制访问条件
  4. 详细的登录审计日志
  5. 符合 GDPR、HIPAA 等合规要求

生产建议:保留至少 12 个月的审计日志,用于合规审计

总结 ​

SQL Server Azure AD 集成是现代化数据库安全架构的重要组成部分,提供了集中式身份管理、多因素身份验证和条件访问等高级安全功能。不同版本的 SQL Server 对 Azure AD 集成的支持程度不同,企业应根据自身需求和现有环境选择合适的集成方案。

在实施 Azure AD 集成时,应遵循以下核心原则:

  1. 安全性优先:启用多因素身份验证和条件访问,保护敏感数据
  2. 简化管理:使用 Azure AD 组管理权限,减少管理开销
  3. 现代化架构:优先使用托管身份和令牌身份验证,支持现代应用程序
  4. 合规性:确保集成方案满足行业合规要求
  5. 持续监控:监控和审计身份验证活动,及时发现安全威胁

通过正确实施和管理 Azure AD 集成,企业可以提高数据库安全性,简化身份管理,并为未来的云迁移做好准备。随着 SQL Server 版本的不断升级,Azure AD 集成功能将越来越强大,成为企业数据库安全的重要支柱。