シリアル列のシーケンスを更新する権限を明示的に付与する必要がありますか?


9

最近、シリアルID列を含むテーブルをスーパーユーザーとして作成しました。

create table my_table
(
    id serial primary key,
    data integer
);

スーパーユーザー以外のユーザーにそのテーブルへの書き込みアクセスを許可したいので、アクセス許可を付与しました。

grant select, update, insert, delete on table my_table to writer;

ユーザーがmy_table_id_seqシリアル列に関連付けられたシーケンスを変更する権限を持っていなかったため、そうした後のランダムな時点で、そのユーザーによる挿入は失敗し始めました。残念ながら、現在のデータベースではそれを再現できません。

私はこのようにユーザーに必要な許可を与えることでこれを回避しました:

grant all on table my_table_id_seq to writer;

誰かが私を理解するのに役立ちますか

  • なぜ、ある時点で、以前は十分であった権限が失敗し始めるのでしょうか?
  • シリアル列を持つテーブルに書き込み権限を付与する適切な方法は何ですか?

回答:


10

あなたはおそらく必要です:

GRANT USAGE ON SEQUENCE my_table_id_seq TO writer;

ドキュメントごと:

USAGEは
...
配列の場合、この権限は使用可能にcurrvalし、nextval機能を。

nextval()USAGE列を持つテーブルのシーケンスに対する特権が必要な理由ですserial
SOに関するこの関連回答の詳細。

シーケンスは特別な種類のテーブルであるため(そして歴史的な理由から)GRANT ... ON TABLE、シーケンスに対しても機能します。しかし、通常はまったく必要ありませ


これにはUPDATE ON SEQUENCEは必要ありませんか?
好奇心旺盛な

@anshupitlia:いいえ。上記で説明したように。
Erwin Brandstetter 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.