繁体   English   中英

使用非超级用户帐户获取大对象的实际数据

[英]Get the actual data of the large object using non-superuser account

环境:PostgreSQL 9.1

在pg 9.0之前,可以通过从pg_largeobject表中选择相应的记录来获得大对象TEXT字段的实际数据。 但是从pg 9.0开始,非超级用户不再允许访问该表。

但是,通过使用休眠模式,相同的非超级用户帐户可以访问此TEXT字段的实际数据。因此,我相信使用非超级用户帐户也可以“选择”此TEXT字段的实际内容。 我该怎么做?

根据Craig的建议,我通过设置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语句中简单地对其进行调用。

谢谢。

为什么不看看Hibernate在做什么呢?

postgresql.conf设置log_statement = 'all'并重新加载或重启PostgreSQL。 在Hibernate中重新运行测试,看看发生了什么。

大概我会说Hibernate使用的是大对象客户端接口,特别是PgJDBC的大对象支持 或者,它可能正在使用JDBC标准的clob / blob接口来访问数据。

在阅读有关大型对象的文档时,我遇到了您的问题的答案:lo_compat_privileges,这是postgresql.conf中的变量。 此变量可以具有打开或关闭的值。 默认为关闭,开启为您所期望的。 使用默认值执行9.0版本之前不存在的Postgresql安全检查。 如果此变量的值为“ on”,则大多数新的安全检查不会执行: http : //www.postgresql.org/docs/9.2/static/runtime-config-compatible.html#GUC-LO-COMPAT-特权

安全检查留在了postgresql中,因此将是启用新安全检查并与GRANT选项一起使用的最佳解决方案。

亲切的问候,

ek

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM