SQL Server: cara membuat pengguna dengan akses hanya dari HOSTNAME atau alamat IP tertentu


8

Saya punya satu aplikasi bodoh yang saya andalkan, yang memiliki string koneksi hardcoded di dalamnya.

Untuk meningkatkan keamanan SQL Server saya, saya ingin membuat pengguna SQL sama dengan satu aplikasi di dalam hardcoded, tetapi saya ingin agar pengguna itu dapat menggunakan SQL Server hanya dari host tertentu (alamat ip).

Jawaban:


6

Anda dapat menggunakan Pemicu Logon untuk itu.

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

Jika Anda mencoba terhubung dari IP yang tidak sah, Anda akan mendapatkan kesalahan:

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

Ingatlah bahwa Pemicu Logon berpotensi jahat dan mungkin juga akan mengunci semua orang dari instance. Hati-hati!

Namun, saya pikir Anda tidak benar-benar perlu melakukan itu. Jika Anda ingin mengaktifkan koneksi dari daftar alamat yang diketahui, firewall adalah alat yang paling cocok untuk pekerjaan itu . Hal terburuk yang bisa terjadi adalah pengguna yang salah terhubung dari alamat IP yang dikenal, yang sangat tidak mungkin jika pengguna menjaga kredensial mereka dengan cermat.

Juga, pertimbangkan bahwa alamat IP dapat dipalsukan, jadi saya tidak yakin tingkat keamanan tambahan apa yang akan Anda berikan.


2
Seperti @spaghettidba mengatakan pemicu masuk berpotensi berita buruk. Jika Anda mengalami masalah, baca sqlstudies.com/2014/05/19/escaping-from-a-runaway-logon-trigger ini . Saya membahas metode melewati pemicu, menemukannya, dan menonaktifkannya.
Kenneth Fisher

1
Dia mungkin ingin mengizinkan orang lain selain pengguna aplikasi untuk masuk dari alamat apa pun, tetapi aplikasi hanya dapat berjalan dari satu server sehingga pengguna aplikasi hanya dapat masuk dari alamat itu. Beberapa firewall bisa mengatasinya.
Ross Presser

4

Anda dapat mencapai ini menggunakan pemicu masuk sebagai berikut

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

Setelah pemicu dibuat, Anda dapat menemukannya di Server Objects -> Tab Triggers

Dari blog saya connectsql.com

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.