Re: getMetaData().getUserName() implementation - Mailing list pgsql-jdbc

From Péter Kovács
Subject Re: getMetaData().getUserName() implementation
Date
Msg-id CAO01x1G+B1y1KYBvRru+iuDPs268hzW4EXmMPKc-TrfY6_MWcg@mail.gmail.com
Whole thread Raw
In response to getMetaData().getUserName() implementation  (Thomas Hill <Thomas.K.Hill@t-online.de>)
List 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.dunay.kovacs@gmail.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.K.Hill@t-online.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@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-jdbc

pgsql-jdbc by date:

Previous
From: Thomas Hill
Date:
Subject: getMetaData().getUserName() implementation
Next
From: "emergency.shower@gmail.com"
Date:
Subject: Re: Severe performance degradation when using the 9.2-1000 JDBC 4 driver