Re: getMetaData().getUserName() implementation

From: Péter Kovács <peter(dot)dunay(dot)kovacs(at)gmail(dot)com>
To: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: getMetaData().getUserName() implementation
Date: 2012-10-07 22:33:19
Message-ID: CAO01x1G+B1y1KYBvRru+iuDPs268hzW4EXmMPKc-TrfY6_MWcg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

As JDBC doesn't appear to distinguish between real and impersonated user,
the safest is probably to bypass the JDBC API and use the native SQL API:
http://www.postgresql.org/docs/8.3/static/functions-info.html

Peter
On Oct 8, 2012 12:27 AM, "Péter Kovács" <peter(dot)dunay(dot)kovacs(at)gmail(dot)com>
wrote:

> The safest is probably to bypass the JDBC API and use the native SQL API:
> http://www.postgresql.org/docs/8.3/static/functions-info.html
>
> Peter
> On Oct 7, 2012 11:41 PM, "Thomas Hill" <Thomas(dot)K(dot)Hill(at)t-online(dot)de> wrote:
>
>> Hello,
>>
>> I have been using Apache Derby as data base backend for an application
>> over the past years and am looking into adding PostgreSQL as an additional
>> backend the application could be run against.
>> Obviously all stored procedure code I have written is in Java. All
>> procedures/functions are defined with "Security definer" so they are
>> executed with the privileges of the user that defined them.
>> So in a first step I installed the latest version of plJava on PostgreSQL
>> 8.4 running on a Debian 6 Squeeze server and uploaded the jar files into
>> the server.
>>
>> In one of my procedures I am however noticing that the Apache Derby
>> implementation and the PostgreSQL implementation are leading to different
>> results.
>> When logging in as "Thomas" and then using jdbc function
>> getMetaData().getUserName() *within* a stored procedure and returning the
>> result to the calling program
>> - Apache Derby returns the session user, i.e. Thomas (and not the name of
>> the data base or procedure owner [which is what CURRENT_USER when being
>> called within the proc would return / but which is not what I need)
>> - PostgreSQL returns "postgres" whereas I would have expected it to also
>> return "Thomas".
>>
>> I am wondering if someone can explain why this is the case? and
>> how I can get around this "compatibility" issue?
>> If the driver implementations are different, any suggestion how to modify
>> the java code so it would actually for both data base systems return the
>> session_user?
>>
>> Thanks a lot in advance.
>>
>> Kind regards
>> Thomas
>>
>>
>>
>>
>> --
>> Sent via pgsql-jdbc mailing list (pgsql-jdbc(at)postgresql(dot)org)
>> To make changes to your subscription:
>> http://www.postgresql.org/**mailpref/pgsql-jdbc<http://www.postgresql.org/mailpref/pgsql-jdbc>
>>
>

In response to

Browse pgsql-jdbc by date

  From Date Subject
Next Message emergency.shower@gmail.com 2012-10-08 07:49:52 Re: Severe performance degradation when using the 9.2-1000 JDBC 4 driver
Previous Message Thomas Hill 2012-10-07 21:40:41 getMetaData().getUserName() implementation