如何将Azure AD用户同步至虚拟机SQL Server或SQL Database用户表
Azure AD用户同步到SQL Server/ Azure SQL Database实现方案
场景1:同步到Azure SQL Database
- 若仅需实现AAD账号登录Azure SQL的权限,无需自定义用户表,直接使用原生Azure AD集成创建关联账号即可,在SQL中执行语句:
CREATE USER [user@contoso.com] FROM EXTERNAL PROVIDER;
可按需给该用户分配对应库表的读写权限。 - 若需要将AAD用户字段同步到业务自定义用户表,使用Azure Function定时同步即可:
- 给Azure Function分配Microsoft Graph的
User.Read.All应用权限,采用应用程序权限类型完成授权 - 编写定时触发的函数代码,调用Graph API拉取全量/增量AAD用户数据,可使用delta查询实现增量同步,降低接口调用开销
- 通过SQL绑定或SqlClient组件连接Azure SQL Database,对自定义用户表执行增删改操作,同步需要的用户字段(显示名、邮箱、部门等)
- 给Azure Function分配Microsoft Graph的
场景2:同步到虚拟机部署的SQL Server实例
- 若使用SQL Server 2022及以上版本,且虚拟机已接入Azure AD,可直接复用原生集成逻辑,先创建关联的服务器级登录名,再创建库级用户:
CREATE LOGIN [user@contoso.com] FROM EXTERNAL PROVIDER; CREATE USER [user@contoso.com] FOR LOGIN [user@contoso.com]; - 若使用低版本SQL Server或需要同步到自定义业务用户表,二选一即可:
- 本地定时任务方案:在同虚拟网络的服务器/当前SQL虚拟机上配置Windows计划任务/Linux cronjob,运行同步脚本,脚本调用Graph API拉取AAD用户后,通过ODBC/ADO.NET驱动连接SQL实例完成数据写入
- 云端托管方案:使用Azure Automation Runbook配置定时同步任务,通过混合工作器接入虚拟机所在网络,执行同步逻辑无需在本地部署任务
- 注意如果SQL实例未开放公网访问,需确保同步运行环境和虚拟机网络已打通(同VPC、VPN、VPC对等均可)
通用注意事项
- 同步时必须使用AAD用户objectId作为两个系统用户关联的唯一主键,避免用户修改邮箱、显示名后出现同步冲突
- 所有敏感凭证(AAD应用密钥、SQL连接字符串)必须存储在密钥管理服务中,同步逻辑运行时动态读取,禁止硬编码到代码或配置文件
- 建议新增同步日志表,记录每次同步的时间、变更用户数、异常信息,方便后续排查同步故障
内容的提问来源于stack exchange,提问作者Mohamed Traoré
相关产品推荐
相关产品推荐

