2016-08-15 2 views
1

名前がtest1のnosuperuserを作成しました。私は更新、選択、削除、挿入オプションを与えている。また、私はすべてのスキーマを付与しました。Postgresql a nosuperuserは他のNosuperuserの所有者テーブルにアクセスできない

CREATE ROLE test1 WITH LOGIN PASSWORD '123456'; 
GRANT CONNECT ON DATABASE mydb TO test1; 
GRANT ALL ON SCHEMA public FROM test1; 
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT INSERT, SELECT, UPDATE ON TABLES TO test1 WITH GRANT OPTION; 

後で名前がtest2である別のnosuperuserを作成しました。私は更新、選択、削除、挿入オプションを与えている。私は助成金の使用スキーマを与えました。

CREATE ROLE test2 WITH LOGIN PASSWORD '123456'; 
GRANT CONNECT ON DATABASE mydb TO test2; 
GRANT USAGE ON SCHEMA public FROM test2; 
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT INSERT, SELECT, UPDATE ON TABLES TO test2 WITH GRANT OPTION; 

私はtest1でテーブルを作成しました。 Test2はテーブルにアクセスしません。テーブルの所有者はtest1です。テーブルユーザーtest2にアクセスしたいと思います。どのようにできるのか?

答えて

1

ALTER DEFAULT PRIVILEGESを発行すると、新しい権限は新しく作成されたオブジェクト、この場合はテーブルにのみ適用されます。すでに存在する表に権限を手動で付与する必要があります。だから、

役割test2のデフォルトの権限はtest1、その後、セットまたはスーパーユーザは、次のコマンドを発行していた前役割test1がテーブルを作成した場合:

GRANT INSERT, SELECT, UPDATE ON <table> TO test2; 
+0

は別の方法はありますか?コードをどのように変更すればよいですか?たとえば、test1は新しいテーブルを作成しました。 Test2はそのテーブルにアクセスできません。 2人のユーザーが既存のテーブルにアクセスできます。 –

+0

更新された回答を参照 – Patrick

+0

すでに公開されているテーブルが多すぎます。後で私は役割を作った。すべてのロールがテーブルにアクセスできるようになる前に。テーブルの所有者はポストグルです。後での役割test1がテーブルに作成され、ownerがtest1になります。所有者がtest1の場合、test2はテーブルにアクセスできません。 –

関連する問題