IT박스

오류 : 읽기 전용 사용자로 SELECT를 시도하는 동안 Postgres의 관계 테이블 이름에 대한 권한이 거부되었습니다.

itboxs 2020. 9. 25. 07:39
반응형

오류 : 읽기 전용 사용자로 SELECT를 시도하는 동안 Postgres의 관계 테이블 이름에 대한 권한이 거부되었습니다.


GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

읽기 전용 사용자는 연결할 수 있으며 테이블을 볼 수 있지만 간단한 선택을 시도하면 다음을 얻습니다.

ERROR: permission denied for relation mytable
SQL state: 42501

이것은 PostgreSQL 9.1에서 발생합니다.

내가 뭘 잘못 했어?


다음은 최근 업데이트 된 PostgreSQL 9+를위한 완전한 솔루션입니다.

CREATE USER readonly  WITH ENCRYPTED PASSWORD 'readonly';
GRANT USAGE ON SCHEMA public to readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;

-- repeat code below for each database:

GRANT CONNECT ON DATABASE foo to readonly;
\c foo
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO readonly; --- this grants privileges on new tables generated in new database "foo"
GRANT USAGE ON SCHEMA public to readonly; 
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

몇 가지 중요한 측면에 대해 https://jamie.curle.io/creating-a-read-only-user-in-postgres/ 에게 감사드립니다.

누구든지 더 짧은 코드를 찾으면 기존의 모든 데이터베이스에 대해이 작업을 수행 할 수있는 코드가 더 좋습니다.


추가하려고

GRANT USAGE ON SCHEMA public to readonly;

스키마에서 개체를 사용하려면 스키마에 대한 필수 권한이 ​​있어야한다는 사실을 몰랐을 것입니다.


이것은 나를 위해 일했습니다.

다음을 사용하여 로그인 한 현재 역할을 확인하십시오. SELECT CURRENT_USER, SESSION_USER;

참고 : 스키마 소유자와 일치해야합니다.

스키마 | 이름 | 유형 | 소유자
-------- + -------- + ------- + ----------

소유자가 다른 경우 다음과 같이 관리자 역할에서 현재 사용자 역할에 모든 권한을 부여합니다.

'CURRENT ROLENAME'에 'ROLE_OWNER'부여;

그런 다음 쿼리를 실행하면 이제 모든 관계에 액세스 할 수 있으므로 출력이 제공됩니다.


사용자에게 역할에 대한 속성이 있는지 확인하십시오. 예를 들면 :

postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 flux      |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}

다음 명령을 수행 한 후 :

postgres=# ALTER ROLE flux WITH Superuser;
ALTER ROLE
postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 flux      | Superuser                                      | {}
postgres  | Superuser, Create role, Create DB, Replication | {}

문제가 해결되었습니다.

여기에서 역할 및 항목에 대한 자습서를 참조하십시오 : https://www.digitalocean.com/community/tutorials/how-to-use-roles-and-manage-grant-permissions-in-postgresql-on-a-vps--2


다음 쿼리를 실행해야합니다.

GRANT ALL ON TABLE mytable TO myuser;

Or if your error is in a view then maybe the table does not have permission, so you should execute the next query:

GRANT ALL ON TABLE tbm_grupo TO myuser;

참고URL : https://stackoverflow.com/questions/13497352/error-permission-denied-for-relation-tablename-on-postgres-while-trying-a-selec

반응형