2017-09-08 10 views
0

私はテーブルを持たないPostgresデータベースを持っています。データベースはユーザーによって所有されています。データベースに対して特定の権限をユーザーに付与するにはどうすればよいですか?

私は、コマンドラインで\dtその後、psqlを入力し、ここで私が得るものです:

Name | Owner | Encoding | Collate | Ctype | Access privileges 
-----------+-------------+----------+-------------+-------------+----------------------- 
somedb | someuser | UTF8  | en_US.UTF-8 | en_US.UTF-8 | 

私は、someuserに選択するための力を与えて挿入、更新、削除、切り捨て、およびsomedbにテーブルを作成します。私は、コマンドラインでGRANT CREATE SELECT INSERT UPDATE DELETE TRUNCATE PRIVILEGES ON DATABASE somedb TO someuser;を実行すると、私はこのエラーを取得する:

LINE 1: GRANT CREATE SELECT INSERT UPDATE DELETE TRUNCATE PRIVILEGES... 

私はsomeuserにこれらの権限を付与するために何を変更する必要がありますか?

答えて

1

の表は、「データベース」で作成されていない - スキーマのみに。

ユーザーが、特定のスキーマにテーブルを作成することを望むなら、あなたはそのスキーマでの使用を許可する必要があります。

grant usage, create on schema public to someuser; 

あなたは、そのユーザーのまだ作成していないテーブルに対して権限を付与する必要はありません。 。表を作成するユーザーは、その表の所有者です。テーブルの所有者は、それを使って何でもすることができます。所有者に追加の特権を与える必要はありません。

ユーザーが新しいスキーマを作成できるようにしたい場合は、データベース上のcreate権限付与する必要があります:あなたは、ユーザーがAに任意の既存テーブルを選択できるようにしたい場合は

grant create on database somedb to someuser; 

をスキーマは、明示的にそれを付与する必要があります。

grant select,insert,update,delete on all tables in schema public to someuser; 

ユーザーもことによって作成されていない新しいテーブルのためにそれを行うことができるようにすることをしたい場合ユーザーは、デフォルトの権限を変更する必要があります。

alter default privileges 
    in schema public 
    grant select,insert,update,delete on tables 
    to someuser; 
1

あなたがそれぞれの権限の間にコンマを追加する必要があります。

GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } 
    ON DATABASE nombase [, ...] 
    TO { nomutilisateur | GROUP nomgroupe | PUBLIC } [, ...] [ WITH 
GRANT OPTION ] 

しかしa_horse_with_no_nameとして、これらの権限は、データベースレベルで設定することができない、と述べました。

Documentation

+0

'挿入、更新、削除、データベースレベル –

+0

に付与できる権限がtruncate'ではありませんあなたは正しい、私の悪いです – Caligone

関連する問題