You may use the T-SQL code below to find the last logon dates for the SQL accounts.
use master;
set nocount on
-- find users, last logon time, and disabled state
declare @users_login_time table
(
[type] varchar(255)
, [login_name] varchar(255)
, [last_logon_time] datetime
, [disabled] varchar(255)
)
insert into @users_login_time
select
'type' = [type_desc]
, 'login_name' = sdes.[login_name]
, 'last_logon_time' = max(sdes.[login_time])
, 'disabled' = case when ssprin.[is_disabled] = 1 then cast('Disabled' as varchar) else '' end
from
sys.dm_exec_sessions sdes join sys.server_principals ssprin on sdes.[login_name] = ssprin.[name]
group by
login_name
, is_disabled
, [type_desc]
select * from @users_login_time
-- create list of all known domain users from last logon
declare @domain_accounts table ([accounts] varchar(255))
insert into @domain_accounts
select [login_name] from @users_login_time where [login_name] like '%\%'
select * from @domain_accounts
-- get domain accounts and their associated groups
declare @get_group_members varchar(max)
set @get_group_members = ''
select @get_group_members = @get_group_members +
'exec master..xp_logininfo ''' + [accounts] + ''', ''all'';' + char(10)
from @domain_accounts
declare @groups table
(
[account_name] varchar(255)
, [type] varchar(255)
, [privilege] varchar(255)
, [mapped_login_name] varchar(255)
, [permission_path] varchar(255)
)
insert into @groups exec (@get_group_members)
select * from @groups
-- find accounts and their associated groups
select
'group_name' = case when [permission_path] is null then 'No Group - Individually Added' else [permission_path] end
, 'account_name' = [account_name]
from
@groups
order by
[permission_path]
, [account_name]
use master;
set nocount on
-- find users, last logon time, and disabled state
declare @users_login_time table
(
[type] varchar(255)
, [login_name] varchar(255)
, [last_logon_time] datetime
, [disabled] varchar(255)
)
insert into @users_login_time
select
'type' = [type_desc]
, 'login_name' = sdes.[login_name]
, 'last_logon_time' = max(sdes.[login_time])
, 'disabled' = case when ssprin.[is_disabled] = 1 then cast('Disabled' as varchar) else '' end
from
sys.dm_exec_sessions sdes join sys.server_principals ssprin on sdes.[login_name] = ssprin.[name]
group by
login_name
, is_disabled
, [type_desc]
select * from @users_login_time
-- create list of all known domain users from last logon
declare @domain_accounts table ([accounts] varchar(255))
insert into @domain_accounts
select [login_name] from @users_login_time where [login_name] like '%\%'
select * from @domain_accounts
-- get domain accounts and their associated groups
declare @get_group_members varchar(max)
set @get_group_members = ''
select @get_group_members = @get_group_members +
'exec master..xp_logininfo ''' + [accounts] + ''', ''all'';' + char(10)
from @domain_accounts
declare @groups table
(
[account_name] varchar(255)
, [type] varchar(255)
, [privilege] varchar(255)
, [mapped_login_name] varchar(255)
, [permission_path] varchar(255)
)
insert into @groups exec (@get_group_members)
select * from @groups
-- find accounts and their associated groups
select
'group_name' = case when [permission_path] is null then 'No Group - Individually Added' else [permission_path] end
, 'account_name' = [account_name]
from
@groups
order by
[permission_path]
, [account_name]
use master; set nocount on -- find users, last logon time, and disabled state declare @users_login_time table ( [type] varchar(255) , [login_name] varchar(255) , [last_logon_time] datetime , [disabled] varchar(255) ) insert into @users_login_time select 'type' = [type_desc] , 'login_name' = sdes.[login_name] , 'last_logon_time' = max(sdes.[login_time]) , 'disabled' = case when ssprin.[is_disabled] = 1 then cast('Disabled' as varchar) else '' end from sys.dm_exec_sessions sdes join sys.server_principals ssprin on sdes.[login_name] = ssprin.[name] group by login_name , is_disabled , [type_desc] select * from @users_login_time -- create list of all known domain users from last logon declare @domain_accounts table ([accounts] varchar(255)) insert into @domain_accounts select [login_name] from @users_login_time where [login_name] like '%\%' select * from @domain_accounts -- get domain accounts and their associated groups declare @get_group_members varchar(max) set @get_group_members = '' select @get_group_members = @get_group_members + 'exec master..xp_logininfo ''' + [accounts] + ''', ''all'';' + char(10) from @domain_accounts declare @groups table ( [account_name] varchar(255) , [type] varchar(255) , [privilege] varchar(255) , [mapped_login_name] varchar(255) , [permission_path] varchar(255) ) insert into @groups exec (@get_group_members) select * from @groups -- find accounts and their associated groups select 'group_name' = case when [permission_path] is null then 'No Group - Individually Added' else [permission_path] end , 'account_name' = [account_name] from @groups order by [permission_path] , [account_name]