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

データベース内の特定のスキーマのすべてをPostgreSQLのグループロールに付与します

    既存すべての特権を設定するための省略形を見つけました 指定されたスキーマのテーブル。マニュアルは次のことを明確にしています:

    (ただし、ALL TABLES ビューが含まれていると見なされます および外部テーブル

    大胆な強調鉱山。 serial 列はnextval()で実装されます 列のデフォルトとしてのシーケンスで、マニュアルを引用します:

    シーケンスの場合、この特権によりcurrvalを使用できます およびnextval 機能。

    したがって、serialがある場合 列には、 USAGEも付与する必要があります (またはALL PRIVILEGESシーケンス

    GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;
    

    注:Postgres 10以降のID列は、追加の権限を必要としない暗黙のシーケンスを使用します。 (serialのアップグレードを検討してください 列。)

    新しいはどうですか オブジェクト?

    DEFAULT PRIVILEGESにも興味があります ユーザーまたはスキーマの場合:

    ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
    ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE          ON SEQUENCES TO staff;
    ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;
    

    これにより、将来作成されるオブジェクトの特権が自動的に設定されますが、既存のオブジェクトの特権は設定されません。

    デフォルトの権限はのみです ターゲットユーザーによって作成されたオブジェクトに適用されます(FOR ROLE my_creating_role )。その句を省略すると、デフォルトで現在のユーザーがALTER DEFAULT PRIVILEGESを実行します。 。明確にするために:

    ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
    ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;
    

    pgAdmin IIIのすべてのバージョンには、微妙なバグと表示があることにも注意してください。 現在の役割に適用されない場合でも、SQLペインのデフォルトの特権。必ずFOR ROLEを調整してください SQLスクリプトをコピーするときに手動で句を指定します。



    1. SQLServerの上位100レコードを更新するにはどうすればよいですか

    2. CONCAT()を使用してSQLServerで文字列を連結する方法

    3. 1つのスクリプトで複数のトリガーを作成する方法はありますか?

    4. Oracle 12cでは、外部結合を特徴とするクエリの動作が異なります。