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…
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