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