관계에 대한 권한이 거부되었습니다.


329

간단한 SQL 명령을 실행하려고했습니다.

select * from site_adzone;

이 오류가 발생했습니다

ERROR:  permission denied for relation site_adzone

여기서 무엇이 문제가 될 수 있습니까?

다른 테이블을 선택하려고 시도했지만 동일한 문제가 발생했습니다. 나는 또한 이것을 시도했다.

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

하지만 콘솔 에서이 응답을 얻었습니다.

WARNING:  no privileges were granted for "jerry"

무엇이 잘못 될 수 있는지 아십니까?


DB에서 읽고 쓸 수 있도록 권한을 업데이트하는 방법을 잘 모르겠습니다
Boban


2
SO에 오신 것을 환영합니다! 이 질문에 대해서는 dba.stackexchange.com에서 더 많은 도움을받을 수 있지만, 다음과 같은 많은 덧글을 찾을 수 있습니다.)
Jared Beck

10
실례합니다. 이것은 내가 보았던 두 번째 프로그래밍 관련 postgresql 질문입니다. 마지막 뷰는 67,000 뷰,이 뷰는 30,000 뷰입니다. 인기 항목이 있어야합니다. 주제가 15,000 회 이상인 주제 = 비 주관적인 질문.
Theodore R. Smith

1
이 질문은 주제가 아닙니다! 그러나 이것은 stackoverflow.com/questions/13497352/…
wheaties

답변:


391

데이터베이스에 GRANT가 필요한 것은 아닙니다. 테이블에 직접 부여하십시오.

데이터베이스에 대한 권한 부여는 주로 연결 권한을 부여하거나 취소하는 데 사용됩니다. 이를 통해 충분한 다른 권한이있는 경우 데이터베이스에서 작업을 수행 할 수있는 사람을 지정할 수 있습니다.

당신은 대신에 원합니다 :

 GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;

이 문제를 해결합니다.


7
postgres와 같은 수퍼 유저로 실행하십시오.
크리스 트래버스 12

19
어떻게 든 지름길이 될 수 있습니까? 모든 테이블에 모든 권한을 부여 하시겠습니까?
Shadur

196
@Shadur는 jerry에게 공개 된 SCHEMA의 모든 테이블에 대한 모든 권한을 부여합니다.
Ron E

10
@RonE는 현재 데이터베이스로 제한됩니까?
Shadur

7
필요한 스키마의 경우 @zmiftah> 스키마에 대한 모든 권한 부여 nameSchema to user;
Pierozi

241

Ron E에 게시하면 다른 사람에게 유용 할 수 있으므로 모든 테이블에 대한 권한 부여 권한이 있습니다.

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;

21
ALL SEQUENCES및에 대해 비슷한 명령을 실행해야 할 수도 있습니다 ALL FUNCTIONS.
Pistos 2016 년

7
궁금한 사람들을 위해 : ALL TABLES보기도 포함되어 있으므로 별도의 ALL VIEWS명령 이 없습니다 :-)
André Gasser

74

먼저 올바른 데이터베이스에 연결 한 후 다음을 실행하십시오.

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;

4
올바른 데이터베이스에 연결해 주셔서 감사합니다.
상승

15
오른쪽 데이터베이스에 연결 거대한 차이를 만든다 :)\connect databasename;
Denis Matafonov

3
이. 나는 "postgres"와 연결되어있었습니다. 감사합니다!
앤드류 G.

2
네, DB에 연결하면 차이가
생겼습니다

44
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to jerry;

이 답변은 내 하루를 구했다!
anhtran

19

첫 번째로 중요한 단계는 DB에 연결하는 것입니다.

psql -d yourDBName

2 단계, 권한 부여

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;

18

스키마의 모든 기존 테이블에 권한을 부여하려면 다음을 사용하십시오.

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>

향후 테이블에 적용될 기본 권한을 지정하려면 다음을 사용하십시오.

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> 
  GRANT <privileges> ON TABLES TO <role>;

예 :

ALTER DEFAULT PRIVILEGES IN SCHEMA public 
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;

당신이 사용하는 경우 SERIAL또는 BIGSERIAL열이 그때는 아마에 대한 동일한 작업을 수행하는 것이 좋습니다 SEQUENCES다른, 또는은 INSERT(실패 포스트 그레스 (10 개)의이IDENTITY 그 문제에서 고통을하지 않으며, 이상 권장 SERIAL, 즉 유형)

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;

자세한 내용과 재사용 가능한 스크립트에 대해서는 Web AppPostgreSQL 권한에 대한 나의 답변을 참조하십시오 .

참조 :

부여

기본 원칙 변경


9

이것은 사용자 postgres로 테이블을 만든 다음 일반 사용자로 액세스하려고 할 때 자주 발생합니다. 이 경우 postgres 사용자로 로그인하고 다음 명령을 사용하여 테이블 소유권을 변경하는 것이 가장 좋습니다.

alter table <TABLE> owner to <USER>;

5

테이블의 소유자로 psql에 로그인하십시오. 누가 테이블을 사용하는지 알아 내기 위해\dt

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

그런 다음 GRANTS를 실행할 수 있습니다


0

선택 권한을 찾고 있으므로 모든 권한이 아닌 선택 권한 만 부여하는 것이 좋습니다. 다음과 같이하면됩니다 :

GRANT SELECT ON <table> TO <role>;

0

당신은해야합니다 :

  1. postgres 사용자로 DBeaver를 통해 데이터베이스에 연결
  2. 왼쪽 탭에서 데이터베이스를 엽니 다
  3. 역할 탭 / 드롭 다운 열기
  4. 사용자를 선택하십시오
  5. 오른쪽 탭에서 '권한 탭'을 누르십시오
  6. 스키마 탭을 누르십시오
  7. 프레스 테이블 탭 / 드롭 다운
  8. 모든 테이블을 선택
  9. 필요한 모든 권한 확인란을 선택하거나 모두 부여를 누릅니다.
  10. 저장을 누릅니다

-3

나는이 문제에 한 번 직면했다. 데이터베이스 사용자를 수퍼 유저로 변경하면 문제가 해결됩니다.

SUPERUSER로 사용자 변경 myuser;


이렇게하면 필요한 것보다 더 많은 우선권을 부여하게됩니다. 수퍼 유저는 다른 사용자, 데이터베이스 등 생성을 원하지 않는 다른 작업에 대한 권한을 부여합니다.
Santi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.