陵水文章资讯

SQL Server限制IP访问数据库的设置方法

2026-04-03 09:07:02 浏览次数:2
详细信息

1. Windows 防火墙设置(最简单有效)

入站规则设置

# 允许特定 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

2. SQL Server 配置管理器

修改 TCP/IP 属性

打开 SQL Server 配置管理器 展开 SQL Server 网络配置协议 右键 TCP/IP → 属性 在 IP 地址 选项卡中:

3. 数据库引擎的登录限制

使用登录名的 CONNECT 权限

-- 创建登录名时限制访问
CREATE LOGIN [YourLogin] WITH PASSWORD = 'StrongPassword!'
GO

-- 为登录名授予连接权限(默认就有)
-- 如果要限制,可以通过拒绝 CONNECT SQL 权限

4. 使用数据库触发器(应用层限制)

创建登录触发器

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

5. 使用 SQL Server Audit(监控和审计)

-- 创建服务器审计
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

6. 通过应用程序网关/防火墙

使用 Azure SQL Database

-- 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'

最佳实践建议:

多层防护策略:

第一层:操作系统防火墙 第二层:SQL Server TCP/IP 配置 第三层:SQL Server 登录限制 第四层:应用程序权限控制

具体操作步骤:

-- 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')

推荐的组合方案:

生产环境:使用 Windows 防火墙 + SQL Server 配置 高安全环境:增加登录触发器 + SQL Server Audit 云环境:使用云服务商提供的网络安全组和防火墙

注意事项:

选择哪种方法取决于你的具体需求:

相关推荐