SQL Server’da Kullanıcı Oturumlarını İzleme: IP Adresi ve Login Zamanı ile Kullanıcı Oturumlarının Raporlanması
SQL Server yöneticileri, veritabanı güvenliği ve performans yönetimi için kullanıcıların sunucuya en son ne zaman giriş yaptıklarını, hangi IP adreslerinden bağlandıklarını ve oturum açma saatlerini bilmek isteyebilir. Bu bilgiler, hem kullanıcı aktivitelerinin izlenmesinde hem de güvenlik ihlallerinin önlenmesinde önemli rol oynar. Bu yazıda, SQL Server’da kullanıcıların oturum açma bilgilerini nasıl sorgulayacağımızı ve bir rapor haline getirebileceğimizi detaylandıracağız.
1. SQL Server’da Oturum Açma Bilgilerini Anlama
SQL Server, kullanıcıların oturum açma bilgilerini DMV’ler (Dinamik Yönetim Görünümleri) aracılığıyla sağlar. sys.dm_exec_sessions ve sys.dm_exec_connections DMV’leri, kullanıcıların oturumları, bağlantı bilgileri, IP adresleri ve login zamanları hakkında bilgi verir. Bu DMV’lerden elde edilen veriler yalnızca aktif oturumları kapsadığı için, sunucu yeniden başlatıldığında veya kullanıcı oturumu kapandığında bu bilgiler kaybolur.
Birden fazla kullanıcı SQL Server’a eriştiğinde, aşağıdaki soruları yanıtlayabilmek önemlidir:
- Hangi kullanıcılar şu anda oturum açmış durumda?
- Her bir kullanıcının sunucuya en son ne zaman bağlandığını nasıl öğrenebiliriz?
- Kullanıcıların hangi IP adreslerinden bağlandığını nasıl görebiliriz?
Bu bilgileri elde etmek için SQL Server’da bazı sorgular yazarak, veritabanı güvenliğini ve kullanıcı etkinliklerini izleyebiliriz.
2. Kullanıcıların En Son Login Zamanını Sorgulama
Kullanıcıların en son ne zaman SQL Server’a login olduklarını öğrenmek için sys.server_principals ve sys.dm_exec_sessions tablolarını kullanabiliriz. SQL Server’a tanımlı tüm kullanıcıların listesini sys.server_principals
tablosu üzerinden alabiliriz. Ancak oturum bilgileri yalnızca aktif oturumları içerdiğinden, geçmiş oturum verilerini görmek istiyorsak SQL Server Audit (Denetim) gibi bir yapı kurmamız gerekir.
Aşağıdaki sorgu, SQL Server’da tanımlı olan tüm kullanıcıların en son login zamanını göstermektedir:
SELECT
sp.name AS KullaniciAdi,
MAX(s.login_time) AS SonLoginZamani
FROM
sys.server_principals sp
LEFT JOIN
sys.dm_exec_sessions s ON sp.sid = s.security_id
WHERE
sp.type IN ('S', 'U') -- 'S' SQL kullanıcıları, 'U' Windows kullanıcıları
GROUP BY
sp.name
ORDER BY
SonLoginZamani DESC;
Sorgu Açıklaması:
sys.server_principals
: SQL Server’daki tüm kullanıcıları listeler.sys.dm_exec_sessions
: Yalnızca aktif oturumları listeler.LEFT JOIN
: Sunucuda tanımlı ancak şu anda aktif olmayan kullanıcıları da listelemek için kullanılır. Oturum açmamış kullanıcılarınSonLoginZamani
değeriNULL
olarak gelecektir.
Bu sorgu, sunucuda tanımlı tüm kullanıcıları listeler ve oturum açmış kullanıcıların en son login zamanını gösterir.
3. Kullanıcıların IP Adreslerini ve Login Zamanlarını Raporlama
Kullanıcıların SQL Server’a bağlanmak için kullandıkları IP adreslerini görmek, güvenlik açısından oldukça önemlidir. Özellikle uzaktan erişim sağlanan sunucularda, kullanıcıların hangi IP’lerden bağlandığına dair bir rapor oluşturmak, yetkisiz erişimlerin önlenmesine yardımcı olabilir.
Aşağıdaki sorgu, oturum açmış kullanıcıların kullanıcı adlarını, IP adreslerini ve login zamanlarını listelemektedir:
SELECT
s.login_name AS KullaniciAdi,
c.client_net_address AS IP_Adresi,
s.login_time AS LoginZamani
FROM
sys.dm_exec_sessions s
JOIN
sys.dm_exec_connections c ON s.session_id = c.session_id
ORDER BY
LoginZamani DESC;
Sorgu Açıklaması:
sys.dm_exec_sessions
: Oturum açmış kullanıcıların login zamanlarını içerir.sys.dm_exec_connections
: Oturum açan kullanıcıların bağlantı bilgilerini, özellikleclient_net_address
(kullanıcının IP adresini) verir.JOIN
:session_id
üzerinden yapılan bu birleşim, her kullanıcının IP adresi ve login zamanını tek bir satırda gösterir.
Bu sorgu, kullanıcıların SQL Server’a erişim sağladıkları IP adreslerini ve oturum açma zamanlarını raporlamaktadır.
4. Senaryo: SQL Server Kullanıcı Oturumları Raporu Hazırlama
Bir veritabanı yöneticisi olarak, güvenliği artırmak ve kullanıcı aktivitelerini takip etmek için haftalık olarak bir kullanıcı oturum raporu hazırlamanız gerektiğini düşünelim. Bu raporda şunlar yer almalı:
- Sunucuya login olan kullanıcıların kullanıcı adları
- Her kullanıcının sunucuya en son login zamanı
- Her kullanıcının bağlantı kurduğu IP adresleri
Yukarıdaki iki sorguyu birleştirerek, kullanıcıların en son oturum açma zamanlarını ve IP adreslerini gösteren tam bir rapor hazırlayabiliriz:
WITH UserLogins AS (
SELECT
sp.name AS KullaniciAdi,
MAX(s.login_time) AS SonLoginZamani
FROM
sys.server_principals sp
LEFT JOIN
sys.dm_exec_sessions s ON sp.sid = s.security_id
WHERE
sp.type IN ('S', 'U')
GROUP BY
sp.name
),
ActiveUserSessions AS (
SELECT
s.login_name AS KullaniciAdi,
c.client_net_address AS IP_Adresi,
s.login_time AS LoginZamani
FROM
sys.dm_exec_sessions s
JOIN
sys.dm_exec_connections c ON s.session_id = c.session_id
)
SELECT
ul.KullaniciAdi,
ul.SonLoginZamani,
aus.IP_Adresi,
aus.LoginZamani
FROM
UserLogins ul
LEFT JOIN
ActiveUserSessions aus ON ul.KullaniciAdi = aus.KullaniciAdi
ORDER BY
ul.SonLoginZamani DESC;
Sorgu Açıklaması:
- UserLogins:
sys.server_principals
vesys.dm_exec_sessions
kullanılarak kullanıcıların en son login zamanları bulunur. - ActiveUserSessions:
sys.dm_exec_sessions
vesys.dm_exec_connections
kullanılarak aktif oturumlar için IP adresi ve login zamanı bilgileri alınır. - Sonuç olarak, tüm kullanıcılar, en son login zamanı, oturum açmışlarsa IP adresleri ve login zamanları raporda yer alır.
5. Güvenlik ve Denetim İçin Dikkat Edilmesi Gereken Noktalar
Bu sorgular yalnızca aktif oturumları izlediğinden, tarihsel oturum kayıtlarına ihtiyaç duyduğunuzda SQL Server Audit (Denetim) gibi daha kalıcı bir çözüm kullanmanız önerilir.
Audit, kullanıcı etkinliklerini ve erişim zamanlarını kaydederek daha kapsamlı güvenlik raporları oluşturmanıza olanak tanır.
Sonuç
Bu makalede, SQL Server kullanıcılarının en son login zamanlarını, IP adreslerini ve login bilgilerini raporlamak için nasıl sorgular yazabileceğinizi öğrendiniz.
Bu bilgiler, veritabanı güvenliğini artırmak ve yetkisiz erişimleri izlemek için kritik öneme sahiptir.
SQL Server Audit ile bu raporlara kalıcı olarak erişmek ve güvenlik stratejilerinizi daha etkin hale getirmek de mümkündür.