원하는 방식대로 작동하도록 사용 권한을 얻는 데 약간의 문제가 있습니다.상속 된 역할에서 SELECT를 취소하십시오.
나는 일반적으로 모든 곳에서 SELECT 할 수있는 역할을 가지고 있으며,이 역할에 많은 멤버가 있습니다. 그들 중 하나는 특정 테이블에서 선택하도록 허용되어서는 안됩니다.
일반적인 리더 역할에 역할 구성원 자격을 부여하고 제한된 테이블에서 SELECT를 취소하면 이것이 가능할 것으로 생각했습니다.
상위 역할의 권한이 적용되고 특정 권한이 아닌 것으로 보입니다. 좀 더 제한된 역할의 권한을 유지할 필요없이이 문제를 해결할 수있는 방법이 있습니까? 아니면 PostgreSQL에서 역할 개념을 잘못된 방식으로 적용하고 있습니까?
이 다음은 샘플 스크립트입니다 : PostgreSQL의에서
-- as superuser
CREATE DATABASE permission_test;
\c permission_test
CREATE ROLE r_general_select;
CREATE ROLE r_restricted_select IN ROLE r_general_select;
-- set the default permissions
ALTER DEFAULT PRIVILEGES IN SCHEMA "public" GRANT SELECT ON TABLES TO "r_general_select";
CREATE TABLE "open"(
id SERIAL,
payload TEXT
);
insert into "open"(payload) values ('test');
-- covered by default privileges
GRANT SELECT ON "open" TO PUBLIC;
-- Tests
-- this is good
SET ROLE r_general_select;
SELECT * FROM "open";
RESET ROLE;
-- this is good
SET ROLE r_restricted_select;
SELECT * FROM "open";
RESET ROLE;
CREATE TABLE "restricted" (
id SERIAL,
payload TEXT
);
insert into "restricted"(payload) values ('test');
-- the role and it's members should be able to read
GRANT SELECT ON "restricted" TO r_general_select;
-- except for this one!
REVOKE SELECT ON "restricted" FROM r_restricted_select;
-- Tests
-- this is good
SET ROLE r_general_select;
SELECT * FROM restricted;
RESET ROLE;
-- this should barf with a permission violation
SET ROLE r_restricted_select;
SELECT * FROM restricted;
RESET ROLE;
--- CLEANUP
DROP OWNED BY "r_restricted_select" CASCADE;
DROP ROLE r_restricted_select ;
DROP OWNED BY "r_general_select" CASCADE;
DROP ROLE r_general_select ;
촬영! 나는 이것이 사실이라고 생각했지만 문서에서 그것에 대한 참조를 찾을 수 없었다. 그럼 다시 드로잉 보드에 ... – serverhorror