如何配置Azure SQL Server强制非Azure IP通过SSMS使用Office 365登录
配置Azure SQL Server实现外部IP需Azure AD(Office 365)验证、Azure内部IP可使用SQL账号访问
核心思路
通过启用Azure AD身份验证、IP防火墙规则区分访问来源、登录触发器限制SQL账号访问范围三个环节配合,实现:
- Azure内部服务(如Web Apps)可使用SQL账号直接连接
- 外部IP连接必须通过Azure AD(Office 365)凭据验证,即便SQL账号密码正确也无法登录
1. 启用Azure SQL Server的Azure AD身份验证
- 登录Azure门户,定位到目标SQL Server
- 进入设置 > Azure Active Directory,设置Azure AD管理员(可选择单个用户或安全组)并保存。这一步是让SQL Server支持Azure AD身份验证方式。
2. 配置IP防火墙规则
- 进入SQL Server的设置 > 防火墙和虚拟网络
- 配置两条关键规则:
- 允许Azure服务访问:勾选允许Azure服务和资源访问此服务器,这条规则会放行Azure内部服务的连接请求
- 外部IP规则:添加需要开放的外部IP范围(比如员工办公IP),不要直接开放所有IP,确保只有指定外部IP能尝试连接
3. 创建登录触发器限制SQL账号的访问来源
在SQL Server中执行以下T-SQL脚本,创建服务器级登录触发器:
CREATE TRIGGER BlockSQLAuthFromExternalIP ON ALL SERVER WITH EXECUTE AS '你的AzureAD管理员账号' FOR LOGON AS BEGIN -- 判断当前登录账号为SQL账号(非Azure AD账号),且连接IP不在Azure内部IP范围 IF ORIGINAL_LOGIN() NOT LIKE 'AzureAD%' AND EXISTS ( SELECT 1 FROM sys.dm_exec_connections WHERE session_id = @@SPID -- 排除Azure内部常用IP段,可根据实际情况补充完整Azure公网/私有IP范围 AND client_net_address NOT IN ('10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16') ) BEGIN -- 拒绝非Azure IP的SQL账号登录请求 ROLLBACK; END END;
说明:
AzureAD%是Azure AD账号的默认命名格式,若你的Azure AD账号命名规则不同,可调整匹配逻辑;Azure IP范围可根据实际使用的Azure区域补充完整。
4. 验证配置效果
- 外部IP测试:用SSMS选择SQL Server身份验证输入正确账号密码,会被触发器拒绝;切换为Azure Active Directory - 通用与MFA(或其他Azure AD验证方式),输入Office 365凭据即可正常登录。
- Azure内部测试:在Web Apps中使用SQL账号连接数据库,可正常访问。
内容的提问来源于stack exchange,提问作者Ongun23
相关产品推荐
相关产品推荐

