pytanie brzmi w zasadzie do tego: w jaki sposób mogę bezpiecznie tworzyć nowe bazy danych na postgresie, co oznacza, że domyślnie nikt nie ma żadnych uprawnień do nowych baz danych i cały dostęp musi być jawnie zdefiniowany.niepewne ustawienia domyślne z publicznym schematem postgres?
Próbowałem różnych zasobów w Internecie, ale nie można uzyskać jednoznacznej odpowiedzi. próbowałem tego na fedora 17 linux z postgres 9.1, ale ostatecznie użyłbym go na redhat 6.3 z postgres 8.4.
proces:
- zainstalować postgres, uruchom InitDB uruchomić serwer
- połączyć lokalnie z postgres super user
- utworzyć nowy użytkownik u1 z opcji createdb i createrole
- odłączyć i podłączyć jako U1
- utwórz bazę danych db1
- utwórz użytkownika u2
- odłączyć i podłączyć jako u2
- Tworzenie tabeli t1 w db1
nie spodziewałbym się, że ostatni krok do osiągnięcia sukcesu. u2 nie otrzymał żadnych przywilejów dla db1, a także nie wyświetla żadnych uprawnień podczas wysyłania zapytań do bazy danych lub schematu. według mojej wiedzy u2 może tworzyć tabele na bazie db1, ze względu na publiczny schemat i domyślne uprawnienia dla wbudowanej roli publicznej. jeśli chcę je odwołać, mogę to zrobić tylko w bazie danych, ale nie w schemacie, ponieważ jest ona własnością PostgreSQL. więc w końcu muszę odwołać te uprawnienia z superużytkownikiem dla każdej nowej bazy danych, którą tworzę. Nie mogę delegować go do właściciela bazy danych, ale nie wolno mi tego zapomnieć o każdej nowej bazie danych.
ustawienie domyślne umożliwiłoby każdemu użytkownikowi spamowanie publicznego schematu w dowolnej nowej bazie danych. jest to niebezpieczne, ponieważ inni użytkownicy domyślnie pracują nad publicznym schematem i nie sprawdzają, czy tabele już istnieją i po prostu używają istniejących posiadanych przez nieznajomego.
Jak mogę naprawić te niepewne wartości domyślne?
pierwsza sugestia naprawdę nie działa odkąd potem jeszcze trzeba super użytkownikowi dać przywileje na schemacie publicznego do indywidualnych użytkowników ponieważ nadal jest własnością root'a i chcę przekazać to zadanie nie-superużytkownikowi. ale druga sugestia działa, wystarczy pamiętać, aby zawsze tworzyć publiczny schemat wzdłuż nowej bazy danych, a także nadawać uprawnienia do schematu. dzięki! – anselm