6

私はこれを何年も探していましたが、ウェブ上ですべてを試しましたが、成功しませんでした。

MSSQLでそれを行うことはできますが、PostgreSQLでそれを行う方法が見つかりませんでした。

私が達成したいのは、データベース、関数、テーブルなどを作成、削除、または変更できないログインを使用してロールを作成することです。特定の機能を選択するだけです。

たとえば、costumerというテーブルと2つの関数がreturn_customers()ありreturn_time()、ログインを使用してとを選択できるロールが必要な場合return_customers()ですselect return_time()。それ以上のものはありません。

この便利なウェブサイトをサポートしていただきありがとうございます!

4

1 に答える 1

11

設定したいデータベースに接続して実行します。

-- 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
于 2012-10-03T16:06:10.893 に答える