保护与SQL Server的连接

时间:2015-11-19 18:14:22

标签: sql-server security

我需要一些关于如何保护SQL Server的建议。我想知道

  1. 有一种方法可以拒绝用户从excel创建odbc以连接到它
  2. 有一种方法可以使用私钥/公钥对服务器进行身份验证
  3. 这是一种只允许特定应用程序连接到服务器的方法
  4. 我可以在前面添加防火墙来过滤IP,但我也希望过滤应用程序。

    有办法吗?

    非常感谢

2 个答案:

答案 0 :(得分:1)

不幸的是,没有任何机制可以安全地阻止给定的应用程序连接您似乎尝试的方式。

如果用户拥有SQL Server的有效凭据,并且服务器配置为接受来自客户端计算机的远程连接(即防火墙允许连接等),则最好的假设是客户端将能够连接到SQL Server成功。

来自Gary的logon trigger想法是一种有效的机制,可以通过限制单个用户的并发会话数量来防止滥用,并验证应用程序名称是保持诚实人员诚实的一种方式,但请注意应用程序名称很容易被欺骗,不应该用作强大的身份验证/授权机制。

SQL Server可以使用TLS / SSL证书向客户端验证自身,但不能对客户端进行身份验证。即使它可能不是您的方案的解决方案,仍然建议使用加密连接。

还有一项建议。当您将SQL Server暴露给潜在的恶意IP时,您可以打赌通过猜测SA密码会自动尝试攻破它。如果可能,请仅使用集成身份验证(Windows身份验证),否则,我强烈建议您使用ALTER LOGIN DDL重命名和/或禁用SA帐户。

我希望这些信息有所帮助,

-Raul Garcia

SQL安全

答案 1 :(得分:0)

只有两种方法可以对SQL Server进行身份验证:

  1. 集成登录,即您使用Windows凭据或
  2. 混合模式 - 您可以登录使用Windows登录,也可以通过名称和密码使用SQL Server凭据登录。
  3. 您可以在文章

    中创建logon trigger示例
    CREATE TRIGGER connection_limit_trigger
    ON ALL SERVER WITH EXECUTE AS 'login_test'
    FOR LOGON
    AS
    BEGIN
    IF ORIGINAL_LOGIN()= 'login_test' AND
        (SELECT COUNT(*) FROM sys.dm_exec_sessions
                WHERE is_user_process = 1 AND
                    original_login_name = 'login_test') > 3
        ROLLBACK;
    END;
    

    使用登录触发器,您可以根据需要测试应用程序等,如果您希望拒绝登录尝试,则回滚。

    e.g。如果app_name<>然后'MyApp'回滚连接尝试。

    Re:公钥/私钥,如果使用VPN,您将在VPN基础设施中使用公钥/私钥。如果您只是通过标准套接字直接连接到服务器,则只是直接使用SQL Server基础结构,即您无法控制公钥/私钥的使用。同样适用于IPsec。

    SQL Server确实支持公钥/私钥以及对称密钥,但这并没有与建立连接直接相关的任何内容。

    您可能想要的是encrypted connection,它要求sql使用SSL(包括pub / priv密钥)进行连接。您将服务器配置为支持加密并强制它要求SSL,并且仅允许SSL连接。