Re: Early binding of CURRENT_SCHEMA (Was: CREATE FUNCTION ... SEARCH {, DEFAULT | SYSTEM | SESSION }) - Mailing list pgsql-general

From dld
Subject Re: Early binding of CURRENT_SCHEMA (Was: CREATE FUNCTION ... SEARCH {, DEFAULT | SYSTEM | SESSION })
Date
Msg-id 06a2fd57-e631-6366-f50f-4c77f551ba3e@casema.nl
Whole thread Raw
In response to Re: Early binding of CURRENT_SCHEMA (Was: CREATE FUNCTION ... SEARCH {, DEFAULT | SYSTEM | SESSION })  (Erik Wienhold <ewie@ewie.name>)
List pgsql-general
On 27-09-2023 04:03, Erik Wienhold wrote:
> ccing list
>
> On 2023-09-27 00:12 +0200, dld write:
>> On 26-09-2023 23:47, Erik Wienhold wrote:
>>> On 2023-09-26 14:44 +0200, dld wrote:
>>>> I followed the discussion about the schema resolution, and I really think
>>>> there is need for an early bound (at function definition time) version of
>>>> CURRENT_SCHEMA (the first member of search_path)
>>> The helper functions can't be created in a common schema with a fixed
>>> name?


Yes, they could. But I try to avoid hard coding the name all over the place.

>
> Ah, I see.  But still wondering if this is necessary.
>
>> I do not want to interfere, I do not want to pollute their schema with my
>> nonsense-functions..
> Again, why can't create_asof() and the helper/worker functions be in a
> hard coded schema?  Are those functions defined once in the database or
> does each user get their own version, perhaps in a multitenancy design?
> And who is calling create_asof()?

Yes they could.

my_separate_schema.create_asof() is intended to be called by the "end 
user" of the "package"

 From whatever current_schema or search_path [s]he happens to be in.


>
> I'm currently working on a database that I also designed in large parts
> where trigger functions (SECURITY DEFINER) create views that give users
> a restricted view of the data for ease of use.  Quite similar to that
> create_asof() function but with hard coded schema names.  So I'm also
> interested to learn what designs other people came up with.
>

Me too.

And: I would really like another version of current_schema() that is 
resolved/bound at the moment the function is defined.

>>   I just want to keep them in my own secret schema. [remember POSTGIS?]
> Secretive for having security through obscurity?  But you can't really
> hide schema information when users still need access to system catalogs.
> But you can decide to revoke EXECUTE privilege from those functions and
> give users a few SECURITY DEFINER functions as entry points to the
> "private" parts of the schema.

It is not about security. security is orthogonal to this.

And the SECURITY DEFINER is already present.

The factory function will generate a function in the end-users schema

, but only if this end-user has sufficient rights.

> Anything special about PostGIS in this regard?  In my databases PostGIS
> either lives in public or a dedicated schema.  But there's nothing
> secretive about it.
IIRC postgis needs to be in the search_path, or it will suffer the same 
restrictions.


HTH,

AvK




pgsql-general by date:

Previous
From: Laurenz Albe
Date:
Subject: Re: log_statement vs log_min_duration_statement
Next
From: Dave Cramer
Date:
Subject: Re: Right version of jdbc