select du.username||case when du.account_status='OPEN' then '' else ' ('||du.account_status||')' end USERNAME, to_char(max(da.TIMESTAMP),'DD.MM.YYYY') LASTLOGON
from dba_users du left join dba_audit_session da on da.username=du.username
where du.default_tablespace='USERS'
and du.username not in ('APEX_PUBLIC_USER','ORACLE_OCM','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR') --Исключаем из выборки пользователей, которые создаются по-умолчанию в процессе установки и конфигурирования Oracle
and du.username like '%=_%' escape '=' -- Включаем в выборку только тех пользователей, у которых в имени есть символ подчеркивания (мы только так схемы и называем)
group by du.username||case when du.account_status='OPEN' then '' else ' ('||du.account_status||')' end
order by 1 asc;
Пример:
[oracle@dbserver playground]$ ./olastlogon.sh
USERNAME                                                      LASTLOGON
----------------------------------------------------------------- ----------
F_ANGARSK_150218                                              04.03.2015
F_BRATSK_150218
F_IRKOBL_150129                                                   06.03.2015
3 rows selected.
/* bash-вариант */:
cat olastlogon.sh
#!/bin/bash
# Selecting usernames and their statuses from dba_users with last logon info from dba_audit_session (ORACLE)
daScr=/tmp/osu_140829.sql
echo SET LINESIZE 150\;>$daScr
echo SET PAGESIZE 300\;>>$daScr
echo select du.username\|\|case when du.account_status=\'OPEN\' then \'\' else \' \(\'\|\|du.account_status\|\|\'\)\' end USERNAME, to_char\(max\(da.TIMESTAMP\),\'\DD.MM.YYYY'\) LASTLOGON>>$daScr
echo from dba_users du left join dba_audit_session da on da.username=du.username>>$daScr
echo where du.default_tablespace=\'USERS\'>>$daScr
echo and du.username not in \(\'APEX_PUBLIC_USER\',\'ORACLE_OCM\'\,\'SPATIAL_CSW_ADMIN_USR\',\'SPATIAL_WFS_ADMIN_USR\'\) --Исключаем из выборки пользователей, которые создаются по-умолчанию в процессе установки и конфигурирования Oracle>>$daScr
echo and du.username like \'%=_%\' escape \'=\' -- Включаем в выборку только тех пользователей, у которых в имени есть символ подчеркивания \(мы только так схемы и называем\)>>$daScr
echo group by du.username\|\|case when du.account_status=\'OPEN\' then \'\' else \' \(\'\|\|du.account_status\|\|\'\)\' end>>$daScr
echo order by 1 asc\;>>$daScr
echo exit\;>>$daScr
if [ $USER == root ]
then
su - oracle -c "sqlplus / as sysdba @$daScr"
else
sqlplus / as sysdba @$daScr
fi
rm $daScr
if [[ -n $DISPLAY ]]; then read -p 'Press ENTER key to exit.'; fi
----
Необходимо, чтобы заполнялась таблица dba_audit_session, для этого:
alter system set audit_trail=true scope=spfile; --включение параметра
audit connect; --либо аудит любого подключения
audit create session whenever successful; --либо аудит только успешно созданных сессий (сейчас указано это)
create pfile from spfile; - сохранить параметры
Перезапустить экземпляр Oracle.
Комментариев нет:
Отправить комментарий