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

特定の役割のすべてのオブジェクト特権を取得する

    箱から出してそのようなビューはありませんが、それを作成するために必要なデータはシステムカタログにあります:

    http://www.postgresql.org/docs/current/static/catalogs.html

    たとえば、relaclがあります pg_classのフィールド :

    select oid::regclass, relacl from pg_class;
    

    他のカタログにも同様のフィールドがあります。つまり、typacl pg_typeで およびproacl pg_procで 。

    おそらく、さらに2つのカタログ、つまりpg_authidを使用することをお勧めします。 どのロールがスーパーユーザー権限を持っているかを知るため、およびpg_auth_members 誰がどのような役割を果たしているかを知るために。

    pg_default_acl オブジェクトの作成時にのみ使用されるため、役に立ちません。)

    ビューの作成に役立つ可能性のある、いくつかのaclitem関連の内部関数があります。それらをpsqlにリストできます そのように:

    \df+ *acl*
    

    特にaclexplode() 。次の例で十分に始められます:

    select oid::regclass,
           (aclexplode(relacl)).grantor,
           (aclexplode(relacl)).grantee,
           (aclexplode(relacl)).privilege_type,
           (aclexplode(relacl)).is_grantable
    from pg_class
    where relacl is not null;
    

    最初にacl行を展開することで最適化できます。例:

    select oid::regclass,
           aclitem.grantee
    from (select oid, aclexplode(relacl) as aclitem from pg_class) sub
    

    目的の結果に直接つながります。

    私の知る限り、これは組み込みのツールを使用する場合とほぼ同じです。 (当然、これをさらに最適化する場合は、Cで独自の演算子のセットを作成できます。)

    あなたの追加の質問に関しては、私は彼らが世界のほんの一握りの人々、別名コア開発者自身によってのみ答えられることができるのではないかと心配しています。彼らはここよりも頻繁にpgハッカーリストにたむろしています。



    1. CALライセンスに基づくSQLServer2012EnterpriseEditionのパフォーマンスの問題

    2. ユーザーが私のコンテンツプロバイダーの特定のテーブルにのみアクセスできるようにする

    3. SQLServerフェールオーバークラスターのインストール-1

    4. Oracleで2番目に大きい最小値を選択します