SQL Server:如何创建只能从特定 HOSTNAME 或 IP 地址访问的用户

ado*_*lot 8 security sql-server sql-server-2012

我有一个我依赖的愚蠢的应用程序,里面有硬编码的连接字符串。

为了提高我的 SQL Server 的安全性,我想让 SQL 用户与内部应用程序的硬编码相同,但我希望该用户只能从特定主机(IP 地址)使用 SQL Server。

spa*_*dba 6

您可以为此使用登录触发器。

CREATE TRIGGER TR_check_ip_address
ON ALL SERVER
FOR LOGON
AS 
BEGIN

    DECLARE @ip_addr varchar(48)

    SELECT @ip_addr = client_net_address
    FROM sys.dm_exec_connections
    WHERE session_id = @@SPID

    IF ORIGINAL_LOGIN() = 'bob' AND @ip_addr <> '127.0.0.1'
        ROLLBACK;

END
Run Code Online (Sandbox Code Playgroud)

如果您尝试从未经授权的 IP 连接,您将收到错误消息:

Logon failed for login 'bob' due to trigger execution.
Run Code Online (Sandbox Code Playgroud)

请记住,登录触发器可能是邪恶的,并且可能最终将所有人锁定在实例之外。当心!

但是,我认为你真的不需要这样做。如果要启用来自已知地址列表的连接,防火墙是最适合此工作的工具。可能发生的最糟糕的事情是错误的用户从已知的 IP 地址连接,如果用户小心地保留他们的凭据,这种情况就不太可能发生。

另外,考虑到 IP 地址可能会被欺骗,因此我不确定您将提供何种程度的额外安全性。

  • 正如@spaghettidba 所说,登录触发器可能真的是个坏消息。如果您遇到问题,请阅读此 http://sqlstudies.com/2014/05/19/escaping-from-a-runaway-logon-trigger/。我介绍了绕过触发器、找到它和禁用它的方法。 (2认同)