Thread: current_user changes immediately after login

current_user changes immediately after login

From
Christian Schröder
Date:
Hi list,
I have a strange problem: When I connect to one of my databases, the
current_user immediatly changes without any interaction from my side.
This is what I do:

chschroe@db1:~> psql -h db2 testdb
Welcome to psql 8.2.5, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

testdb=> select session_user;
 session_user
--------------
 chschroe
(1 row)

testdb=> select current_user;
 current_user
--------------
 itstaff
(1 row)

How can this happen? The consequence of this is that I cannot access the
tables because the role "itstaff" has no privileges. "reset role" does
not have any effect. After "set role none" the current_user is equal to
the session_user and the tables are accessible again.

This problem does only occur with this database. Do you have any
explanation?

Regards,
    Christian

--
Deriva GmbH                         Tel.: +49 551 489500-42
Financial IT and Consulting         Fax:  +49 551 489500-91
Hans-Böckler-Straße 2                  http://www.deriva.de
D-37079 Göttingen

Deriva CA Certificate: http://www.deriva.de/deriva-ca.cer



Re: current_user changes immediately after login

From
Tom Lane
Date:
=?ISO-8859-1?Q?Christian_Schr=F6der?= <cs@deriva.de> writes:
> I have a strange problem: When I connect to one of my databases, the
> current_user immediatly changes without any interaction from my side.

That's bizarre.  Do you have anything in ~/.psqlrc?  I'm also wondering
(though too lazy to experiment) whether this effect could be produced
via "ALTER DATABASE foo SET role = bar" ... checking
pg_database.datconfig would be enough to eliminate that idea ...

            regards, tom lane

Re: current_user changes immediately after login

From
Christian Schröder
Date:
Tom Lane wrote:
> =?ISO-8859-1?Q?Christian_Schr=F6der?= <cs@deriva.de> writes:
>
>> I have a strange problem: When I connect to one of my databases, the
>> current_user immediatly changes without any interaction from my side.
>>
>
> That's bizarre.  Do you have anything in ~/.psqlrc?  I'm also wondering
> (though too lazy to experiment) whether this effect could be produced
> via "ALTER DATABASE foo SET role = bar" ... checking
> pg_database.datconfig would be enough to eliminate that idea ...
>

I had found the problem just before I read your mail and you are
perfectly right with your guess: These are the corresponding entries
from the pg_database system catalog (without the datacl column):

  datname |    datconfig
---------+----------------
  testdb  | {role=itstaff}

So it seems that one of the users (one with the appropriate permissions
for this database) has issued this "alter database" command (probably
without really understanding what he did *g*).
After "alter database testdb reset role" everything is ok now.

Thanks for your help!

Regards,
    Christian

--
Deriva GmbH                         Tel.: +49 551 489500-42
Financial IT and Consulting         Fax:  +49 551 489500-91
Hans-Böckler-Straße 2                  http://www.deriva.de
D-37079 Göttingen

Deriva CA Certificate: http://www.deriva.de/deriva-ca.cer