Обсуждение: dblink for 8.4 should work without user-mappings
contrib/dblink in 8.4 supports a server name by CREATE SERVER for connection
string, but it always requires an user-mapping (by CREATE USER MAPPING).
However, I think it should work user-mappings because it works when
the connection string is passed directly.
=# SELECT * FROM dblink('dbname=postgres', 'SELECT current_user') AS t(i name);
(ok)
=# CREATE FOREIGN DATA WRAPPER postgresql VALIDATOR postgresql_fdw_validator;
=# CREATE SERVER server1 FOREIGN DATA WRAPPER postgresql OPTIONS (dbname 'postgres');
=# SELECT * FROM dblink('server1', 'SELECT 1') AS t(i integer);
ERROR: user mapping not found for "postgres"
The attached patch adds 'missing_ok' parameter to GetUserMapping() and
made dblink to use it. There should be no additional security issues here
because dblink's original security check works even for server name mode.
Regards,
---
ITAGAKI Takahiro
NTT Open Source Software Center
Вложения
On Wednesday 24 June 2009 05:42:01 Itagaki Takahiro wrote: > contrib/dblink in 8.4 supports a server name by CREATE SERVER for > connection string, but it always requires an user-mapping (by CREATE USER > MAPPING). However, I think it should work user-mappings because it works > when the connection string is passed directly. I had looked into this the other day. I *think* that SQL/MED requires a user mapping to be present. There are cases where either behavior might be useful, but we should think about this carefully. It's not simply a question of security, as you appear to imply.
What happened to this patch?
---------------------------------------------------------------------------
Itagaki Takahiro wrote:
> contrib/dblink in 8.4 supports a server name by CREATE SERVER for connection
> string, but it always requires an user-mapping (by CREATE USER MAPPING).
> However, I think it should work user-mappings because it works when
> the connection string is passed directly.
>
> =# SELECT * FROM dblink('dbname=postgres', 'SELECT current_user') AS t(i name);
> (ok)
>
> =# CREATE FOREIGN DATA WRAPPER postgresql VALIDATOR postgresql_fdw_validator;
> =# CREATE SERVER server1 FOREIGN DATA WRAPPER postgresql OPTIONS (dbname 'postgres');
> =# SELECT * FROM dblink('server1', 'SELECT 1') AS t(i integer);
> ERROR: user mapping not found for "postgres"
>
> The attached patch adds 'missing_ok' parameter to GetUserMapping() and
> made dblink to use it. There should be no additional security issues here
> because dblink's original security check works even for server name mode.
>
> Regards,
> ---
> ITAGAKI Takahiro
> NTT Open Source Software Center
[ Attachment, skipping... ]
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
-- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB
http://enterprisedb.comPG East: http://www.enterprisedb.com/community/nav-pg-east-2010.do + If your life is a hard
drive,Christ can be your backup. +
Bruce Momjian <bruce@momjian.us> wrote: > What happened to this patch? It was rejected because SQL standard always requires an user mapping. I agree about the decision, too. > --------------------------------------------------------------------------- > Itagaki Takahiro wrote: > > contrib/dblink in 8.4 supports a server name by CREATE SERVER for connection > > string, but it always requires an user-mapping (by CREATE USER MAPPING). > > However, I think it should work user-mappings because it works when > > the connection string is passed directly. > > > > The attached patch adds 'missing_ok' parameter to GetUserMapping() and > > made dblink to use it. There should be no additional security issues here > > because dblink's original security check works even for server name mode. Regards, --- Takahiro Itagaki NTT Open Source Software Center