最近、シリアル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;
誰かが私を理解するのに役立ちますか
あなたはおそらく必要です:
_GRANT USAGE ON SEQUENCE my_table_id_seq TO writer;
_
使用法
...
シーケンスの場合、この権限はcurrval
およびnextval
関数の使用を許可します。
nextval()
は、USAGE
列を持つテーブルのシーケンスに対するserial
特権が必要な理由です。
SOに関するこの関連回答の詳細
シーケンスは特別な種類のテーブルであるため(そして歴史的な理由から)、_GRANT ... ON TABLE
_もシーケンスで機能します。しかし、あなたはそうしますしない通常、それはまったく必要ありません。