2016-09-15 70 views
0

需要一些幫助。不吸引活躍用戶的用戶登錄信息

我有一項工作,每天拉一次用戶登錄並插入表中。這樣做的目的是收集用戶信息,以查看一段時間後可以放棄哪些帳戶。

Insert into [User_Login_Audit] 
    Select 
     login_name, max (login_time) as last_login_time,  
     last_successful_logon, (select @@servername) as server_instance, getdate() 
    from 
     sys.dm_exec_sessions 
    group by 
     login_name, last_successful_logon; 

我正在使用下面的查詢來收集使用註冊服務器的用戶信息。

SELECT 
    [Login_name], 
    MAX([last_login_time]) AS Last_login_date, 
    [server_instance], 
    DATEDIFF(day, getdate(), max([last_login_time])) Days 
FROM 
    [Benefitfocus_DBA].[dbo].[User_Login_Audit] 
WHERE 
    Login_name NOT IN ('NT AUTHORITY\SYSTEM', 'sa','') 
    AND last_successful_logon IS NOT NULL 
GROUP BY 
    Login_name, server_instance 

我已經注意到,上面的查詢是直接從sys.dm_exec_sessions的所有信息。它記錄的某些登錄名已從該實例的安全性中刪除。我只需要在實例上處於活動狀態和/或出現狀態的用戶。有人可以建議一種方法來修改插入查詢,以便只拉取當前處於安全狀態的用戶或第二個查詢中的用戶排序哪些用戶在實例上處於活動狀態?

我希望對此有所瞭解。

回答

0

嘗試一些東西后,我發現,在加入第一收集腳本如下它僅限於當前用戶:

where login_name in (SELECT name FROM sys.database_principals where type<>'R') 
0

看看sys.server_principals看看它是否適合你。您將從當前查詢中的login_name的「名稱」列中進行連接。我不確定您是否刪除登錄或禁用它們,但該系統視圖可以告訴您是否有任何條件爲真。

我知道的一個重要警告是,如果用戶通過Active Directory組訪問服務器,您可以在當前查詢中找到用戶的login_name,但它不會匹配系統中的任何內容因爲相關條目將存在於AD組中。有一些方法可以解決這個問題,但是不知道這在你的系統中是否有用,我在這裏不會詳細討論。

+0

我想我的問題是與AD組即可。這在我所看到的中是有道理的。這讓我懷疑我是否可以將用戶登錄綁定到所用的組。 – bwilliamson

+0

您可以使用t-sql查詢Active Directory ...您可以通過Google查詢更多信息或詢問後續問題是否需要特定幫助。您需要遍歷組來獲得成員資格,然後交叉引用。我個人會通過應用層做這種事情,但是你可以在SQL批處理中完成所有這些工作。 – btberry