← Back to list

SQL Server’da İzin Verilmeyen Hostname’ler Üzerinden Bağlantıları Loglama

Veri tabanı güvenliği her geçen gün daha da önemli hale geliyor. Bir DBA olarak, izinsiz girişleri tespit etmek ve bu girişleri detaylı bir…

Muhammet ORAL · 2024-09-11 20:08 · 1 claps · 1.7 min read
#sql-server #sql-server-audit #database-auditing #database-administration #database-management
Open on Medium ↗
Wiki topics: BIZ · Business Strategy

SQL Server’da İzin Verilmeyen Hostname’ler Üzerinden Bağlantıları Loglama

Veri tabanı güvenliği her geçen gün daha da önemli hale geliyor. Bir DBA olarak, izinsiz girişleri tespit etmek ve bu girişleri detaylı bir şekilde kayıt altına almak oldukça kritik. Bu yazımda, SQL Server’da belirlediğiniz hostname’ler dışında sisteme bağlanan kullanıcıları nasıl loglayabileceğinizi göstereceğim.

AuditLog Tablosu Oluşturma

Öncelikle bağlantı bilgilerini saklayacağımız bir tabloya ihtiyacımız var. Bu tabloyu aşağıdaki gibi oluşturuyoruz:


CREATE TABLE [dbo].[AUDITLOG](

[SESIONID] [INT] NULL,

[LOGONTIME] [DATETIME] NOT NULL,

[NET_TRANSPORT] [VARCHAR](250) NOT NULL,

[PROTOCOL_TYPE] [VARCHAR](250) NULL,

[AUTH_TYPE] [VARCHAR](250) NOT NULL,

[NET_PACKETSIZE] [INT] NULL,

[CLIENT_NETADDRESS] [VARCHAR](250) NULL,

[PROGRAM_NAME] [VARCHAR](250) NOT NULL,

[HOSTNAME] [VARCHAR](250) NOT NULL,

[NT_USERNAME] [VARCHAR](250) NOT NULL,

[NET_LIBRARY] [VARCHAR](250) NOT NULL,

[NT_DOMAIN] [VARCHAR](250) NOT NULL

) ON [PRIMARY]

Bu tablo, SQL Server’a bağlanan kullanıcıların bilgilerini detaylı bir şekilde saklamak için tasarlandı. Tabloya ekleyeceğimiz her bir alan şu bilgileri içeriyor:

  • SESIONID: Kullanıcının session ID’si.
  • LOGONTIME: Bağlanma zamanı.
  • NET_TRANSPORT: Kullanılan protokol (TCP, Shared Memory, Named Pipes vb.).
  • AUTH_TYPE: Kimlik doğrulama türü (NTLM, SQL).
  • CLIENT_NETADDRESS: Kullanıcının IP adresi veya Ethernet adresi.
  • PROGRAM_NAME: Bağlantının yapıldığı uygulama.
  • HOSTNAME: Bağlanılan bilgisayarın adı.
  • NT_USERNAME: Windows kullanıcısının adı.
  • NT_DOMAIN: Kullanıcının bulunduğu domain.

AllowedHost Tablosu Oluşturma

İzin verilen hostname’leri ve kullanıcıları kaydedeceğimiz ALLOWEDHOST tablosunu ise aşağıdaki gibi oluşturuyoruz:

CREATE TABLE [dbo].[ALLOWEDHOST](
    [ID] INT IDENTITY(1,1) PRIMARY KEY,  -- Her kayıt için benzersiz kimlik
    [USERNAME] VARCHAR(250) NOT NULL,    -- İzin verilen kullanıcının adı
    [HOSTNAME] VARCHAR(250) NOT NULL,    -- İzin verilen hostname
    [CREATED_DATE] [DATETIME] NOT NULL DEFAULT GETDATE()  -- Kayıt eklenme tarihi
) ON [PRIMARY];

Bu tablo, hangi kullanıcı ve hostname’lerin SQL Server’a bağlanmasına izin verildiğini belirler. USERNAME ve HOSTNAME sütunlarına izin verilen kullanıcılar ve bilgisayarların adları eklenir.

Trigger Yazımı

Şimdi, SQL Server’a belirlenen hostname’ler dışında yapılan bağlantıları loglayacak olan trigger’ı yazalım:

CREATE TRIGGER [connection_AUDIT]
ON ALL SERVER
FOR LOGON
AS
BEGIN
  DECLARE @HOSTNAME AS VARCHAR(200);

  -- Bağlanan bilgisayarın adını alıyoruz
  SELECT @HOSTNAME = HOST_NAME();

  -- Eğer bilgisayar hostname listemizde yoksa bağlantı bilgilerini logluyoruz
  IF NOT EXISTS (SELECT * FROM AUDIT.DBO.ALLOWEDHOST WHERE HOSTNAME = @HOSTNAME)
  BEGIN
    INSERT INTO AUDIT.DBO.AUDITLOG 
      (SESIONID, LOGONTIME, NET_TRANSPORT, PROTOCOL_TYPE, AUTH_TYPE, NET_PACKETSIZE, CLIENT_NETADDRESS,
      PROGRAM_NAME, HOSTNAME, NT_USERNAME, NET_LIBRARY, NT_DOMAIN)
    SELECT
      cnn.session_id SESIONID,
      cnn.connect_time LOGONTIME,
      cnn.net_transport NET_TRANSPORT,
      cnn.protocol_type PROTOCOL_TYPE,
      cnn.auth_scheme AUTH_TYPE,
      cnn.net_packet_size NET_PACKETSIZE,
      cnn.client_net_address CLIENT_NETADDRESS,
      prc.program_name PROGRAM_NAME,
      hostname HOSTNAME,
      nt_username NT_USERNAME,
      net_library NET_LIBRARY,
      nt_domain NT_DOMAIN
    FROM master.sys.dm_exec_connections cnn
    INNER JOIN master.dbo.sysprocesses prc
      ON prc.spid = cnn.session_id
    WHERE prc.spid = @@SPID;
  END
END;

Bu trigger, SQL Server’a bağlanan her kullanıcıyı kontrol eder ve hostname’in izin verilenler listesinde olup olmadığını sorgular. Eğer izin verilmeyen bir hostname ile bağlantı kurulmuşsa, bu kullanıcı bilgileri AUDITLOG tablosuna kaydedilir.

Sonuç

Yukarıdaki kodlar, SQL Server’da hostname bazlı bir bağlantı kontrol mekanizması oluşturmanıza yardımcı olacaktır. Belirlenen hostname’ler dışında yapılan tüm bağlantılar detaylı olarak loglanacak ve izinsiz erişimler hızlıca tespit edilebilecektir.

Bu yöntemle veri tabanı güvenliğinizi bir adım daha ileriye taşıyabilir ve izinsiz girişleri yakalayarak güvenlik ihlallerini önleyebilirsiniz.


메타데이터
post_id
cc3f810b0c3f
slug
sql-serverda-i̇zin-verilmeyen-hostname-ler-üzerinden-bağlantıları-loglama-cc3f810b0c3f
url
https://medium.com/@moral37/sql-serverda-i%CC%87zin-verilmeyen-hostname-ler-%C3%BCzerinden-ba%C4%9Flant%C4%B1lar%C4%B1-loglama-cc3f810b0c3f
canonical_url
https://medium.com/@moral37/sql-serverda-i%CC%87zin-verilmeyen-hostname-ler-%C3%BCzerinden-ba%C4%9Flant%C4%B1lar%C4%B1-loglama-cc3f810b0c3f
author_url
https://medium.com/@moral37
status
ok
fetched_at
2026-06-24 04:09:36