수퍼 유저없이 확장 가능한 PostgreSQL


13

사용자를 위해 역할과 데이터베이스를 자동으로 생성하는 스크립트가있는 PostgreSQL 9.5 서버가 있습니다. 이러한 데이터베이스 내에서 특정 확장명 (예 : pgcrypto)을 활성화하는 것이 도움이되지만, 이해하는 바와 같이 실행하려면 수퍼 유저 여야합니다 CREATE EXTENSION. 수퍼 유저 계정으로 수동으로 로그인하지 않고 이러한 확장을 활성화하는 방법이 있습니까?


4
당신이에 추가 해봤 template1다음에서 각 사용자 데이터베이스를 만드는 template1CREATE DATABASE foo OWNER=userfoo TEMPLATE=template1?
Kassandry

1
@Kassandry는 그런 생각을하지 않았지만 좋은 생각입니다. 이상적으로는 소유자가 원하는 경우 확장 프로그램을 추가 할 수 있기를 원하지만 여전히 허용되는 가능성입니다.
beldaz 2016 년

답변:


10

에서 워드 프로세서 확장에,

수퍼 유저 (부울) 이 매개 변수가 true 인 경우 (기본값) 수퍼 유저 만 확장을 만들 거나 새 버전으로 업데이트 할 수 있습니다 . false로 설정되면 설치 또는 업데이트 스크립트에서 명령을 실행하는 데 필요한 권한 만 필요합니다.

값은에 설정되어 있지 않으므로 pgcrypto.control기본적으로 true로 설정되어 있으며 수퍼 유저가 필요합니다.

이것은 CREATE EXTENSIONCREATE EXTENSION 의 문서가 당신을 믿게 만들었 음에도 불구하고 데이터베이스의 단순한 소유자가 될 수 없음 을 의미합니다 .

나는 열심히 노력했지만 false기쁨은 없었습니다. C는 신뢰할 수없는 언어이며

오류 : 언어 c에 대한 권한이 거부되었습니다.

에서 pg_language의 문서

수퍼 유저 만 신뢰할 수없는 언어로 함수를 작성할 수 있습니다.

... 물론 수퍼 유저로서 c신뢰할 수 있습니다 UPDATE pg_language set lanpltrusted = true where lanname = 'c';. 그런 다음 CREATE EXTENSION pgcrypto비 수퍼 유저로서 잘 작동합니다. 그러나 사용자가 확장 디렉토리에 소스를 업로드 한 다음 데이터베이스에 설치하는 것에 대해 걱정해야하는 경우 나쁜 생각처럼 들립니다. 즉, 나는 그렇게 멀리 가지 않을 것입니다. 이 고양이를 피부에 바르는 또 다른 방법을 찾았습니다.


고마워 Evan, 그것은 내가 요청할 수있는 철저한 답변입니다. 아마도이 문제를 해결하기 위해 @Kassandry의 고양이 가죽 제안을 선택할 것입니다. 또한 CREATE EXTENSION을 저장 프로 시저에 래핑하는 것에 대해 생각했지만 dblink 인증 유키 니스가없는 동일한 데이터베이스 에서이 작업을 수행하는 경로를 찾을 수 없었습니다.
beldaz 2016 년

그렇다면 pg_dump확장에 관한 문장을 덤핑하는 것을 막을 수 있는 옵션이 없다는 점은 무엇입니까 ? 현재 외부 텍스트 처리 도구를 사용하여에 의해 덤프 된 SQL에서 해당 명령문을 제거해야합니다 pg_dump.
Claudix

@Evan Carroll : psql cli를 통해 수퍼 유저를 false로 설정할 수 있습니까? amazon aws rds에 인스턴스가 있으며 pgcrypto.control에 액세스 할 수 없습니다.
ribamar

2
@ribamar no는 데이터베이스에 연결된 모든 사람이 db postmaster로 리터럴 임의 코드 실행을 수행 할 수 있음을 의미하기 때문입니다. 그것은 끔찍한 아이디어 일 것입니다.
Evan Carroll

수퍼 유저는 누구도 아닙니다. 이 방법을 사용하면 운영 체제 수퍼를 dbms 수퍼 유저와 구별 할 수 있다는 것을 이해합니다.하지만 그러한 결정을 내리는 경우 도구에 힘을 실어 주려고하고, 더 강력한 다른 사용자를 만들어야하는 경우에는이를 구현해야합니다. 도구 내부.
ribamar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.