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

PostgreSQL 8.4は、すべてのテーブルに対するDML特権をロールに付与します

    また、この助成金を今後も新しいテーブルの作成のために継続してほしいと思います。[...]ドキュメントを調べましたが、適切な解決策が見つからないようです。

    9.0より前には何もありませんでした。取得できるのは、既存の権限を設定することだけです。 テーブル。 GRANTを1つ実行する必要があります 9.0より前は「バルク」モードがなかったため、テーブルごとに。 8.4および9.0のSQL文法を参照してください:

    GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
        [,...] | ALL [ PRIVILEGES ] }
        ON [ TABLE ] tablename [, ...]
        TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
    

    ここで9.0:

    GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
        [,...] | ALL [ PRIVILEGES ] }
        ON { [ TABLE ] table_name [, ...]
             | ALL TABLES IN SCHEMA schema_name [, ...] }
        TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
    

    新しいALL TABLES IN SCHEMA 一部はあなたが欠けているものです。

    また、質問のようにデータベースレベルでアクセス許可を設定しても、役に立ちません。データベースにアクセス許可を「のみ」設定しますが、テーブルなどの「含まれている」ものには設定しません。関連するセクション:

    GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
        ON DATABASE dbname [, ...]
        TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
    

    つまり、設定できるのはCREATEのみです。 、CONNECT およびTEMP データベース自体に対する権限はありますが、SELECTはありません 、INSERT など

    これまでのところ悪いものについて。 できること 次のことです:

    • ユーザーではなくロールに権限を付与することにより、権限管理の数を減らします。次に、個々のユーザーに役割を追加します。新しいテーブルを作成するときは、1つまたは2つの役割を調整するだけでよく、数百人のユーザーを調整する必要はありません。

    • システムカタログをクエリし、適切なGRANTを作成します コマンド。それらをファイルに保存し、そのファイルを実行します。これにより、起動が簡単になります。

    このようなクエリは次のようになります。

    select 'GRANT ALL ON ' || table_schema || '.' || table_name ||' to my_group;' 
    from information_schema.tables 
    where 
        table_type = 'BASE TABLE' and 
        table_schema not in ('pg_catalog', 'information_schema');
    


    1. SQL Serverで外部キーを作成するにはどうすればよいですか?

    2. Oracletools.jarを再配布できますか?

    3. 垂直出力を使用してSQLiteクエリ結果を表示する

    4. PHP MYSQL UPDATEが存在する場合、またはINSERTが存在しない場合は?