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 集成功能将越来越强大,成为企业数据库安全的重要支柱。