GRANT USAGE
주어진 데이터베이스에 대한 사용자 / 역할을 원합니다 . 데이터베이스에는 많은 스키마가 있습니다.
이 있다는 것을 알고 ON ALL TABLES IN SCHEMA
있지만 "모든 스키마"를 원합니다. 나는 시도 GRANT USAGE .. ON DATABASE
했지만 분명히 틀렸다 (실제로는 존재 하지 않는다 ).
Postgres 9.3 또는 9.4 용이며 AWS RDS에있는 서버입니다.
GRANT USAGE
주어진 데이터베이스에 대한 사용자 / 역할을 원합니다 . 데이터베이스에는 많은 스키마가 있습니다.
이 있다는 것을 알고 ON ALL TABLES IN SCHEMA
있지만 "모든 스키마"를 원합니다. 나는 시도 GRANT USAGE .. ON DATABASE
했지만 분명히 틀렸다 (실제로는 존재 하지 않는다 ).
Postgres 9.3 또는 9.4 용이며 AWS RDS에있는 서버입니다.
답변:
최소한 두 가지 옵션이 있습니다.
첫 번째 는 작은 쿼리와 텍스트 편집기를 사용합니다. 관심있는 스키마를 수집해야합니다.
SELECT nspname
FROM pg_namespace;
WHERE
범위를 제한하려는 경우 절을 추가 할 수 있습니다 . 출력을 복사하고 수정하여 많은 GRANT USAGE ON SCHEMA ... TO your_role;
명령 을 얻습니다 . 그런 다음 psql
에 예를 들어
psql -f multigrant.sql
이것의 일반적인 변형은 수집 된 이름과 호출을 반복 psql
하고 생성 된 GRANT
문을 -c
옵션에 전달 하는 쉘 스크립트 일 수 있습니다 .
다른 솔루션 은 기본적으로 하나의 pl / pgsql 블록에서 동일하게 수행되어 동적 쿼리를 작성합니다. 핵심은 동일합니다. 스키마를 수집해야합니다. 그런 다음 스키마별로 권한 스키마를 부여하여 모든 항목을 반복합니다.
DO $do$
DECLARE
sch text;
BEGIN
FOR sch IN SELECT nspname FROM pg_namespace
LOOP
EXECUTE format($$ GRANT USAGE ON SCHEMA %I TO your_role $$, sch);
END LOOP;
END;
$do$;
참고 사항 :
format()
위해 %I
형식 지정자 와 함께 사용 합니다. 이 방법은 문자열 상수와 일부 quote_ident()
호출 을 연결하여 쿼리를 작성하는 것보다 훨씬 읽기 쉽습니다 .pg_namespace
pg_catalog
스키마 에서 찾을 수 있습니다 . 다른 객체를 확인하십시오-스키마, 테이블 등의 모든 측면을 저장합니다.당신도 사용할 수 있습니다.
DO $do$
DECLARE
sch text;
BEGIN
FOR sch IN SELECT nspname FROM pg_namespace where nspname != 'pg_toast'
and nspname != 'pg_temp_1' and nspname != 'pg_toast_temp_1'
and nspname != 'pg_statistic' and nspname != 'pg_catalog'
and nspname != 'information_schema'
LOOP
EXECUTE format($$ GRANT USAGE ON SCHEMA %I TO your_role $$, sch);
EXECUTE format($$ GRANT USAGE ON SCHEMA %I to your_role $$, sch);
EXECUTE format($$ GRANT SELECT ON ALL SEQUENCES IN SCHEMA %I TO your_role $$, sch);
EXECUTE format($$ GRANT SELECT ON ALL TABLES IN SCHEMA %I TO backup_user $$, sch);
EXECUTE format($$ ALTER DEFAULT PRIVILEGES IN SCHEMA %I GRANT SELECT ON TABLES TO your_role $$, sch);
EXECUTE format($$ ALTER DEFAULT PRIVILEGES IN SCHEMA %I GRANT SELECT ON SEQUENCES TO your_role $$, sch);
END LOOP;
END;
$do$;
grant usage
새 스키마에 대해 자동으로 실행되는 이벤트 트리거를 사용하여 새로 작성된 스키마에 대한 기본 권한을 시뮬레이션 할 수 있는지 궁금합니다 .