2 Eki by NURULLAH ÇAKIR

Kullanılmayan Login’leri Tespit Etmek

Her veritabanı yöneticisi sisteminde atıl durumda olan, kullanılmayan login’leri tespit etmek ve temizlemek ister. SQL Server’da default olarak Login’lerin en son hangi tarihte login olduğu bilgisi bir tabloda ya da dmw’de tutulmuyor. Bu ihtiyacımızı karşılamak için aşağıdaki gibi bir script yazdım.

 

Öncelikle aşağıdaki script yardımıyla her hangi bir veritabanında bir tablo oluşturmalısınız. Ben genel amaçlı kullanacağım için master veritabanını tercih ettim. Bu tablo’da login’in ismi ve son login olduğu tarih bilgisini saklayacağız.

--Aşağıdaki tabloyu oluşturan script'i her instance için 1 defa çalıştıracağız.
use master
create table loginler(
login_name nvarchar(max),
login_time datetime
)

 

--Aşağıdaki ifade de session'ların tutulduğu dmw'den o anda session'ı olan login'lerin isimlerini ve son login tarih'lerini alıyoruz.
SELECT   login_name as[login_name],MAX(login_time)as [login_time]
into #session 
FROM sys.dm_exec_sessions
GROUP BY login_name;


--Bir önceki tarih bilgisini merge ifadesi ile master veritabanında oluşturduğumu tabloya aktarıyoruz.
MERGE INTO [master].dbo.loginler WITH (HOLDLOCK) AS target
USING #session AS source
    ON target.login_name = source.login_name

--Merge ifadesi master veritabanındaki tabloda bu login varsa login'in en son bağlandığı tarihi güncelliyor.
WHEN MATCHED THEN
    UPDATE SET target.login_time = source.login_time


--Eğer login ismi master veritabanındaki tabloda yoksa bu sefer insert işlemi gerçekleştiriyor.
WHEN NOT MATCHED BY TARGET THEN
    INSERT (login_name, login_time)
    VALUES (source.login_name, source.login_time);

DROP TABLE #session

 

Yukarıdaki script’i 1 dakika aralıklarla çalışacak şekilde bir job olarak oluşturabilirsiniz. Daha sonra hangi login’in aktif olarak kullanıldığını, hangi login’in kullanılmadığını sorgulamak için aşağıdaki script’i kullanabilirsiniz.

 

select*from loginler order by login_time asc

 

 

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir