2017-05-22 1 views
2

동일한 스키마에서 postgreSql의 수퍼 유저로부터 두 개의 역할을 만들었습니다.PostgreSQL : 다른 사용자가 소유 한 테이블에 액세스

1)
2) 그런 다음 각 역할에서 두 명의 사용자를 만들었습니다

을 READ_WRITE read_only_with_create_view. (read_only_with_create_view_user 및 read_write)

이제보기 소유자가 다르기 때문에 read_only_with_create_view_user에 의해 작성된 새로운보기에는 read_write_user가 액세스 할 수 없습니다 (read_only_with_create_view_user).

그래서 모든 새로운보기에 read_write_user로 액세스하는 방법은 무엇입니까?

기본적으로 내가 달성하고자하는 것은 한 사용자가 만든 모든 것이 다른 사용자가 액세스 할 수 있어야한다는 것입니다.

단계 나는 다음 :

CREATE ROLE read_only_role WITH 
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity'; 

GRANT CONNECT ON DATABASE mydb to read_only_role; 
GRANT USAGE,CREATE ON SCHEMA myschema TO read_only_role; 
GRANT SELECT ON ALL TABLES IN SCHEMA myschema TO read_only_role; 
GRANT SELECT ON ALL SEQUENCES IN SCHEMA myschema TO read_only_role; 

CREATE USER read_only_with_create_view_user 
WITH PASSWORD '*****' 
in ROLE read_only_role; 

-- Now created new views using this role. That means read_only_with_create_view_user is owner of those views. 

-- Creating new read-write role. 

CREATE ROLE rw_role WITH 
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity' IN ROLE read_only_role; 

GRANT CONNECT ON DATABASE mydb to rw_role; 

GRANT USAGE ON SCHEMA myschema TO crn_rw_role_qa; 
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA myschema TO rw_role; 
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA myschema TO rw_role; 

CREATE USER read_write_user 
WITH PASSWORD '*****' 
in role rw_role; 

So after login with read_write_user when I try to access new views created by read_only_with_create_view_user, I get below error 


ERROR: permission denied for relation view_name 
********** Error ********** 

ERROR: permission denied for relation view_name 
SQL state: 42501 

감사합니다,
Himanshu

답변

1

을 당신은 다른 역할의 구성원으로 역할을 설정할 수 있습니다

GRANT read_only_with_create_view_user TO read_write_user; 

더 많은 정보 here.


편집

예상대로 작동하지 않습니다.

enter image description here

역할 read_write_user 둘은 어떤 관계가없는 때문에 단순히 read_only_with_create_view_user가 소유 한 개체에 액세스 할 수없는 것 : 현재 사용자의 스키마를 참조하십시오. 이 작업을 수행하려면 개체의 소유권을 "상위"수준 역할 read_only_role (모든 사람이이 역할의 구성원이기 때문에)에 재 할당해야합니다.

--Connected as read_only_with_create_view_user 
CREATE VIEW my_view AS SELECT 1; 

--Assign ownership to top-level role 
ALTER VIEW my_view OWNER TO read_only_role; 

을 또는 당신은이 방법을 선호 할 수 있습니다 :

다음 중 하나를 수행 할 수 있습니다 또한, 물론 개체에 직접 권한을 부여 할 수

--Connected as read_only_with_create_view_user 
--Change current user to read_only_role 
SET role = read_only_role; 

--Create a view... 
CREATE VIEW my_view AS SELECT 1; 

--Turn back to read_only_with_create_view_user 
RESET role; 

.

CREATE VIEW my_view_2 AS SELECT 1; 
GRANT SELECT ON my_view_2 TO read_write_user 

당신이 하나의 명령에 최상위 역할에 read_only_with_create_view_user가 소유 한 개체의 소유권을 다시 할당 할 수 있습니다 한 번에 모든 작업을 수행하려는 경우

: 역할을 만드는 동안

REASSIGN OWNED BY read_only_with_create_view_user TO read_only_role; 
+0

는 이미 그 방법을 시도 "create role .... in role ...."구문을 사용하지만 read_only_with_create_view_user에 의해 생성 된 새로운보기에는 read_write_user가 액세스 할 수 없습니다. 오류 : 관계 뷰 이름에 대한 사용 권한이 거부되었습니다. ********** 오류 ********** 오류 : 관계 뷰 이름에 대한 사용 권한이 거부되었습니다. SQL 상태 : 42501 –

+0

시도.발급 한 명령으로 질문을 업데이트하십시오. –

+0

또한 역할에'INHERIT' 속성이 있는지 확인하십시오. –

관련 문제