# 允许特定 IP 访问 1433 端口
New-NetFirewallRule -DisplayName "SQL Server Allow IP" -Direction Inbound `
-LocalPort 1433 -Protocol TCP -Action Allow -RemoteAddress 192.168.1.100
# 拒绝其他 IP 访问
New-NetFirewallRule -DisplayName "SQL Server Block All" -Direction Inbound `
-LocalPort 1433 -Protocol TCP -Action Block
-- 创建登录名时限制访问
CREATE LOGIN [YourLogin] WITH PASSWORD = 'StrongPassword!'
GO
-- 为登录名授予连接权限(默认就有)
-- 如果要限制,可以通过拒绝 CONNECT SQL 权限
CREATE TRIGGER [connection_limit_trigger]
ON ALL SERVER WITH EXECUTE AS 'sa'
FOR LOGON
AS
BEGIN
DECLARE @ClientIP VARCHAR(50)
SET @ClientIP = EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'VARCHAR(50)')
-- 允许的 IP 列表
IF @ClientIP NOT IN ('192.168.1.100', '192.168.1.101')
BEGIN
ROLLBACK
RAISERROR('IP %s 不允许访问数据库服务器', 16, 1, @ClientIP)
END
END
GO
-- 创建服务器审计
CREATE SERVER AUDIT IP_Audit
TO FILE (FILEPATH = 'C:\Audits\')
WITH (ON_FAILURE = CONTINUE)
GO
-- 启用审计
ALTER SERVER AUDIT IP_Audit WITH (STATE = ON)
GO
-- 创建服务器审计规范
CREATE SERVER AUDIT SPECIFICATION IP_Audit_Spec
FOR SERVER AUDIT IP_Audit
ADD (FAILED_LOGIN_GROUP),
ADD (SUCCESSFUL_LOGIN_GROUP)
WITH (STATE = ON)
GO
-- Azure SQL 有内置的防火墙功能
-- 在 Azure Portal 中设置防火墙规则:
-- 1. 服务器防火墙 → 添加客户端 IP
-- 2. 配置虚拟网络规则
-- 使用存储过程管理防火墙规则
EXEC sp_set_firewall_rule @name = N'AllowOffice',
@start_ip_address = '192.168.1.1',
@end_ip_address = '192.168.1.254'
-- 1. 查看当前连接信息
SELECT
session_id,
connect_time,
client_net_address,
auth_scheme,
host_name
FROM sys.dm_exec_connections
WHERE session_id = @@SPID
-- 2. 查看所有连接
EXEC sp_who2
-- 3. 查看登录信息
SELECT name, type_desc, is_disabled
FROM sys.server_principals
WHERE type IN ('S', 'U', 'G')
选择哪种方法取决于你的具体需求: