programing

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

firstcheck 2023. 6. 2. 22:29
반응형

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

간단한 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를 실행할 수 있습니다.

다음을 수행해야 합니다.

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

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

반응형