sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLのすべてのユーザーに対して有効になっているすべてのロールを列挙するにはどうすればよいですか?

    秘訣は、システムカタログリレーションpg_rolesに対して再帰クエリを作成することです。 および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;
    

    これにより、継承されたすべてのロールメンバーシップを持つシステム内のすべてのユーザーが表示されます。このユーティリティを常に便利にするために、これをラップします。

    乾杯、パトリック



    1. PHPを使用してExcelスプレッドシートにMySQLデータを入力する方法

    2. どのように多くの人々は、曜日に登録されています

    3. SQLでDENSE_RANK()を使用して行にランキング位置を追加する方法

    4. SQL Serverは、ストアドプロシージャ内のvarcharをサイレントに切り捨てます