2012-05-08 3 views
18

모든 기능 및보기에서 임의의 사용자에게 읽기/선택 권한을 부여하려면 어떻게합니까?보기에 대한 모든 권한을 임의의 사용자에게 부여하는 방법

나는 여러 가지 기능과보기를 만들 psql --user=postgres -d mydb -f myview.sql를 사용하고 난 실행

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser; 

모든 권한을 부여받은 데, 내가 지금 postgres 사용자가 만든 함수 및 뷰에 액세스 할 수 myuser을 기대 . 그러나 myuser을 사용하여 액세스하려고하면 "관계가 거부되었습니다 ..."오류가 발생합니다. 왜 이런거야?

답변

25

보기 또는 테이블에 액세스하려면 추가 권한이 필요합니다. 데이터베이스의 특권은 그 안에있는 모든 오브젝트에 대한 액세스를 포함하지 않습니다.

기능에 따라 다릅니다 : EXECUTE 기본적으로 public에게 권한이 부여됩니다. 그러나이 함수는 현재 사용자의 권한으로 실행됩니다. CREATE FUNCTION에 대한 SECURITY DEFINER 수식어에 관심이있을 수 있습니다. 그러나 일반적으로 관련 테이블에 SELECT을 부여하면 충분합니다. 객체의 유형에 따라

Per documentation about default privileges:

, 초기 기본 권한은 는 PUBLIC에 일부 권한을 부여 포함될 수 있습니다. 기본값은 테이블, 열, 스키마 및 테이블 공간에 대해 공용이 아니고 액세스입니다. CONNECT 특권 및 TEMP 데이터베이스에 대한 테이블 작성 특권; EXECUTE 함수에 대한 특권; 및 언어에 대한 USAGE 특권.

당신이 DDL 명령에 관심이있을 수 있습니다 (나중에 9.0 또는 포스트 그레스 필요) : 해당 데이터베이스에 연결은 물론 (@marcel's comment 아래 참조) 동안

GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser; 

을하고, 같은 충분한 권한을 가진 사용자. 또한 설정 DEFAULT PRIVILEGES에 관심이있을 수 :

더 자세한 답변을 관리하는 방법 권한 :

pgAdmin이 기능이 있습니다 에프 이상의 복잡한 대량 작업 :

enter image description here

아니면 벌크 부여/해지에 대한 DDL 문을 생성하는 시스템 카탈로그를 조회 할 수 있습니다 ...

+2

'SCHEMA의 모든 테이블에 대한 선택 권한은 myuser에게 공개되었습니다.' 부여하는 사용자가 해당 데이터베이스에 * CONNECTED * 일 때이 명령이 실행될 때만 의미가 있습니다. 그렇지 않다면 아무 것도하지 않습니다. 적어도 사용자에게 선택 권한을 부여하지는 않습니다. 수퍼 유저 쉘에서 \ c databasename을 사용하십시오. – marcel

+0

@marcel : 사람들에게 상기시키기 위해 메모를 추가했습니다. –

+0

이것은 시퀀스에 대한 사용자 권한을 부여하지 않습니다. – Cerin

관련 문제