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

postgresql9.1-関数を介してテーブルにアクセスする

    はい、これは実行可能です。

    「スーパーユーザー」は実際のsuperuserである可能性があります 、postgres デフォルトでは、プレーンユーザーのロールの名前をusrに変更します。 、user 予約語です。識別子として使用しないでください。

    CREATE ROLE usr;
    CREATE ROLE poweruser;
    GRANT usr TO poweruser;  -- poweruser can do everything usr can.
    
    CREATE ROLE bob PASSWORD <password>;
    GRANT poweruser TO bob;
    
    CREATE ROLE alice PASSWORD <password>;
    GRANT usr TO alice;
    
    REVOKE ALL ON SCHEMA x FROM public;
    GRANT USAGE ON SCHEMA x TO usr;
    
    REVOKE ALL ON TABLE x FROM public;
    REVOKE ALL ON TABLE y FROM public;
    
    CREATE FUNCTION
      ...
    SECURITY DEFINER;
    
    REVOKE ALL ON FUNCTION ... FROM public;
    GRANT EXECUTE ON FUNCTION a TO usr;
    GRANT EXECUTE ON FUNCTION b TO poweruser;
    

    または、ログインなしでデーモンロールを作成して、関数を所有し、テーブルに対するそれぞれの権限を保持することもできます。それはさらに安全です。

    このルートに行く場合は、大好き ALTER DEFAULT PRIVILEGES (PostgreSQL 9.0で導入されました)。 この関連回答の詳細

    SECURITY DEFINER 安全に機能する マニュアルで。




    1. Oracleクエリを使用してxmlデータを抽出します

    2. MySQLWorkbenchを使用してMySQLを停止/開始する方法

    3. MySQLでrootユーザー名を変更するにはどうすればよいですか?

    4. 私の特定のケースのためにMySQLデータベースを効率的に設計する方法