Mam bazę danych Postgresql 9.2. W tej bazie danych utworzono dwóch użytkowników. Kiedy wykonuję następujące zapytanie jako superużytkownik, widzę wszystko.
select * from pg_stat_activity
Czy jednak można osiągnąć ten sam wynik bez połączenia z administratorem?
Jaką uprawnienie / rolę powinienem przyznać / utworzyć, aby uzyskać wyniki, które superużytkownik może zobaczyć?
postgresql
postgresql-9.2
permissions
role
Stephan
źródło
źródło
Odpowiedzi:
W tym momencie nie ma prawa do przyznania, jest na stałe przypisane do administratora. Zostało to ostatnio omówione na liście mailingowej i może ulec zmianie w wersji 9.5, jeśli ktoś znajdzie czas, aby nad tym popracować.
Aby obejść ten problem, możesz utworzyć
SECURITY DEFINER
funkcję, która jest własnością administratora i uruchamia żądane zapytanie. Umożliwi to osobom niebędącym superużytkownikami przeglądanie zawartościpg_stat_activity
poprzez wywołanie funkcji.Na przykład uruchom jako superużytkownik:
Pamiętaj, że bezpłatny dostęp
pg_stat_activity
jest ograniczony z jakiegoś powodu. Można wyszukiwać poufne informacje z zapytań innych osób - wyobraź sobie na przykład, że inny użytkownik używa pgcrypto. Zamiast przyznawać prawapublic
użytkownikowi, należy je przyznać tylko określonemu użytkownikowi lub roli, która ma pełnić rolę użytkownika zastępczego do monitorowania.źródło
Począwszy od PostgreSQL 10, możesz przyznać rolę
pg_read_all_stats
, aby osiągnąć pożądany rezultat.źródło