構成するデータベースに接続してこれを実行します。
-- 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
または、関数のコンテンツは、関数を作成したユーザーではなく、このユーザーの権限で実行されるため、このユーザーは引き続きそれらを実行できません。
参照:
-
CREATE FUNCTION
特にSECURITY DEFINER
-
GRANT
ユーザーをロールに追加するためと、テーブルやシーケンスなどにアクセス権を割り当てるための両方 -
REVOKE
-
CREATE ROLE