사용자가 Postgres에서 가정하는 '역할'은 데이터베이스에 로컬입니다. 데이터베이스의 사용자 역할은 데이터베이스 사용 권한을 시행합니다. 그래서, foobar가이 저장된 proc을 실행하거나이 테이블을 선택할 수 있다고 말하면 Postgres는 이것을 강제 할 것입니다. SECURITY INVOKER를 사용하여 프로 시저를 만들면 실행중인 프로 시저가 현재 로그인 된 Postgres 사용자를 사용하여 실행됨을 의미합니다. SECURITY DEFINER는 프로 시저가 생성 된 역할을 사용하여 프로 시저가 실행됨을 의미합니다. 어느 쪽이든, 프로 시저가 Postgres 밖에서 (파일 생성과 같은) 어떤 일을 수행한다면, 당신이 발견 한 것처럼 Postgres를 시작한 아이덴티티로 처리 될 것입니다. 제 경우에는 유닉스 사용자 인 'postgres'를 가지고 있고 Postgres를 시작할 때 나는 그 사용자로합니다. 따라서 생성 된 모든 파일은 'postgres'사용자가 소유하게됩니다.
운영체제에 대해 말씀하지 않으 셨습니다. Windows는 * nix와 다를 수 있습니다. 이 대답은 * nix 용입니다.
저장된 proc 언어가 plpython이라고 언급했습니다. 따라서 파일을 만든 다음 프로 시저에서 파일을 만든 후에 소유권을 변경할 수 있습니다. 마찬가지로 :
import os
import pwd
f = open('/tmp/myfile','w')
f.write('hello')
f.close()
user_id = pwd.getpwnam("foobar").pw_uid
os.chown('/tmp/myfile', user_id, -1)
포스트 그레스가이 일을해야 실행되는 호스트의는 foobar 사용자가 있다고 가정.
-g