質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

1回答

3017閲覧

PostgreSQL11でcreate tableを禁止したい

june_223

総合スコア18

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2020/06/17 05:20

PostgreSQL11で、あるロールからcreat tableの権限をREVOKEしたいです。

下記の2つで、データベース生成禁止、スキーマ生成禁止まではできました。
しかしスキーマ内でテーブルを自由に作成できてしまいます。
テーブル生成を禁止する方法はありますでしょうか?

■これでデーターベース生成の権限を削除
ALTER ROLE ロールの名前 NOCREATEDB;

■データーベース内でスキーマを作らせない
REVOKE CREATE ON SCHEMA public FROM ロールの名前;

逆を言えば、指定したDB内の指定したスキーマ内のテーブルをSELECTだけできればよいです。

どうか教えをお聞かせ下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/06/17 08:02

よく見ると > ■データーベース内でスキーマを作らせない > REVOKE CREATE ON SCHEMA public FROM ロールの名前; とありますが、これはpublic スキーマ内でのcreate権限の削除で、スキーマを作らせないものでは無いと思いますけど?
june_223

2020/06/17 12:09

失礼しました。こちらは間違ったコマンドかもしれません。いくつか叩いてこれでスキーマ生成権限を剥奪できたつもりでしたが、間違いかもしれません。
guest

回答1

0

テーブル生成を禁止する方法はありますでしょうか?

スキーマに対しての権限を与えます。
スキーマの中にテーブルなどのオブジェクトを作成する権限を追加する

追記

設定可能な権限に対して剥奪はできますけど、CREATE対象のオブジェクトとしてテーブルという概念はなさそうなので、剥奪は出来ないのではないかと思います。
GRANT — アクセス権限を定義する

CREATE
対象がデータベースの場合は、データベース内での新規スキーマの作成を許可します。

対象がスキーマの場合は、スキーマ内での新規オブジェクトの作成を許可します。 既存のオブジェクトの名前を変更するには、オブジェクトを所有し、かつ、そのオブジェクトが入っているスキーマに対してこの権限を保持していなければなりません。

対象がテーブル空間の場合は、テーブル空間内でのテーブルとインデックス、一時ファイルの作成と、デフォルトのテーブル空間としてこのテーブル空間を持つデータベースの作成を許可します (この権限の取り消しによって既存のデータベースやスキーマの配置が変わることはないことに注意してください)。

 

逆を言えば、指定したDB内の指定したスキーマ内のテーブルをSELECTだけできればよいです。

スキーマーに対してまとめて行うなら

SQL

1GRANT SELECT ON ALL TABLES IN SCHEMA schema_name To role_name;

若しくはREVOKEで指定しているスキーマーが不足しているのではないでしょうか。

投稿2020/06/17 05:35

編集2020/06/17 08:08
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

june_223

2020/06/17 06:04

具体的なコマンドを記載していただけますでしょうか?
sazi

2020/06/17 06:07 編集

リンク先に具体的なコマンドで説明があります GRANT CREATE ON SCHEMA schema_name To role_name;
june_223

2020/06/17 06:08 編集

すでに権限がある(テーブル生成できてしまう)ので、REVOKEしたいのです。
sazi

2020/06/17 06:39 編集

無いものは剥奪できないので、与えるものを積み上げるしかないでしょうね。 最初の回答はそういった意味です。
june_223

2020/06/17 11:34 編集

ご丁寧に記載していただきありがとうございます。せっかく色々と記載していただいのですが意味がわからないです。「無いものは剥奪できない。」と記載されていますが、実際今はテーブルが生成できます。つまり権限あります。これを剥奪したいです。GRANTから始まるコマンドは権限を付与するものなので、それを叩いても「テーブル生成権利剥奪」になりませんよね?
maisumakun

2020/06/17 11:43

> 実際今はテーブルが生成できます。 つまり、「何も権限を与えないところまで戻してから、必要な分だけ追加する」ということかと思います。
sazi

2020/06/17 12:53 編集

> 実際今はテーブルが生成できます。つまり権限あります。 例えば、スパーユーザはスキーマに対する作成権限を含んでいますので、スキーマに対するcreate権限をrevokeしても、スーパーユーザ権限が残っていれば作成はできます。 与えたものしか削除する事は出来ませんけど、削除しようとしている権限そのものは与えたつもりはないのでしょう? 推測するに、スパーユーザー権限に対して一部権限を禁止しようとされているように見受けられます。 revokeは禁止ではありません、取消です。 該当する権限を持っていなければ実行しても無意味です。 先ずは、そのロールが持っている権限を確認してみて下さい。
sazi

2020/06/17 12:56

@misumakunさん フォローありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問