1

Temat: utworzenie tabeli przez funkcję - jakie uprawnienia

Mam zdefiniowanego użytkownika który może wpisywać dane do kilku tabel. W wyniku wpisania do jednej z nich przez funkcję wyzwalacza powinny się utworzyć odpowiednie tabele (przez funkcje) i wpisy do nich. Problem polega na utworzeniu tabeli przez funkcję jak uruchamiam jako postgres to jest ok a inaczej otrzymuję komunikat

ERROR:  must be member of role "postgres"
CONTEXT:  SQL statement " CREATE TABLE pojazdy."_001"(
          "dt_data_czas" timestamp(0) without time zone NOT NULL,
          "int_nr_diag" integer NOT NULL
          --CONSTRAINT "fk_001" FOREIGN KEY (int_nr_diag)
          --REFERENCES ustawienia.t_diag_1_1 (int_nr_diag)
          --MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE
        ) WITH OIDS;
            ALTER TABLE pojazdy."_001" OWNER TO postgres;
            GRANT ALL ON TABLE pojazdy."_001" TO postgres;
            GRANT SELECT ON TABLE pojazdy."_001" TO "serwis";
            GRANT SELECT ON TABLE pojazdy."_001" TO "TW";
            GRANT ALL ON TABLE pojazdy."_001" TO "MTDataProvider";
            COMMENT ON TABLE pojazdy."_001" IS 'początek i koniec informacji diagnostycznej dla pojazdu "_001"'"
PL/pgSQL function "f_int_create_table1_tbl" line 10 at EXECUTE statement
SQL statement "SELECT  pojazdy.f_int_create_table1_tbl( $1 )"
PL/pgSQL function "f_tri_ai_mt_read" line 48 at PERFORM

jak "od komentuję"

          --CONSTRAINT "fk_001" FOREIGN KEY (int_nr_diag)
          --REFERENCES ustawienia.t_diag_1_1 (int_nr_diag)
          --MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE

to mam inny komunikat dotyczący relacji:

ERROR:  permission denied for relation t_diag_1_1
CONTEXT:  SQL statement " CREATE TABLE pojazdy."_001"(
          "dt_data_czas" timestamp(0) without time zone NOT NULL,
          "int_nr_diag" integer NOT NULL,
          CONSTRAINT "fk_001" FOREIGN KEY (int_nr_diag)
          REFERENCES ustawienia.t_diag_1_1 (int_nr_diag)
          MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE
        ) WITH OIDS;
            --ALTER TABLE pojazdy."_001" SET TABLESPACE baza2;
            ALTER TABLE pojazdy."_001" OWNER TO postgres;
            GRANT ALL ON TABLE pojazdy."_001" TO postgres;
            GRANT SELECT ON TABLE pojazdy."_001" TO "serwis";
            GRANT SELECT ON TABLE pojazdy."_001" TO "TW";
            GRANT ALL ON TABLE pojazdy."_001" TO "MTDataProvider";
            COMMENT ON TABLE pojazdy."_001" IS 'początek i koniec informacji diagnostycznej dla pojazdu "_001"'"
PL/pgSQL function "f_int_create_table1_tbl" line 10 at EXECUTE statement
SQL statement "SELECT  pojazdy.f_int_create_table1_tbl( $1 )"
PL/pgSQL function "f_tri_ai_mt_read" line 48 at PERFORM


Jakie muszę dać minimalne a zarazem wystarczające uprawnienia żeby możliwe było prawidłowe wykonywanie funkcji wyzwalacza wraz z tworzeniem tabel i do jakich obiektów muszę te uprawniania przypisać. Dodam jeszcze że baza jest podzielona na schematy i próbowałem już dawać uprawnienia do wykonywania funkcji, tworzenia bazy, wszystkie do schematu ale bez skutecznie.

2

Odp: utworzenie tabeli przez funkcję - jakie uprawnienia

A próbowałeś utworzyć funkcję z opcją SECURITY DEFINER, chociaż nie jest to bezpieczne każde jej wywołanie będzie wykonywane na prawach użytkownika który ją stworzył.

3

Odp: utworzenie tabeli przez funkcję - jakie uprawnienia

Dodałem tylko do funkcji wyzwalacza z której są uruchamiane inne funkcje między innymi tworzące tabele no i jest OK. Wielkie dzięki. A co do bezpieczeństwa to chyba nie ma innego sposobu :{. Jednak bardziej martwi mnie fakt, że logując się do baze za pomocą pgAdmina nawet jako użytkownik z minimalnymi uprawnieniami mam podgląd na całą strukturę bazy łącznie z definicjami funkcji oczywiście oprócz danych w tabelach... sad

4

Odp: utworzenie tabeli przez funkcję - jakie uprawnienia

Pozdrawiam
Pawel Socha

5

Odp: utworzenie tabeli przez funkcję - jakie uprawnienia

nie - mam w 5 różnych schematach sad

Ostatnio edytowany przez WitekS (2010-01-11 18:54:22)