Re: [patch] plproxy v2
От | Marko Kreen |
---|---|
Тема | Re: [patch] plproxy v2 |
Дата | |
Msg-id | e51f66da0807211321p1b4de170g2d4865fadd68b378@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [patch] plproxy v2 (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: [patch] plproxy v2
|
Список | pgsql-hackers |
On 7/21/08, Tom Lane <tgl@sss.pgh.pa.us> wrote: > "Marko Kreen" <markokr@gmail.com> writes: > > [ plproxy ] > > I looked through this a bit, and my principal reaction was "what are > the security implications?" It seems like it'd be very easy to create > functions that allow untrusted users to execute arbitrary SQL on > other databases in the plproxy cluster. As far as I saw there was > no privilege-checking within plproxy itself, you were just relying > on SQL-level permissions checking --- so even though plproxy functions > can only be *created* by superusers, by default they can be *used* by > anybody. So it'd take a great deal of care to avoid making > unintentional security holes. > > I'm not sure about a good solution to this problem, but I think it needs > to be solved before plproxy can be recommended for widespread use. > The first thought that comes to mind is to somehow propagate the userid > on the calling server to the execution on the remote, so that a user > can't get more privilege on the remote than if he were executing there > directly. I'm imagining that the definition of a cluster would include > a map from local to remote userids (and thereby imply that anyone not > explicitly listed can't do remote access at all). There are 2 aspects to it: 1. Function can be created only by superuser. 2. If cluster connection strings do not have 'user=' key, ' user=' || current_username() is appended to it. Note that connections are per-backend, not shared. Also, plroxy does _nothing_ with passwords. That means the password forremote connection must be in postgres user's .pgpass, or there is pooler between plproxy and remote database who handles passwords. What else do you see is needed? I'm not sure a map is a good idea, is seems to create unnecessary coplexity. Ofcourse, it can be done. But I don't think plproxy can and should protect dumb admins who create remote_exec(sql) function and allow untrusted users to execute it. -- marko
В списке pgsql-hackers по дате отправления: