1

Temat: Architektura aplikacja<->baza danych

Witam, tworzę aplikację łączącą się z bazą danych (postgresql). Jest kilku użytkowników aplikacji i powinni oni mieć różny dostęp poprzez aplikację do bazy danych. Mianowicie jest np. tabela „Materiały” i w niej kolumna „Id” - chciałbym żeby użytkownik „A” miał dostęp do wierszy w których pole „Id” jest większe od 100 a użytkownik „B” do wszystkich wierszy tej tabeli. Z tego co wiem można odbierać lub nadawać prawa do tabel. Ale co jeśli chce żeby użytkownik miał dostęp tylko do wybranych wierszy tabeli. Można oczywiście napisać funkcję(procedurę) „pobierz dla A”, „pobierz dla B”, albo funkcję z parametrem(ale to chyba nie było by w tym przypadku za bezpieczne (brak gwarancji, że użytkownik „A” nie wpisze 0 zamiast 100)).

Jaki jest najlepszy (najbezpieczniejszy) sposób rozwiązania mojego problemu, oprócz pisania dla każdego użytkownika oddzielnych procedur?

2

Odp: Architektura aplikacja<->baza danych

Najlepiej zrobić to za pomocą widoków. Co do funkcji, zawsze mozesz z poziomu funkcji sprawdzic jaki uzytkownik ja wywoluje (CURRENT_USER), no chyba ze uzyjesz SECURITY DEFINER-wtedy sprawdzanie moze nie zadzialac.