Blog JSystems - uwalniamy wiedzę!

Szukaj


Z tego artykułu dowiesz się:

  • jak określić identyfikator PID niechcianej sesji,
  • jak natychmiast rozłączyć niechcianą sesję,
  • jak uniemożliwić użytkownikowi ponowne podłączenie się.


Aby rozłączyć sesję użytkownika, będziemy potrzebowali jego PID. Wartość tę znajdziemy dzięki słownikowi "pg_stat_activity". Zobaczymy w nim listę wszystkich sesji (w tym wewnętrznych sesji PostgreSQL) wraz z informacją typu ip użytkownika, czy używanego przez niego programu. Na potrzeby przykładu tworzymy użytkownika "problemowy":


create user problemowy;

Następnie podpinamy się jako ten użytkownik z pomocą "psql" i sprawdzamy aktualny czas:


psql -U problemowy -d postgres
select current_timestamp;


Chcemy teraz tę sesję "ubić". Wyszukujemy dane na temat sesji tego użytkownika w "pg_stat_activity":


select * from pg_stat_activity where usename='problemowy';


Potrzebna nam wartość znajduje się w kolumnie "pid". Wartość z tej kolumny przekazujemy jako argument dla funkcji "pg_terminate_backend", by przerwać sesję:


select pg_terminate_backend(917507);

Po przerwaniu sesji wracamy ponownie do połączenia użytkownika "problemowy" i ponownie usiłujemy sprawdzić czas:



Sesję udało się przerwać, choć jak widzimy, psql podłączył się od razu ponownie. Jeśli chcemy, możemy ubić sesję i natychmiast zablokować możliwość ponownego zalogowania się:


select pg_terminate_backend(917592);
alter user problemowy nologin;

Po takiej operacji automatyczna próba ponownego połączenia się nie przechodzi:


Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...