1

Temat: jak sprqawdzić status logowania użytkowników.

Witam,

Chciał bym się dowiedzieć; w jaki sposób wyselektować sobie użytkowników danej bazy którzy mają założone konto LOGIN; ale nigdy się nie logowali do bazy ?

Pozdrawiam

2

Odp: jak sprqawdzić status logowania użytkowników.

Z tego co wiem nie ma takiej możliwości, można wyświetlić użytkowników, mających na dzień wykonania skryptu dostęp do konkretnej bazy danych ale nic więcej.

Aby zrealizować to co chcesz musiał byś zbierać w logach informacje o zalogowaniu użytkownika i czytać taki log raz na dobę, a w bazie oznakowywać sobie użytkownika jako zalogowanego.
Można też utworzyć sobie  tabelą odnotowującą zdarzenia zalogowania, ale wtedy aplikacja, która zużytkowuje bazę musiała by do tej tabeli dokonywać insertów.

Kiedyś miałem podobny problem i chciałem wykorzystać triggery wyzwalane przy zdarzeniu np inserty ale nie udało mi się podpiąć do niczego bo nie ma takiej tabeli systemowej, która przechowywała by sesje użytkownika (sesje można wyświetlić)
Poniżej masz selecta, który wyświetla zalogowanych użytkowników

SELECT
d.datname AS "BAZA DANYCH"
,u.rolname AS "ZALOGOWANY UŻYTKOWNIK"
,pg_stat_get_backend_client_addr(s.backendid)::character varying AS "Z KOMPUTERA O IP"
,pg_stat_get_backend_start(s.backendid)::date as "Start Klienta"
,count(*) as ilosc_nawiazanych_polaczen
FROM pg_database d
, (SELECT pg_stat_get_backend_idset() AS backendid) s
, pg_authid u
WHERE pg_stat_get_backend_dbid(s.backendid) = d.oid
  AND pg_stat_get_backend_userid(s.backendid) = u.oid
  AND d.datname = current_database()
group by
d.datname
,u.rolname
,pg_stat_get_backend_client_addr(s.backendid)::character varying
,pg_stat_get_backend_start(s.backendid)::date
ORDER BY d.datname, u.rolname, pg_stat_get_backend_client_addr(s.backendid)::character varying;