SQL Server:特定のホスト名またはIPアドレスからのみアクセスできるユーザーを作成する方法


8

依存している愚かなアプリが1つあります。このアプリには、接続文字列がハードコードされています。

SQL Serverのセキュリティを高めるために、SQLユーザーをアプリ内にハードコーディングされたものと同じにしたいのですが、そのユーザーが特定のホスト(IPアドレス)からのみSQL Serverを使用できるようにしたいと考えています。

回答:


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

不正なIPから接続しようとすると、エラーが発生します。

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

ログオントリガーは潜在的に悪質であり、インスタンスから全員をロックする可能性があることも覚えておいてください。注意してください!

しかし、あなたは本当にそれをする必要はないと思います。既知のアドレスのリストからの接続を有効にする場合は、ファイアウォールがジョブに最適なツールです。発生する可能性のある最悪の事態は、既知のIPアドレスから接続するユーザーが間違っていることです。これは、ユーザーが資格情報を注意深く保持している場合はほとんどありません。

また、IPアドレスが偽装される可能性があることを考慮に入れて、追加のセキュリティをどの程度提供するかわかりません。


2
@spaghettidbaが言ったように、ログオントリガーは潜在的に本当に悪いニュースです。問題が発生した場合は、このsqlstudies.com/2014/05/19/escaping-from-a-runaway-logon-triggerをお読みください。トリガーをバイパスし、見つけて、無効にする方法を調べました。
Kenneth Fisher

1
アプリユーザー以外のユーザーに任意のアドレスからのログインを許可することもできますが、アプリケーションは1つのサーバーからしか実行できないため、アプリユーザーはそのアドレスからしかログインできません。それを処理できるファイアウォールはほとんどありません。
ロスプレッサー2014

4

次のようにログオントリガーを使用してこれを達成できます

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

トリガーが作成されると、[サーバーオブジェクト]-> [トリガー]タブに表示されます。

私のブログから connectsql.com

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.