[解決済み】PostgreSQL。PostgreSQLデータベースでユーザーにすべての権限を与える
質問
あるユーザーを管理者にすることなく、データベースの全権限を与えたいと思います。 なぜそうしたいかというと、現在、DEVとPRODは同じクラスタ上の異なるDBなので、あるユーザーがプロダクションのオブジェクトを変更できるようにしたくないのですが、DEV上のオブジェクトは変更できる必要があります。
試してみました。
grant ALL on database MY_DB to group MY_GROUP;
と表示されますが、何の許可も出ていないようです。
そして、試してみました。
grant all privileges on schema MY_SCHEMA to group MY_GROUP;
オブジェクトを作成する権限はあるが、そのスキーマにある他のユーザーのオブジェクトを照会・削除する権限はないようだ。
MY_SCHEMAのユーザーにUSAGE権限を与えることで続行できますが、テーブルに対する権限がないと文句を言われます ...
そこで質問なのですが、DB上のユーザーにすべての権限を与える簡単な方法はないでしょうか?
PostgreSQL 8.1.23で作業しています。
どのように解決するのですか?
すべてのコマンドは、正しいデータベースクラスタに接続されているときに実行する必要があります。それを確認してください。
ロールはデータベースのオブジェクト クラスタ . 同じクラスタのすべてのデータベースは、定義されたロールのセットを共有します。特権は、データベース、スキーマ、テーブルなどの単位で付与・剥奪されます。
ロールは
データベース
当然ですが。これは
PUBLIC
をデフォルトで使用します。それ以外の
GRANT CONNECT ON DATABASE my_db TO my_user;
Postgres 14 以降の基本的な権限について
Postgres 14では、定義済みの非ログインロールが追加されました。
pg_read_all_data
/
pg_write_all_data
.
それらは
SELECT
/
INSERT
,
UPDATE
,
DELETE
の特権です。
すべて
テーブル、ビュー、およびシーケンスがあります。さらに
USAGE
をスキーマに追加します。私たちは
GRANT
のメンバーシップを取得することができます。
GRANT pg_read_all_data TO my_user;
GRANT pg_write_all_data TO my_user;
これは、すべての基本的なDMLコマンドをカバーしています(ただし、DDLは対象外、また、以下のような特殊なコマンドは対象外です)。
TRUNCATE
または
EXECUTE
関数の特権です!)。
マニュアルです。
pg_read_all_data
すべてのデータ(テーブル、ビュー、シーケンス)を、あたかも
SELECT
権利 を、それらのオブジェクトのUSAGE
の権利は、すべてのスキーマで、たとえ 明示的に持っている。このロールにはrole属性はありませんBYPASSRLS
を設定します。RLSを使用している場合、管理者は セットBYPASSRLS
であるロールに対して、このロールがGRANT
を追加しました。
pg_write_all_data
すべてのデータ(テーブル、ビュー、シーケンス)を、あたかも
INSERT
,UPDATE
およびDELETE
の権利と、それらのオブジェクトのUSAGE
権利 を明示的に持たなくても、すべてのスキーマに適用されます。このロールは はロール属性BYPASSRLS
を設定します。RLSを使用する場合は 管理者はBYPASSRLS
であるロールに対して、このロールがGRANT
を追加しました。
定義済みのロールを使用しない全権限(Postgresの全バージョン)
コマンドは正しいデータベースに接続された状態で実行する必要があります。それを確認してください。
ロールに必要なのは(最低でも
USAGE
の権限は
スキーマ
. 繰り返しになりますが、もしそれが
PUBLIC
であれば、カバーされます。それ以外は
GRANT USAGE ON SCHEMA public TO my_user;
または付与
USAGE
で
すべて
カスタムスキーマを使用します。
DO
$$
BEGIN
-- RAISE NOTICE '%', ( -- use instead of EXECUTE to see generated commands
EXECUTE (
SELECT string_agg(format('GRANT USAGE ON SCHEMA %I TO my_user', nspname), '; ')
FROM pg_namespace
WHERE nspname <> 'information_schema' -- exclude information schema and ...
AND nspname NOT LIKE 'pg\_%' -- ... system schemas
);
END
$$;
次に、すべての
テーブル
(Postgresが必要
9.0
またはそれ以降)。
そして、忘れてはいけないのが
シーケンス
(もしあれば)。
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO my_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO my_user;
あるいは pgAdmin 4 のグラントウィザード"。 をGUIで操作することができます。
の権限を対象としています。
既存
オブジェクトを作成します。将来のオブジェクトもカバーするには
DEFAULT PRIVILEGES
. ご覧ください。
他にもいくつかオブジェクトがあります。
のマニュアルです。
GRANT
には完全なリストがあります。Postgres 14の時点では。
データベースオブジェクト(テーブル、カラム、ビュー、外部テーブル、シーケンス、データベース、外部データラッパー、外部サーバー、関数、プロシージャ、手続き言語、スキーマ、またはテーブルスペース)に対する特権。
しかし、それ以外はほとんど必要ありません。詳細はこちら。
考察 最新バージョンへのアップグレード .
関連
-
[解決済み] varchar 値 'simple, ' をデータ型 int に変換する際に変換に失敗しました。
-
[解決済み] ORA-00920: 無効な関係演算子
-
[解決済み] Presto の JSON_EXTRACT で ' ' 文字を含むキーに問題がある。
-
[解決済み] PostgreSQLの場合。PostgreSQLのテーブルを表示する
-
[解決済み] PostgreSQLの "DESCRIBE TABLE"
-
[解決済み] PostgreSQL コマンドラインユーティリティ: psql を終了する方法
-
[解決済み] PostgreSQLのユーザーパスワードを変更する方法を教えてください。
-
[解決済み] どのバージョンのPostgreSQLを使用していますか?
-
[解決済み] PostgreSQLからのPL/pgSQL出力をCSVファイルに保存する
-
[解決済み] PostgreSQLでデータベースのコピーを作成する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】CREATE VIEW は、バッチ内の唯一のステートメントでなければなりません。
-
[解決済み】データベースへの「ネイティブ」SQL接続を使用するとはどういう意味ですか?
-
[解決済み] バックエンドバージョンでは、データベースのダイアグラムやテーブルのデザインはサポートされていません。
-
[解決済み】一括読み込みデータ変換エラー(切り捨て)
-
[解決済み] INSERT ステートメントが FOREIGN KEY 制約と競合する - SQL Server
-
[解決済み] データ型 varchar の変換エラー
-
[解決済み] WHERE x IN (5) vs WHERE x = 5 ...なぜINを使うのか?
-
[解決済み] ora-06553 pls-306 'ogc_x' の呼び出しで引数の数または種類が誤っている。
-
[解決済み] VBA - ADODB.CommandTextの実行
-
[解決済み] SQLで複数のGROUP BYを使用する場合とは?