2012-08-30 2 views
0

환경 사용하여 가져 오기 : PostgreSQL의 9.1큰 객체의 실제 데이터가 아닌 수퍼 유저 계정을

pg_largeobject에서 해당 레코드를 선택하여 TEXT 필드가 할 수있는 큰 개체의 실제 데이터를 받고, 9.0 PG에 앞서 테이블 하지만 9.0 이후에는 수퍼 유저가 아닌 사용자가이 테이블에 더 이상 액세스 할 수 없습니다.

그러나 최대 절전 모드를 사용하면 동일한 수퍼 유저가 아닌 계정이이 TEXT 필드의 실제 데이터에 액세스 할 수 있습니다. 따라서 수퍼 유저가 아닌 계정을 사용하면이 텍스트 필드의 실제 내용을 "선택할"수도 있습니다. 내가 어떻게 해? 크레이그에 의해 제안

, 나는 log_statement = 'all' 및 관련 로그를 설정하여 로그 수집을 켜은 다음과 같습니다

SELECT p.proname,p.oid 
FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n 
WHERE p.pronamespace=n.oid AND n.nspname='pg_catalog' 
AND (proname = 'lo_open' or proname = 'lo_close' or proname = 'lo_creat' or proname = 'lo_unlink' 
or proname = 'lo_lseek' or proname = 'lo_tell' or proname = 'loread' or proname = 'lowrite' 
or proname = 'lo_truncate') 

2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_open" (OID 952) 
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_open" (OID 952) 
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_lseek" (OID 956) 
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_tell" (OID 958) 
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_lseek" (OID 956) 
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_tell" (OID 958) 
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_lseek" (OID 956) 
2012-08-31 09:27:05 HKT LOG: fastpath function call: "loread" (OID 954) 
2012-08-31 09:27:05 HKT LOG: fastpath function call: "loread" (OID 954) 
2012-08-31 09:27:05 HKT LOG: fastpath function call: "loread" (OID 954) 
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_close" (OID 953) 

그것은 여러 lo_XXX() 함수를 호출하지만 내가 PL로 만드는 방법 아무 생각이 없다/pgSQL 함수는 select 문에서 간단히 호출 할 수 있습니다.

감사합니다.

답변

1

왜 Hibernate가하고 있는지 보지 않겠습니까?

으로 설정하고 PostgreSQL을 다시 시작하거나 다시 시작하십시오. Hibernate에서 테스트를 다시 실행하고 무슨 일이 일어나는지보십시오.

나는 최대 절전 모드가 large object 클라이언트 인터페이스, 특히 PgJDBC의 large object support을 사용하고 있다고 생각한다. 또는 JDBC-standard clob/blob interfaces을 사용하여 데이터에 액세스 할 수 있습니다.

+0

좋은 제안 크레이그. 여러 lo_XXX() 함수를 호출하지만 PL/pgSQL 함수에서이를 사용하여 select 문에서 간단하게 호출 할 수있는 방법을 모릅니다. –

+0

@KenChan 답변이 제안 사항으로 업데이트되었습니다. –

0

큰 개체에 대한 설명서 읽기 질문에 대한 대답 : lo_compat_privileges, postgresql.conf의 변수입니다. 이 변수의 값은 on 또는 off 일 수 있습니다. 기본값은 꺼져 있고, 당신이 기대했던 것이 있습니다. 기본값을 사용하면 버전 9.0 이전에는 존재하지 않은 Postgresql 보안 검사를 수행합니다. 이 변수의 값이 'on'이면 대부분의 새 보안 검사가 수행되지 않습니다 ( http://www.postgresql.org/docs/9.2/static/runtime-config-compatible.html#GUC-LO-COMPAT-PRIVILEGES).

보안 검사는 postgresql에 남아 있기 때문에 새로운 보안 검사를 사용 가능하게하고 GRANT 옵션을 사용하는 최상의 해결책이됩니다. 종류 안부

,

Loek

관련 문제