You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server固定不可改登录账号的安全防护及本地访问伪造风险咨询

问题背景与安全咨询

我有一款服务器类软件需连接本地SQL Server,其内置硬编码的SQL登录名/密码(需具备sqladmin角色)且无法修改。因必须使用该软件,我在SQL Server中创建了此登录账号。但该硬编码登录信息在互联网上公开可查,同时因客户需访问SQL Server获取数据和功能,无法关闭1433等SQL Server端口。

为防范知晓该信息的人员攻击SQL Server,我已采取以下安全措施:

  • 关闭SQL Server的远程连接功能
  • 创建登录触发器,仅允许该登录账号进行本地连接

现咨询:是否有人可伪造localhost发送包含DROP TRIGGER等SQL命令的数据包进行入侵?若存在该风险,还有哪些防护措施可用?

附上触发器代码:

CREATE TRIGGER prevent_ip 
ON ALL SERVER
FOR LOGON
AS
BEGIN

DECLARE @LoginName sysname
DECLARE @LoginType sysname
  
SET @LoginName = ORIGINAL_LOGIN()
 
IF(@LoginName = 'HardcodedLogin' AND (EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]','nvarchar(128)') IN ('<local machine>')))
BEGIN
RETURN; -- Login Authorized
END

ELSE IF(@LoginName IN ('SecuredLoginForClients'))
BEGIN
RETURN; -- Login Authorized
END

ELSE            
BEGIN
ROLLBACK; -- Disconnect the session
END

END

SSMS远程连接截图


安全分析与防护建议

伪造localhost连接的风险

确实存在伪造localhost连接的可能性:

  • 同一局域网内,攻击者可通过ARP欺骗、IP欺骗等手段,将数据包源IP伪装成127.0.0.1或服务器本地IP,绕过基于ClientHost的登录触发器校验。
  • 若服务器存在本地提权漏洞,攻击者可先获取服务器低权限本地访问,再以本地身份发起SQL连接,直接绕过远程连接限制和IP校验。

另外你的触发器存在一处隐患:EVENTDATA()返回的<local machine>仅对应使用共享内存协议的本地连接,若硬编码账号通过TCP/IP协议本地连接,ClientHost会显示为服务器的本地IP(如127.0.0.1或网卡IP),此时触发器会拒绝合法连接,导致软件无法正常工作。

补充防护措施

1. 修复登录触发器逻辑

修改触发器,同时校验<local machine>和服务器本地IP段,确保合法本地连接都能通过:

CREATE TRIGGER prevent_ip 
ON ALL SERVER
FOR LOGON
AS
BEGIN
DECLARE @LoginName sysname
DECLARE @ClientHost nvarchar(128)
  
SET @LoginName = ORIGINAL_LOGIN()
SET @ClientHost = EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]','nvarchar(128)')

-- 允许硬编码账号通过本地共享内存或本地IP连接
IF(@LoginName = 'HardcodedLogin' AND 
   (@ClientHost = '<local machine>' OR @ClientHost IN ('127.0.0.1', '你的服务器本地IP')))
BEGIN
RETURN; -- Login Authorized
END

-- 允许客户专用账号连接
ELSE IF(@LoginName = 'SecuredLoginForClients')
BEGIN
RETURN; -- Login Authorized
END

ELSE            
BEGIN
ROLLBACK; -- Disconnect the session
END
END

2. 限制硬编码账号的权限范围

即便无法修改软件的硬编码账号,也可通过权限最小化原则降低风险:

  • 取消该账号的sysadmin角色,仅授予软件运行必需的权限(如特定数据库的db_owner、特定存储过程的执行权限等)。若软件确实需要高权限,可通过存储过程封装操作,仅允许账号执行指定存储过程,禁止直接执行DROP TRIGGER、DROP DATABASE等危险命令。

3. 网络层防护

  • 在服务器防火墙(如Windows防火墙)中,仅允许客户IP段访问1433端口,拒绝其他来源的连接请求。
  • 启用SQL Server的IPsec策略,仅允许指定IP与服务器建立加密的SQL连接,进一步防范IP欺骗。

4. 启用SQL Server审计功能

开启SQL Server的登录审计和对象修改审计,实时监控硬编码账号的登录行为和敏感操作(如触发器删除、权限变更),一旦发现异常立即告警。

5. 隔离硬编码账号的连接路径

将软件的SQL连接配置为仅使用共享内存协议(而非TCP/IP),此时ClientHost始终为<local machine>,彻底杜绝远程伪造本地IP的可能。可在SQL Server配置管理器中禁用硬编码账号的TCP/IP连接权限。


内容的提问来源于stack exchange,提问作者Chloe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 20:37:52