GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
읽기 전용 사용자는 연결할 수 있으며 테이블을 볼 수 있지만 간단한 선택을 시도하면 다음을 얻습니다.
ERROR: permission denied for relation mytable
SQL state: 42501
이것은 PostgreSQL 9.1에서 발생합니다.
내가 뭘 잘못 했어?
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 SELECT 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 ALL
기본적으로 읽기 전용 사용자 에게 권한 을 부여하는 이유는 무엇 입니까?
\ddp
. 읽기 전용 액세스 =r/
와 같이 표시되어야 granting_user=r/readonly_user
합니다.
추가하려고
GRANT USAGE ON SCHEMA public to readonly;
스키마에서 개체를 사용하려면 스키마에 대한 필수 권한이 있어야한다는 사실을 몰랐을 것입니다.
psql
으로 postgres
, 사용자가 나는 적절한 응답을받을 수 있나요 GRANT
. 그래도 테이블의 ACL을 살펴보면 두 개의 다른 계정 만 표시됩니다. 하나는 데이터베이스 소유자 jirauser
이고 다른 하나는 라는 읽기 전용 계정 qauser
입니다. 그러나 나는 readonly
거기에 나타나지 않습니다. Postgres는 버전 9.1이고 서버를 다시 시작했지만 여전히 아무 일도 일어나지 않습니다.
이것은 나를 위해 일했습니다.
다음을 사용하여 로그인 한 현재 역할을 확인하십시오. 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
ERROR: permission denied for relation mytable
다음 쿼리를 실행해야합니다.
GRANT ALL ON TABLE mytable TO myuser;
또는 오류가 뷰에있는 경우 테이블에 권한이 없을 수 있으므로 다음 쿼리를 실행해야합니다.
GRANT ALL ON TABLE tbm_grupo TO myuser;
ALTER DROP DELETE
Ect를 제공하는 경우 사용자 이름을 'ReadOnly'로 지정하는 목적을 무효화합니다. 그 사용자에게 ...