2012-10-26 12 views
5

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:

  1. zainstalować postgres, uruchom InitDB uruchomić serwer
  2. połączyć lokalnie z postgres super user
  3. utworzyć nowy użytkownik u1 z opcji createdb i createrole
  4. odłączyć i podłączyć jako U1
  5. utwórz bazę danych db1
  6. utwórz użytkownika u2
  7. odłączyć i podłączyć jako u2
  8. 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?

Odpowiedz

5

Możesz odwołać publiczne uprawnienie "tworzenie" schematu w bazie danych template1 i będzie ono propagowane do dowolnej nowo utworzonej bazy danych domyślnie: bazy danych są tworzone przez kopiowanie template1 (lub innej bazy danych oznaczonej jako szablon, ale template1 jest ustawieniem domyślnym).

W rzeczywistości można po prostu całkowicie pominąć schemat public w tej sytuacji i delegować zadanie, jeśli zostało utworzone (w razie potrzeby) właścicielowi bazy danych.

+0

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

5

użyłem tego artykułu z korzyścią kiedy potrzebne do bezpiecznej bazy danych:

Total security in a PostgreSQL database

+0

również to zobaczył i skomentował. nie działa zgodnie z opisem dla mnie do tworzenia baz danych tylko dla domyślnej bazy danych postgres. – anselm

Powiązane problemy