2011-07-30 7 views
6

Zainstalowałem bazę danych PostgreSQL 9 (migracja z Oracle10g) i jestem naprawdę zdezorientowany przez zarządzanie użytkownikami/rolami. Kiedy utworzę nowego użytkownika za pomocą polecenia SQL, takiego jak CREATE USER lub CREATE ROLE, lub przez narzędzie Navicat, utworzony użytkownik może zobaczyć wszystkie bazy danych! On naprawdę może je połączyć! Chociaż nie może wybrać żadnych danych z tabeli, widzi obiekty i sekwencje tabel i tak dalej. Próbowałem odwołać przywilej połączenia, ale bez efektu. Oczekiwano, że nowy użytkownik nie ma żadnych przywilejów i niczego nie zobaczy. Naprawdę nie wiem, dlaczego on może.Dlaczego nowy użytkownik w PostgreSQL może łączyć się ze wszystkimi bazami danych?

+2

W jaki sposób próbowałeś odebrać przywileje CONNECT? –

+0

Jeśli korzystasz z pgAdmin, możesz sprawdzić rolę i uprawnienia użytkownika do logowania. W swoim serwerze rozwiń pozycję Role logowania, kliknij prawym przyciskiem myszy rolę logowania i sprawdź uprawnienia ról i członkostwa ról. Następnie dopasuj te uprawnienia i członkostwa do danych obiektów DB i DB. Jeśli DB lub obiekt ma przypisaną rolę, a login użytkownika ma tę rolę, to wyjaśnia dostęp. Jeśli użytkownik kliknął kartę "Uprawnienia do ról", objaśnia to inne prawa. – atrain

+0

Więc zacząłem pgAdmin i oglądałem na karcie ról w moich bazach danych (kliknij prawym przyciskiem myszy na bazie danych, potem permissionsI rzeczy). Dołączyła się rola "publiczna" do wszystkich moich baz danych. Więc usunę to. A teraz działa! Dziękuję bardzo, bo trochę się przestraszyłem :-) – veselej

Odpowiedz

0

Musisz użyć GRANT i/lub REVOKE, aby zdefiniować uprawnienia dla użytkownika lub roli. Można również użyć następujących funkcji link, aby sprawdzić, czy użytkownik ma określone uprawnienia do tabeli, bazy danych itp.

+0

Tak, zrobiłem. U użył polecenia SQL z podręcznika PostgreSQL - REVOKE CONNECT ON DATABASE dbname FROM username; i nie ma żadnego efektu -> zobacz wątek komentarza od Aarona Sheffey'a. Ale dziękuję. – veselej

1

Prawdopodobnie trzeba również zmodyfikować plik pg_hba.conf. Domyślnie lokalna instalacja nie sprawdza uprawnień.

11

Od http://www.postgresql.org/docs/9.2/static/sql-grant.html#SQL-GRANT-DESCRIPTION-OBJECTS kopalni (nacisk):

PostgreSQL dotacje domyślne uprawnienia na niektórych typach obiektów PUBLIC. Domyślnie PUBLIC nie ma żadnych uprawnień dla tabel, kolumn, schematów lub obszarów tabel. W przypadku innych typów, domyślne uprawnienia nadane PUBLIC są następujące: CONNECT i CREATE TEMP TABLE dla baz danych; EXECUTE przywilej dla funkcji; i USAGE przywilej dla języków. Właściciel obiektu może oczywiście mieć zarówno domyślne, jak i wyraźnie przyznane uprawnienia. (Aby uzyskać maksymalne bezpieczeństwo, należy wydać REVOKE w tej samej transakcji, która tworzy obiekt, a następnie nie ma okna, w którym inny użytkownik może korzystać z tego obiektu.) Te wstępne domyślne ustawienia uprawnień można zmienić za pomocą polecenia ALTER DEFAULT PRIVILEGES.

W celu usunięcia wszystkich przywilejów (w tym CONNECT) dla wszystkich nieokreślonych użytkowników bazy danych, należy użyć:

REVOKE ALL PRIVILEGES ON DATABASE <database> FROM public; 

Patrz także:

+0

Dzięki, świetnie, z wyjątkiem "Aby uzyskać maksymalne bezpieczeństwo, wystaw komendę REVOKE w tej samej transakcji, która tworzy obiekt; wtedy nie ma okna, w którym inny użytkownik może korzystać z obiektu "- brzmiało to jak dobra rada, ale nie działa dla baz danych, ponieważ (powołując się na komunikat o błędzie)" CREATE DATABASE nie może działać wewnątrz bloku transakcji ". Więc nie ma sposobu, aby zamknąć okno, aby ktoś mógł użyć nowej bazy danych? – njlarsson

Powiązane problemy