SECURITY DEFINER tvůrce / vlastník

5 views
Skip to first unread message

Jiří Fejfar

unread,
Sep 8, 2021, 11:44:16 AM9/8/21
to postgr...@googlegroups.com
Ahoj, chtěl bych se zeptat:

pokud udělám SECURITY DEFINER funkci, tak ona běží s právy toho, kdo ji vytvořil (jak je napsané v dokumentaci [1]) nebo toho, kdo je vlastník té funkce? Je to myšleno tak, že kdo funkci vytvořil = vlastník?

Vytvářím takovou funkci pod superuserem, protože v té funkci potřebuju měni vlastníka large objectů. Pak nastavuju vlastníka té funkce na skupinovou roli administrátorů DB, která ale už není superuser. A ono to toho vlastníka LO nechce změnit, že bych musel být vlastníkem LO. A když si dám vypsat current_setting('role')[2] tak je tam ta skupinová nesuperuser role.

On asi postgres v metadatech neeviduje samostatně, kdo funkci vytvořil, že? Předpokládá se, že to je ten vlastník...

Díky, J.

Michal Bartak

unread,
Sep 8, 2021, 1:09:51 PM9/8/21
to postgr...@googlegroups.com
funkce je spustena v kontextu uzivatele, ktery je vlastnikem funkce (viz pg_proc.proowner)

8. 9. 2021 v 17:44, Jiří Fejfar <juraf...@gmail.com>:


--
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „PostgreSQL-cz“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu postgresql-c...@googlegroups.com.
Chcete-li tuto diskusi zobrazit na webu, navštivte https://groups.google.com/d/msgid/postgresql-cz/CA%2B8wVNXgP2jy4cX9w5VnDW2xkPqceko%3Dixsm8z7LiMeyg_f8ow%40mail.gmail.com.

Pavel Stehule

unread,
Sep 8, 2021, 1:16:00 PM9/8/21
to PostgreSQL-cz


st 8. 9. 2021 v 17:44 odesílatel Jiří Fejfar <juraf...@gmail.com> napsal:
Ahoj, chtěl bych se zeptat:

pokud udělám SECURITY DEFINER funkci, tak ona běží s právy toho, kdo ji vytvořil (jak je napsané v dokumentaci [1]) nebo toho, kdo je vlastník té funkce? Je to myšleno tak, že kdo funkci vytvořil = vlastník?

Vytvářím takovou funkci pod superuserem, protože v té funkci potřebuju měni vlastníka large objectů. Pak nastavuju vlastníka té funkce na skupinovou roli administrátorů DB, která ale už není superuser. A ono to toho vlastníka LO nechce změnit, že bych musel být vlastníkem LO. A když si dám vypsat current_setting('role')[2] tak je tam ta skupinová nesuperuser role.

On asi postgres v metadatech neeviduje samostatně, kdo funkci vytvořil, že? Předpokládá se, že to je ten vlastník...

juju - v Postgresu neni evidovan creator a zrovna tak neni nikde ulozene create time. Pracuje se pouze s vlastnikem - s tim, ze implicitnim prvnim vlastnikem je autor objektu (nicmene vlastnik se muze zmenit)

Pavel

--

Jiří Fejfar

unread,
Sep 8, 2021, 2:08:39 PM9/8/21
to postgr...@googlegroups.com


středa 8. září 2021 Pavel Stehule <pavel....@gmail.com> napsal(a):

>
>
> st 8. 9. 2021 v 17:44 odesílatel Jiří Fejfar <juraf...@gmail.com> napsal:
>>
>> Ahoj, chtěl bych se zeptat:
>> pokud udělám SECURITY DEFINER funkci, tak ona běží s právy toho, kdo ji vytvořil (jak je napsané v dokumentaci [1]) nebo toho, kdo je vlastník té funkce? Je to myšleno tak, že kdo funkci vytvořil = vlastník?
>>
>> Vytvářím takovou funkci pod superuserem, protože v té funkci potřebuju měni vlastníka large objectů. Pak nastavuju vlastníka té funkce na skupinovou roli administrátorů DB, která ale už není superuser. A ono to toho vlastníka LO nechce změnit, že bych musel být vlastníkem LO. A když si dám vypsat current_setting('role')[2] tak je tam ta skupinová nesuperuser role.
>>
>> On asi postgres v metadatech neeviduje samostatně, kdo funkci vytvořil, že? Předpokládá se, že to je ten vlastník...
>
> juju - v Postgresu neni evidovan creator a zrovna tak neni nikde ulozene create time. Pracuje se pouze s vlastnikem - s tim, ze implicitnim prvnim vlastnikem je autor objektu (nicmene vlastnik se muze zmenit)
>

Diky za vysvetleni. Nepripadne vam, ze je to v te dokumentaci trochu zavadejici? Je tam primo napsane "the user that created it"... kdyby tam, bylo "owner" tak, je to jasne. Mam zkusit vykomunikovat upravu? Dava to smysl?

J.

> Pavel
>>
>> Díky, J.
>> [1] " the user that created it " https://www.postgresql.org/docs/9.6/sql-createfunction.html
>> [2] https://stackoverflow.com/questions/22501705/how-to-check-role-of-current-postgresql-user-from-qt-application
>>
>> --
>> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „PostgreSQL-cz“ ve Skupinách Google.
>> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu postgresql-c...@googlegroups.com.
>> Chcete-li tuto diskusi zobrazit na webu, navštivte https://groups.google.com/d/msgid/postgresql-cz/CA%2B8wVNXgP2jy4cX9w5VnDW2xkPqceko%3Dixsm8z7LiMeyg_f8ow%40mail.gmail.com.
>
> --
> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „PostgreSQL-cz“ ve Skupinách Google.
> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu postgresql-c...@googlegroups.com.
> Chcete-li tuto diskusi zobrazit na webu, navštivte https://groups.google.com/d/msgid/postgresql-cz/CAFj8pRCHdp21NOo%3DE0%2Bm6z9Sd%2BNaNr2LiE-xBupQKtuUYU9r%2Bg%40mail.gmail.com.
>

Pavel Stehule

unread,
Sep 8, 2021, 2:16:42 PM9/8/21
to PostgreSQL-cz


st 8. 9. 2021 v 20:08 odesílatel Jiří Fejfar <juraf...@gmail.com> napsal:


středa 8. září 2021 Pavel Stehule <pavel....@gmail.com> napsal(a):
>
>
> st 8. 9. 2021 v 17:44 odesílatel Jiří Fejfar <juraf...@gmail.com> napsal:
>>
>> Ahoj, chtěl bych se zeptat:
>> pokud udělám SECURITY DEFINER funkci, tak ona běží s právy toho, kdo ji vytvořil (jak je napsané v dokumentaci [1]) nebo toho, kdo je vlastník té funkce? Je to myšleno tak, že kdo funkci vytvořil = vlastník?
>>
>> Vytvářím takovou funkci pod superuserem, protože v té funkci potřebuju měni vlastníka large objectů. Pak nastavuju vlastníka té funkce na skupinovou roli administrátorů DB, která ale už není superuser. A ono to toho vlastníka LO nechce změnit, že bych musel být vlastníkem LO. A když si dám vypsat current_setting('role')[2] tak je tam ta skupinová nesuperuser role.
>>
>> On asi postgres v metadatech neeviduje samostatně, kdo funkci vytvořil, že? Předpokládá se, že to je ten vlastník...
>
> juju - v Postgresu neni evidovan creator a zrovna tak neni nikde ulozene create time. Pracuje se pouze s vlastnikem - s tim, ze implicitnim prvnim vlastnikem je autor objektu (nicmene vlastnik se muze zmenit)
>

Diky za vysvetleni. Nepripadne vam, ze je to v te dokumentaci trochu zavadejici? Je tam primo napsane "the user that created it"... kdyby tam, bylo "owner" tak, je to jasne. Mam zkusit vykomunikovat upravu? Dava to smysl?

Proc ne. Ten popis je sice ve shode s nazvem funkcionality "security definer", nicmene to dneska uz rozhodne neni akuratni.

Pavel


J.
> Pavel
>>
>> Díky, J.
>> [1] " the user that created it " https://www.postgresql.org/docs/9.6/sql-createfunction.html
>> [2] https://stackoverflow.com/questions/22501705/how-to-check-role-of-current-postgresql-user-from-qt-application
>>
>> --
>> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „PostgreSQL-cz“ ve Skupinách Google.
>> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu postgresql-c...@googlegroups.com.
>> Chcete-li tuto diskusi zobrazit na webu, navštivte https://groups.google.com/d/msgid/postgresql-cz/CA%2B8wVNXgP2jy4cX9w5VnDW2xkPqceko%3Dixsm8z7LiMeyg_f8ow%40mail.gmail.com.
>
> --
> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „PostgreSQL-cz“ ve Skupinách Google.
> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu postgresql-c...@googlegroups.com.
> Chcete-li tuto diskusi zobrazit na webu, navštivte https://groups.google.com/d/msgid/postgresql-cz/CAFj8pRCHdp21NOo%3DE0%2Bm6z9Sd%2BNaNr2LiE-xBupQKtuUYU9r%2Bg%40mail.gmail.com.
>

--
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „PostgreSQL-cz“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu postgresql-c...@googlegroups.com.

Michal Bartak

unread,
Sep 8, 2021, 2:24:29 PM9/8/21
to postgr...@googlegroups.com
Ta veta je uz upravena v dokumentaci pro novejsi verze postgresu. Na priklad pro 12:

SECURITY DEFINER specifies that the function is to be executed with the privileges of the user that owns it.

Ty citujes dokumentaci 9.6. ale i tam to fungovalo jako v novejsich verzich. snad maji zajem na oprave stare dokumentace.

8. 9. 2021 v 20:08, Jiří Fejfar <juraf...@gmail.com>:

Jiří Fejfar

unread,
Sep 9, 2021, 2:00:11 AM9/9/21
to postgr...@googlegroups.com
On Wed, 8 Sept 2021 at 20:24, Michal Bartak <maxym...@gmail.com> wrote:
Ta veta je uz upravena v dokumentaci pro novejsi verze postgresu. Na priklad pro 12:

SECURITY DEFINER specifies that the function is to be executed with the privileges of the user that owns it.

Ty citujes dokumentaci 9.6. ale i tam to fungovalo jako v novejsich verzich. snad maji zajem na oprave stare dokumentace.


no jo, nenapadlo mě zabrousit do nové dokumentace :-) to v tom případě je asi vcelku jedno, že je to ve staré dokumentaci nepřesně... ona myslím 9.6 přestane být letos podporvaná...
8. 9. 2021 v 20:08, Jiří Fejfar <juraf...@gmail.com>:

Diky za vysvetleni. Nepripadne vam, ze je to v te dokumentaci trochu zavadejici? Je tam primo napsane "the user that created it"... kdyby tam, bylo "owner" tak, je to jasne. Mam zkusit vykomunikovat upravu? Dava to smysl?

--
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „PostgreSQL-cz“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu postgresql-c...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages