Coś mi brakuje, jeśli chodzi o konfigurację PostgreSQL. Chciałbym utworzyć wiele baz danych i użytkowników, którzy są od siebie odizolowani, aby określony użytkownik miał dostęp tylko do baz danych, które wskazałem. Jednak z tego, co mogę ustalić, każdy utworzony użytkownik ma dostęp do wszystkich baz danych bez żadnych konkretnych dotacji.
Oto, co robię na Ubuntu Server 12.04:
- apt-get install postgresql
- sudo -u postgres createuser -DRSP mike1 (Podanie hasła dla nowego użytkownika)
- sudo -u postgres utworzoneb danych1
- psql -h localhost -U mike1 data1 (Określanie hasła do logowania użytkownika mike1)
Wygląda na to, że nowy użytkownik „mike1” nie ma problemu z połączeniem z bazą danych „data1” i tworzeniem tabel itp. I to bez uruchamiania jakiejkolwiek komendy GRANT (a właścicielem „data1” jest „postgres”, ponieważ nie określiłem właściciel w kroku 3). Czy to naprawdę tak ma działać?
Chciałbym udzielić mike1 pełnego dostępu do danych1, a następnie powtórzyć to dla większej liczby użytkowników i baz danych, upewniając się, że użytkownicy mają dostęp tylko do jednej (lub kilku) wybranych baz danych.
źródło
Odpowiedzi:
Na poziomie SQL każdy użytkownik może rzeczywiście połączyć się z nowo utworzoną bazą danych, dopóki nie zostanie wydane następujące polecenie SQL:
Po zakończeniu każdemu użytkownikowi lub roli, która powinna być w stanie się połączyć, należy wyraźnie przyznać uprawnienie do połączenia:
Edycja: w scenariuszu z wieloma dzierżawcami
connect
usunięto by nie tylko uprawnienia. Aby uzyskać porady i najlepsze praktyki najmu, możesz przeczytać na publicznej wiki postgresql: Hosting wspólnej bazy danych i zarządzanie prawami w PostgreSQL .źródło
postgres
może on uzyskać dostęp do wszystkich baz danych.PUBLIC ma domyślnie dostęp do bazy danych, ale nie ma dostępu do danych. Możesz ODWOŁAĆ PUBLIKĘ:
Jeśli chcesz mieć to ustawienie dla wszystkich przyszłych baz danych, odwołaj CONNECT w bazie danych template1 (domyślna baza danych szablonów do tworzenia nowej bazy danych):
źródło
Oprócz domyślnego odbierania uprawnień do połączenia z PUBLIC i przyznawania ich zgodnie z konkretnymi potrzebami, drugim poziomem, na którym można kontrolować dostęp, jest plik pg_hba.conf.
Możesz znaleźć miejsce przechowywania pliku za pomocą:
Jeśli zdecydujesz się skorzystać z tego mechanizmu, zostaną osadzone komentarze, które mogą wystarczyć na rozpoczęcie pracy. Dokumenty są tutaj:
http://www.postgresql.org/docs/current/interactive/auth-pg-hba-conf.html
źródło
GRANT
/REVOKE
omówiona w innych odpowiedziach jest prawdopodobnie łatwiejsza. Po pierwsze potrzebujesz do tego połączenia z bazą danych superużytkownika, w przeciwieństwie do logowania do systemu operacyjnego, aby móc edytować plik.Natknąłem się na ten wątek, szukając sposobu, aby uniemożliwić użytkownikom nawet wyświetlanie innych nazw baz danych.
REVOKE CONNECT
Nie zapobiec.Zgodnie z odpowiedziami na to SO pytanie nie ma (godnego polecenia) sposobu na osiągnięcie tego.
źródło