web-dev-qa-db-ja.com

データベースのすべてのテーブルへのアクセスを許可する

最近、サーバーの1人のユーザーと定期的なアクセス権を共有したいと思っていましたが、単純なCREATE USERおよびGRANT ALL ON DATABASEコマンドでは、データに対して単純なSELECTを実行できませんでした。

特定のデータベースのすべてのテーブルへの権限を特定のユーザーに付与したいのですが、スキーマ全体へのアクセスを許可するのが最善の方法かどうかはわかりませんpublicある種の特権の昇格を許可します。他に方法はありますか?

13
d33tah

DATABASEに対する特権は、データベースへの一般的な接続権限のみを付与し、それ以上は付与しません。その特権だけを持つユーザーは、一般の人が見ることを許可されているものだけを見ることができます。

すべてのテーブルへの読み取りアクセスを許可するには、すべてのスキーマとテーブルに対する権限も必要です。

GRANT USAGE ON SCHEMA public TO myuser; -- more schemas?
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

futureスキーマとテーブルにデフォルトの権限を設定することもできます。データベースにオブジェクトを作成するすべてのロールに対して実行します

ALTER DEFAULT PRIVILEGES FOR ROLE mycreating_user IN SCHEMA public
GRANT SELECT ON TABLES TO myuser;

ただし、実際には コンセプト全体を理解する を最初に行う必要があります。
そして、ほとんどの場合、グループロールに特権をバンドルしてから、グループロールをユーザーロールに/ユーザーロールから付与/取り消しする方が適切です。関連:

20