2016-09-15 6 views
0

これに関する助けが必要です。ユーザーのログイン情報がアクティブなユーザーを引き出していません

私は、ユーザーログインを1日1回プルしてテーブルに挿入するという仕事をしています。これは、ユーザー情報を収集して、しばらくしてどのアカウントを削除できるかを確認することを目的としています。

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からすべての情報を引っ張ることに気付きました。記録するログインの一部は、そのインスタンスのセキュリティから削除されています。私は、インスタンス上にアクティブかつ/または存在するユーザのみが必要です。誰かがインスタンスのセキュリティで現在のユーザーのみを取得する挿入クエリを変更する方法や、2番目のクエリでインスタンス上でアクティブなユーザーを並べ替える方法を提案できますか?

これについての洞察はありがたいです。

答えて

0

は、いくつかのことを試した後、私は最初の収集スクリプトで次のように追加すると、現在のユーザーにそれを制限されていることが分かりました。私が見ていることには意味があります。それは私が使用されたグループにユーザーのログインを結びつけることができるかどうか疑問に思う。
0

sys.server_principalsを見て、それがうまくいくかどうかを確認してください。現在のクエリで使用しているlogin_nameから、そのテーブルの 'name'カラムの結合を行います。ログインを削除するか無効にするかはわかりませんが、どちらの条件が満たされているかをシステムビューで確認できます。

私が知っている大きな注意点は、ユーザーがActive Directoryグループを介してサーバーにアクセスすると、現在のクエリでユーザーのlogin_nameが見つかりますが、システム内のすべてのものと一致しません関連するエントリがADグループに存在するため、表示されます。それを処理する方法はいくつかありますが、それがあなたのシステムにも関係しているかどうかはわかりませんが、ここでは詳しく説明しません。

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

が、私は私の問題は、その後、ADグループであると思う: – bwilliamson

+0

t-sqlを使用してActive Directoryに問い合わせることができます。詳細についてはGoogleに問い合わせるか、特定のヘルプが必要な場合はフォローアップの質問をしてください。あなたはメンバーシップを取得するためにグループを繰り返す必要があり、次にそれを相互参照する必要があります。私は個人的にアプリケーションレイヤーを通してこの種のことを行いますが、SQLバッチ内でこれをすべて行うことができます。 – btberry

関連する問題