SQL Server: Erstellen eines Benutzers mit Zugriff nur über bestimmte HOSTNAME- oder IP-Adressen

8

Ich habe eine blöde App, auf die ich mich verlasse und die eine fest codierte Verbindungszeichenfolge enthält.

Um die Sicherheit meines SQL Servers zu erhöhen, würde ich SQL-Benutzer gerne mit einem fest codierten Benutzer in der App identisch machen, aber ich möchte diesem Benutzer erlauben, SQL Server nur von einem bestimmten Host (IP-Adresse) aus verwenden zu können.

Adoptilot
quelle

Antworten:

6

Sie können dafür einen Anmeldetrigger verwenden.

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

Wenn Sie versuchen, eine Verbindung von einer nicht autorisierten IP-Adresse herzustellen, wird folgende Fehlermeldung angezeigt:

Logon failed for login 'bob' due to trigger execution.

Denken Sie daran, dass Anmeldeauslöser möglicherweise böse sind und möglicherweise auch alle Benutzer von der Instanz ausschließen. Achtung!

Ich denke jedoch, dass Sie das nicht wirklich tun müssen. Wenn Sie Verbindungen über eine Liste bekannter Adressen aktivieren möchten, ist eine Firewall das am besten geeignete Tool für diesen Job . Das Schlimmste, was passieren kann, ist, dass der falsche Benutzer eine Verbindung von einer bekannten IP-Adresse herstellt. Dies ist sehr unwahrscheinlich, wenn Benutzer ihre Anmeldeinformationen sorgfältig aufbewahren.

Berücksichtigen Sie außerdem, dass IP-Adressen gefälscht werden können, sodass ich nicht sicher bin, welchen Grad an zusätzlicher Sicherheit Sie bereitstellen würden.

spaghettidba
quelle
2
Wie @spaghettidba sagte, sind Anmeldeauslöser möglicherweise wirklich schlechte Nachrichten. Wenn Sie auf Probleme stoßen, lesen Sie diese Datei sqlstudies.com/2014/05/19/escaping-from-a-runaway-logon-trigger . Ich ging Methoden durch, um den Auslöser zu umgehen, ihn zu finden und zu deaktivieren.
Kenneth Fisher
1
Möglicherweise möchte er anderen Personen als dem App-Benutzer erlauben, sich von einer beliebigen Adresse aus anzumelden, aber die Anwendung kann nur von einem Server ausgeführt werden, sodass sich der App-Benutzer nur von dieser Adresse aus anmelden kann. Nur wenige Firewalls können damit umgehen.
Ross Presser
4

Sie können dies mithilfe des Anmeldetriggers wie folgt erreichen

USE master
GO
-- Create table to hold valid IP values
CREATE TABLE ValidIPAddress (IP NVARCHAR(15)
CONSTRAINT PK_ValidAddress PRIMARY KEY)

-- Declare local machine as valid one
INSERT INTO ValidIPAddress
SELECT '<local machine>'
-- Create Logon Trigger to stop logins from invalid IPs
CREATE TRIGGER tr_LogOn_CheckIP ON ALL SERVER
    FOR LOGON
AS
    BEGIN
        DECLARE @IPAddress NVARCHAR(50) ;
        SET @IPAddress = EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]',
                                           'NVARCHAR(50)') ;
        IF NOT EXISTS ( SELECT  IP
                        FROM    master..ValidIPAddress
                        WHERE   IP = @IPAddress )
            BEGIN
            -- If login is not a valid one, then undo login process
                SELECT  @IPAddress
                ROLLBACK --Undo login process
            END

    END

Sobald der Trigger erstellt wurde, finden Sie ihn unter Serverobjekte -> Registerkarte Trigger

Von meinem Blog connectsql.com

aasim.abdullah
quelle