관계에 대한 사용 권한이 거부되었습니다.
간단한 SQL 명령을 실행하려고 했습니다.
select * from site_adzone;
그리고 나는 이 오류를 얻었습니다.
오류: 관계 site_adzone에 대한 사용 권한이 거부되었습니다.
여기서 무슨 문제가 있을 수 있습니까?
다른 테이블도 select를 시도해봤는데 같은 문제가 생겼습니다.저는 또한 이것을 하려고 했습니다.
GRANT ALL PRIVILEGES ON DATABASE jerry to tom;
하지만 콘솔에서 이 응답을 받았습니다.
경고: "jerry"에 대한 권한이 부여되지 않았습니다.
뭐가 잘못됐는지 아는 사람?
데이터베이스에 대한 GRANT는 필요하지 않습니다.테이블에 직접 부여합니다.
데이터베이스에 대한 권한 부여는 대부분 연결 권한을 부여하거나 취소하는 데 사용됩니다.이렇게 하면 다른 권한이 충분한 경우 데이터베이스에서 작업을 수행할 수 있는 사용자를 지정할 수 있습니다.
당신이 원하는 것은
GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;
이렇게 하면 이 문제를 해결할 수 있습니다.
다른 사람들에게 유용할 수 있는 모든 테이블에 대한 허가 권한에 대한 Ron E 응답을 게시합니다.
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
먼저 올바른 데이터베이스에 연결한 후 다음을 실행합니다.
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
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;
첫 번째이자 중요한 단계는 DB에 연결하는 것입니다.
psql -d yourDBName
2단계, 권한 부여
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;
스키마의 모든 기존 테이블에 권한을 부여하려면 다음을 사용합니다.
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's는 그 문제로 고통받지 않으며, 더 이상 권장되지 않습니다.SERIAL
유형), 즉,
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;
Postgre에 대한 내 대답도 참조하십시오.자세한 내용과 재사용 가능한 스크립트를 확인할 수 있습니다.
참조:
이 문제는 테이블을 사용자 게시자로 만든 다음 일반 사용자로 액세스하려고 할 때 자주 발생합니다.이 경우 postgres 사용자로 로그인하고 다음 명령을 사용하여 테이블의 소유권을 변경하는 것이 가장 좋습니다.
alter table <TABLE> owner to <USER>;
테이블의 소유자로 psql에 로그인해야 합니다.누가 테이블을 소유하고 있는지 알아보기 위해 사용합니다.\dt
psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES
그런 다음 GRANTS를 실행할 수 있습니다.
다음을 수행해야 합니다.
- postgres 사용자를 사용하여 DBeaver를 사용하여 데이터베이스에 연결
- 왼쪽 탭에서 데이터베이스를 엽니다.
- 역할 탭/드롭다운 열기
- 사용자 선택
- 오른쪽 탭에서 '권한 탭'을 누릅니다.
- 스키마 탭을 누릅니다.
- 프레스 테이블 탭/테이블
- 모든 테이블 선택
- 필요한 모든 사용 권한 확인란을 선택하거나 모두 허용을 누릅니다.
- 저장을 누릅니다.
Postgre용SQL. bash 터미널에서 다음을 실행합니다.
psql db_name -c "GRANT ALL ON ALL TABLES IN SCHEMA public to db_user;"
psql db_name -c "GRANT ALL ON ALL SEQUENCES IN SCHEMA public to db_user;"
psql db_name -c "GRANT ALL ON ALL FUNCTIONS IN SCHEMA public to db_user;"
선택 권한을 찾고 있으므로 모든 권한보다는 선택 권한만 부여하는 것이 좋습니다.이 작업은 다음을 통해 수행할 수 있습니다.
GRANT SELECT ON <table> TO <role>;
사용자를 동일한 권한이 필요한 다른 사용자로 전환한 후 이 문제가 발생했습니다. "관계의 소유자여야 함 xx"라는 오류가 계속 발생했습니다.
수정은 이전 사용자에서 새 사용자에게 모든 권한을 단순히 부여하는 것이었습니다.
postgres-# Grant <old user> to <new user>;
언급URL : https://stackoverflow.com/questions/15520361/permission-denied-for-relation
'programing' 카테고리의 다른 글
릴리스 또는 디버그 모드인지 탐지하려면 어떻게 해야 합니까? (0) | 2023.06.02 |
---|---|
파이몬고 커서에 쿼리 결과가 있는지 확인하는 방법 (0) | 2023.06.02 |
좋은 .NET 프로파일러는 무엇입니까? (0) | 2023.06.02 |
Android에서 토스트를 표시하는 방법은 무엇입니까? (0) | 2023.06.02 |
엑셀에 병합과 같은 기능이 있나요? (0) | 2023.06.02 |