오류: Postgres를 사용하여 시퀀스 city_id_seq에 대한 사용 권한이 거부되었습니다.
데이터베이스에서 다음 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
시리얼 타입에 문제가 있는 것으로 알고 있습니다.그래서 *_id_seq에 대한 선택, 삽입 및 삭제 권한을 www에 부여합니다.하지만 이것이 제 문제를 해결하지는 못합니다.제가 무엇을 빠뜨리고 있나요?
포스트그레 이후사용해야 하는 SQL 8.2:
GRANT USAGE, SELECT ON SEQUENCE cities_id_seq TO www;
GRANT USAGE - 시퀀스의 경우 이 권한을 통해 곡선 및 nextval 함수를 사용할 수 있습니다.
또한 @epic_fil이 설명에서 지적한 바와 같이 스키마의 모든 시퀀스에 다음과 같은 권한을 부여할 수 있습니다.
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO www;
참고: 데이터베이스를 선택하는 것을 잊지 마십시오.\c <database_name>privilege grant 명령을 실행하기 전에
@Phil은 주목받지 못할 수도 있는 많은 업보를 받는 댓글을 가지고 있기 때문에, 나는 그의 구문을 사용하여 스키마의 모든 시퀀스에 대한 권한을 사용자에게 부여하는 답변을 추가하고 있습니다(스키마가 기본 '공개'라고 가정).
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public to www;
@Tom_Gerken, @epic_fil 및 @kupson은 기존 시퀀스를 사용할 수 있는 권한을 부여하는 문장이 매우 정확합니다.그러나 사용자는 이후에 생성된 시퀀스에 대한 액세스 권한을 얻지 못합니다.이를 위해 다음과 같이 GRANT 문을 ALTER DEFAULT PRIGES 문과 결합해야 합니다.
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO www;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT USAGE, SELECT ON SEQUENCES TO www;
이것은 Postgre에서만 작동합니다.SQL 9+는 물론입니다.
이렇게 하면 기존의 기본 권한을 덮어쓰지 않고 추가할 수 있기 때문에 그런 점에서 상당히 안전합니다.
이는 SEQUENCE에 대한 권한 문제 때문입니다.
다음 명령을 사용하여 문제를 해결합니다.
GRANT USAGE, SELECT ON SEQUENCE sequence_name TO user_name;
예:
GRANT USAGE, SELECT ON SEQUENCE cities_id_seq TO www;
postgres에서 다음 명령을 실행합니다.
postgres에 로그인:
sudosu 포즈;
psql dbname;
CREATE SEQUENCE public.cities_id_seq 증분 1
최소값 0
최대 값 1
시작 1 캐시 1; ALTERTABLE public.cities_id_seq OWNER 상위 페이지 소유자;
pgowner가 데이터베이스 사용자가 됩니다.
언급URL : https://stackoverflow.com/questions/9325017/error-permission-denied-for-sequence-cities-id-seq-using-postgres
'programing' 카테고리의 다른 글
| WPF(MVVM):보기 모델에서 보기를 닫으시겠습니까? (0) | 2023.05.29 |
|---|---|
| "chore"를 커밋 메시지 유형으로 사용할 때는 언제입니까? (0) | 2023.05.29 |
| 함수를 사용하여 가장 가까운 분과 가장 가까운 시간으로 반올림된 T-SQL 날짜 시간 (0) | 2023.05.29 |
| Excel에서 워크북 끝에 시트 추가(정상적인 방법이 작동하지 않습니까?) (0) | 2023.05.29 |
| 지정된 스키마에 테이블이 있는지 확인하는 방법 (0) | 2023.05.29 |