2017-10-27 6 views
1

類似の質問がたくさんありますが、私はpostgresのALTER、DROP、役割と権限について簡単なことはまだ理解できません。同じグループのユーザーが所有するALTER postgresテーブル

私は同じグループに属する複数のユーザーを持つDBを持っていたいと思います。ユーザーの1人がテーブルを作成すると、他のユーザーがテーブルを作成したかのように使用できるはずです。私はそれをある程度は機能させることができますが、ALTERとDROPは謎のままです。

例えば、ゼロから始める私は2人のユーザーとデータベースを作成する:

CREATE DATABASE test_db; 
\c test_db 

CREATE ROLE alice LOGIN INHERIT; 
CREATE ROLE bjork LOGIN INHERIT; 

そしてIはグループを作成してユーザーをグループに割り当てる:

CREATE ROLE scientists; 
GRANT scientists TO alice; 
GRANT scientists TO bjork; 
ALTER DEFAULT PRIVILEGES FOR ROLE alice GRANT ALL ON TABLES to scientists; 
ALTER DEFAULT PRIVILEGES FOR ROLE bjork GRANT ALL ON TABLES to scientists; 
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES to scientists; 

aliceテーブルを作成します。

bjorkは、書き込みも書き込みもできません。ALTER、またDROP

\c - bjork 
ALTER TABLE test_table ADD COLUMN column_b TEXT; 
ERROR: must be owner of relation test_table 

SET

set role scientists; 
ALTER TABLE test_table ADD COLUMN column_b TEXT; 
ERROR: must be owner of relation test_table 

私は何をしないのです(INHERITので、それはいけない)scientistsからROLEはどちらか助けていないINGの? test_tablealiceで、ALTERbjorkであることも可能ですか?

+1

私は、あなたが(また)スキーマのpublic権限でデフォルトの権限を変更する必要があると思います;そうでなければ、新しく作成されたテーブルはデフォルトの権限を得ません。 –

+0

なぜ、科学者たちは認可を得て、すべてのテーブルをそこに置く - すべての科学者はテーブルを変更する許可を得る。または、公開スキーマのデフォルトの権限を変更します。 – JustMe

+0

@a_horse_with_no_name私は試しましたが(私は文を挿入した編集された質問を参照してください)、それはまだ動作していないようです。 – psarka

答えて

1

SET ROLEの前に、の前にロールをテーブルの所有者にする必要があります。

表の所有者のみがALTERの表を使用できます。

+0

'test_table'を' alice'に、 'ALTER'を' bjork'で使う方法がないと言っていますか?テーブルを作成する前に 'SET ROLE'を実行するのは面倒です。私は、科学者がそのようなことに気を付ける必要がないことを望んでいました。 – psarka

+0

はい、そうです。人々は実際にデータベースをインタラクティブに使用していますか?そうでない場合、アプリケーションはログイン後に 'SET ROLE'を実行できます。 –

+0

私は参照してください。私は 'SET ROLE'に対処する方法を見つけるでしょう。手伝ってくれてありがとう! – psarka

関連する問題