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

機能を実行するためだけにログイン(ユーザー)でPostgreSQL9ロールを作成する

    構成するデータベースに接続してこれを実行します。

    -- Create the user.
    CREATE ROLE somebody WITH LOGIN PASSWORD '...';
    
    -- Prevent all authenticated users from being able to use the database,
    -- unless they have been explicitly granted permission.
    REVOKE ALL PRIVILEGES ON DATABASE foo FROM PUBLIC;
    REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM PUBLIC;
    REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM PUBLIC;
    REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM PUBLIC;
    
    -- Allow the user to only use the specified functions.
    GRANT CONNECT ON DATABASE foo TO somebody;
    GRANT EXECUTE ON FUNCTION return_customers(), return_time() TO somebody;
    

    「public」よりも多くのスキーマがある場合は、それらを2つのREVOKE ALL PRIVILEGES ON ALL ...に追加する必要があります。 ステートメント。

    関数はSECURITY DEFINER または、関数のコンテンツは、関数を作成したユーザーではなく、このユーザーの権限で実行されるため、このユーザーは引き続きそれらを実行できません。

    参照:




    1. PDOプリペアドステートメントのキャッシュ

    2. 2つの日付の間のランダムな日時ですべての行を更新します

    3. Slick 3.0(scala)クエリは、複数回実行されるまでデータを返しません(私は思います)

    4. hibernateでネイティブSQLを実行する