2017-12-20 297 views
3

特定のユーザーの最後にログインした日付を取得する方法を教えてください。 私はGoogleで検索して、このクエリSQL Server 2016 - ユーザーの最終ログイン日時を取得する方法

SELECT name, accdate FROM sys.syslogins 

につまずいた。しかしaccdate列は廃止しているようだ、と更新されません。

私は別の手がかりに

SELECT login_name, max(login_time) as last_logged_in 
FROM sys.dm_exec_sessions GROUP BY login_name 

を持っている。しかし、それは、私は、システムのユーザーのためだけの結果を示して、私はこのクエリ

CREATE USER test1 FOR LOGIN test1 WITH DEFAULT_SCHEMA = 'test1' 

で作成されていないものは、問題は、作り方をカスタム作成されますユーザーはsys.dm_exec_sessionsに表示されるか、その解決策の代替手段は何ですか?

+1

わからないに保存されているが、 'accdate'が実際に' createdate'と同じです。 'sys.syslogins'のDDLを見ると' \t createdate = p.create_date'と 'accdate = p.create_date'と定義されています。 SQL Serverからログイン日を取得できるかどうかはわかりません。この情報を保存するには、何らかの拡張イベントを設定する必要があります。私は*サーバレベルのトリガも設定できると仮定していますが、あなたの挿入するテーブルがパブリックでアクセス可能であることを確認してください。ユーザは誰もDENYを持たない(そうでなければログインできません)。私は本当にトリガーをお勧めしません。 – Larnu

+0

[Stack DBA](https://dba.stackexchange.com/)でこの質問にもっと喜んでいるかもしれません。 @Larnu氏は、SQL Serverはこれを、そのままでは実行しないと言いました。 [拡張イベント](https://msdn.microsoft.com/en-us/library/bb630354%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396)を調べます。 –

答えて

0

使用

は、すべてのアクティブなユーザー接続と内部 タスクに関する情報が表示されていることをsys.dm_exec_sessionsシステムビュー。この情報には、クライアントバージョン、クライアントプログラム名、 クライアントログイン時刻、ログインユーザー、現在のセッション設定などが含まれます。

ここでは、少しのスクリプトがあなたを助けてくれることを期待しています!

SELECT login_name [Login] , MAX(login_time) AS [Last Login Time] 
FROM sys.dm_exec_sessions 
GROUP BY login_name; 

UPDATE

と新しいログインについて、あなたはので、ログインを作成するための次のコードを使用しsys.dm_exec_sessions

にレコードを取得するため、まず彼らとログインする必要があります: -

CREATE LOGIN NewAdminName WITH PASSWORD = '[email protected]' 
GO 
CREATE USER [NewAdminName] FOR LOGIN [NewAdminName] 
EXEC sp_addrolemember N'db_owner', N'NewAdminName' 

今すぐログインしてください: -

成功しログインした後、このログインの情報がsys.dm_exec_sessions

なぜ
+0

私はすでにそれをしました。問題は、私が必要とするユーザーがいないということです。例えば、私はユーザ '' test1'''を持っていますが、そのユーザのビューにはデータはありません。何らかの形でそのユーザを「プッシュ」して、そのユーザのログを有効にできるのであれば、大丈夫でしょうか。 – kertok

+0

まずsysにレコードを取得するために作成したユーザ名でログインする必要があります。dm_exec_sessions ' –

+0

@kertok、plz check updateセクション。 –

関連する問題