PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak wyliczyć wszystkie włączone role dla wszystkich użytkowników w PostgreSQL?

Sztuczka polega na wykonaniu rekurencyjnego zapytania o relacje katalogu systemowego pg_roles i pg_auth_members :

WITH RECURSIVE membership_tree(grpid, userid) AS (
    -- Get all roles and list them as their own group as well
    SELECT pg_roles.oid, pg_roles.oid
    FROM pg_roles
  UNION ALL
    -- Now add all group membership
    SELECT m_1.roleid, t_1.userid
    FROM pg_auth_members m_1, membership_tree t_1
    WHERE m_1.member = t_1.grpid
)
SELECT DISTINCT t.userid, r.rolname AS usrname, t.grpid, m.rolname AS grpname
FROM membership_tree t, pg_roles r, pg_roles m
WHERE t.grpid = m.oid AND t.userid = r.oid
ORDER BY r.rolname, m.rolname;

Daje to widok wszystkich użytkowników w systemie ze wszystkimi dziedziczonymi członkostwami w rolach. Zapakuj to w taki sposób, aby to narzędzie było zawsze pod ręką.

Pozdrawiam, Patryk



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres pg_try_advisory_lock blokuje wszystkie rekordy

  2. Zezwalaj na wstawianie tylko z poziomu wyzwalacza

  3. Uruchamianie wielu instancji PostgreSQL na jednym hoście

  4. Railsy wszystkich użytkowników w grupie z płcią męską

  5. Ponowne użycie zakodowanej wartości w wielu wywołaniach funkcji w zapytaniu PostgreSQL