dblink: give search_path

Started by Thiemo Kellneralmost 8 years ago6 messagesgeneral
Jump to latest
#1Thiemo Kellner
thiemo@gelassene-pferde.biz

Hi all

I try to execute a function not in the Schema I connect to with
dblink. Is there way to tell dblink to set search_path in a specific
way? I have not found a solution in the documentation. I tried with
the set search_path definition in the function declarations to no avail.

Function Schema: logger
Database: act
User: act
User Default Schema: act

Kind regards

Thiemo

--
Öffentlicher PGP-Schlüssel:
http://pgp.mit.edu/pks/lookup?op=get&search=0x8F70EFD2D972CBEF

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.

#2Rene Romero Benavides
rene.romero.b@gmail.com
In reply to: Thiemo Kellner (#1)
Re: dblink: give search_path

What about setting the search path at the user level?
ALTER ROLE act SET search_path = act,logger;

Best.

2018-04-11 1:44 GMT-05:00 Thiemo Kellner <thiemo@gelassene-pferde.biz>:

Hi all

I try to execute a function not in the Schema I connect to with dblink. Is
there way to tell dblink to set search_path in a specific way? I have not
found a solution in the documentation. I tried with the set search_path
definition in the function declarations to no avail.

Function Schema: logger
Database: act
User: act
User Default Schema: act

Kind regards

Thiemo

--
Öffentlicher PGP-Schlüssel: http://pgp.mit.edu/pks/lookup?
op=get&search=0x8F70EFD2D972CBEF

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.

--
El genio es 1% inspiración y 99% transpiración.
Thomas Alva Edison
http://pglearn.blogspot.mx/

#3Thiemo Kellner, NHC Barhufpflege
thiemo.kellner@gelassene-pferde.biz
In reply to: Rene Romero Benavides (#2)
Re: dblink: give search_path

Zitat von Rene Romero Benavides <rene.romero.b@gmail.com>:

What about setting the search path at the user level?
ALTER ROLE act SET search_path = act,logger;

Best.

Thanks for the inspiration. Maybe it is best to create a dedicated
user for logging anyway...

--
Öffentlicher PGP-Schlüssel:
http://pgp.mit.edu/pks/lookup?op=get&amp;search=0x8F70EFD2D972CBEF

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.

#4Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Thiemo Kellner (#1)
Re: dblink: give search_path

On 04/10/2018 11:44 PM, Thiemo Kellner wrote:

Hi all

I try to execute a function not in the Schema I connect to with dblink.
Is there way to tell dblink to set search_path in a specific way? I have
not found a solution in the documentation. I tried with the set
search_path definition in the function declarations to no avail.

https://www.postgresql.org/docs/10/static/contrib-dblink-connect.html

"
Notes

If untrusted users have access to a database that has not adopted a
secure schema usage pattern, begin each session by removing
publicly-writable schemas from search_path. One could, for example, add
options=-csearch_path= to connstr. This consideration is not specific to
dblink; it applies to every interface for executing arbitrary SQL commands.
"

or schema qualify the function:

select logger.some_func();

Function Schema: logger
Database: act
User: act
User Default Schema: act

Kind regards

Thiemo

--
Adrian Klaver
adrian.klaver@aklaver.com

#5Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Thiemo Kellner (#1)
Re: dblink: give search_path

On 04/10/2018 11:44 PM, Thiemo Kellner wrote:

Hi all

I try to execute a function not in the Schema I connect to with dblink.
Is there way to tell dblink to set search_path in a specific way? I have
not found a solution in the documentation. I tried with the set
search_path definition in the function declarations to no avail.

In addition to my previous suggestions:

test=# SELECT public.dblink_connect('dbname=production ');
dblink_connect
----------------
OK

test=# select * from public.dblink('show search_path') as
t1(search_path text);
search_path
-------------
main

test=# select public.dblink_exec('set search_path=main,utility');
dblink_exec
-------------
SET
(1 row)

test=# select * from public.dblink('show search_path') as
t1(search_path text);
search_path
---------------
main, utility

Function Schema: logger
Database: act
User: act
User Default Schema: act

Kind regards

Thiemo

--
Adrian Klaver
adrian.klaver@aklaver.com

#6Thiemo Kellner, NHC Barhufpflege
thiemo.kellner@gelassene-pferde.biz
In reply to: Adrian Klaver (#5)
Re: dblink: give search_path

Zitat von Adrian Klaver <adrian.klaver@aklaver.com>:

In addition to my previous suggestions:

test=# SELECT public.dblink_connect('dbname=production ');
dblink_connect
----------------
OK

test=# select * from public.dblink('show search_path') as
t1(search_path text);
search_path
-------------
main

test=# select public.dblink_exec('set search_path=main,utility');
dblink_exec
-------------
SET
(1 row)

test=# select * from public.dblink('show search_path') as
t1(search_path text);
search_path
---------------
main, utility

Hi Adrian. Thanks for pointing this out. I wonder why I did not think
of it myself. However, I moved to a dedicated logging user such
avoiding this Problem. I also seems a clean solution that way.

-- 
+49 (0)1578-772 37 37
+41 (0)78 947 36 21
Öffentlicher PGP-Schlüssel:  
http://pgp.mit.edu/pks/lookup?op=get&search=0x8F70EFD2D972CBEF

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.