1. ホーム
  2. sql

[解決済み】ERROR:Postgresを使用したcities_id_seqシーケンスに対するパーミッションが拒否されました。

2022-04-20 05:13:46

質問

私はpostgresの初心者です(データベース情報システム全般の初心者です)。私のデータベースで次のようなSQLスクリプトを実行しました。

create table cities (
id serial primary key,
name text not null
);

create table reports (
id serial primary key,
cityid integer not null references cities(id),
reportdate date not null,
reporttext text not null
);

create user www with password 'www';

grant select on cities to www;
grant insert on cities to www;
grant delete on cities to www;

grant select on reports to www;
grant insert on reports to www;
grant delete on reports to www;

grant select on cities_id_seq to www;
grant insert on cities_id_seq to www;
grant delete on cities_id_seq to www;

grant select on reports_id_seq to www;
grant insert on reports_id_seq to www;
grant delete on reports_id_seq to www;

時、ユーザーwwwのように、しようとすると。

insert into cities (name) values ('London');

以下のようなエラーが発生します。

ERROR: permission denied for sequence cities_id_seq

問題はシリアルタイプにあることはわかりました。そのため、wwwに*_id_seqのselect、insert、delete権限を付与しています。私は何を見逃しているのでしょうか?

解決方法は?

PostgreSQL 8.2以降では、PostgreSQLを使用する必要があります。

GRANT USAGE, SELECT ON SEQUENCE cities_id_seq TO www;

GRANT USAGE - シーケンスに対して、この権限によりcurrvalおよびnextval関数を使用することができます。

また、コメントで @epic_fil さんが指摘されているように、スキーマ内のすべてのシーケンスに対して権限を付与することができます。

GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO www;

備考 : データベースを選択することを忘れないでください ( \c <database_name> ) を実行してから、権限付与コマンドを実行します。