Hallo in die Runde,
ich möchte gern den Zugriff auf diverse Tabellen und eigene PG-Funktionen nach aussen abschotten.
Dazu habe ich eine function fct_generic geschrieben, liegt im Schema public (=“facade”). Im zweiten Schema “application” liegen diverse functions “fct_123”, “fct_124”, “fct_125” etc. sowie alle Daten (tables). Sämtliche appplication.functions werden über public.fct_generic genutzt nach dem muster: fct_generic(“123”, “load_data”). Der Aufruf innerhalb fct_generic sieht dann so aus: fct_123(“load_data”).
Funktioniert soweit wunderbar. Nur offenbar muss der user “app_user”, welcher für Schema “public” berechtigt ist und von aussen “SELECT fct_generic(…)” aufruft, auch für sämtliche sonstigen tables und functions berechtigt sein, die von fct_generic direkt oder indirekt (zB über fct_123) angesprochen werden. Das wiederum gefällt mir nicht. “app_user” soll den Inhalt von Schema “application” nicht sehen/auflisten können.
Vermutlich wurden solche Szenarion schon irgendwo realisiert. Gibt es dazu Best Practices? Beim Googlen hatte ich den Hinweis gefunden, dass dieses Szenario mit zwei Datenbanken (anstelle zwei Schema) realisiert werden könnte? Muss ich in meiner fct_generic einen User mit Password angeben? Dies könnte der fct_generic-User dann allerdings auslesen? Wo ist mein entscheidender Denkfehler?
Danke für sachdienliche Hinweise!
Rainer