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?
Odpowiedz
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.
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
Prawdopodobnie trzeba również zmodyfikować plik pg_hba.conf
. Domyślnie lokalna instalacja nie sprawdza uprawnień.
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ślniePUBLIC
nie ma żadnych uprawnień dla tabel, kolumn, schematów lub obszarów tabel. W przypadku innych typów, domyślne uprawnienia nadanePUBLIC
są następujące:CONNECT
iCREATE TEMP TABLE
dla baz danych;EXECUTE
przywilej dla funkcji; iUSAGE
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:
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
- 1. Przesyłanie danych między bazami danych za pomocą PostgreSQL
- 2. weryfikuje spójność danych między dwiema bazami danych PostgreSQL
- 3. Mysql PHP łączy się z bazami danych
- 4. Testowanie aplikacji szyny z wieloma bazami danych
- 5. Jak zabić aplikację ze wszystkimi jej działaniami?
- 6. Czy wizualizacja może łączyć się automatycznie za pośrednictwem JMX ze zdalnym procesem?
- 7. Łączenie kapsuł ze wszystkimi celami
- 8. Singleton z wieloma bazami danych
- 9. Udostępnianie NavigationView ze wszystkimi działaniami?
- 10. Jak połączyć się z wieloma bazami danych przy użyciu WZP?
- 11. W jaki sposób VBA może łączyć się z bazą danych MySQL w Excelu?
- 12. Synchronizacja między dwiema bazami danych
- 13. Czy macierzysty klient iOS może łączyć się z serwerem meteor.js?
- 14. Rspec capybara Użytkownik nie może się zalogować
- 15. Wszystkie zmiany danych przechowuj ze wszystkimi szczegółami (takimi jak Stackoverflow).
- 16. .Net LoginControls - Użytkownik nie może się wylogować w Firefox
- 17. Transakcje aplikacji niebędących bazami danych
- 18. Kończenie [użytkownik]. ze znakiem EOT w Prologu
- 19. Optymalizowanie połączeń z bazami danych
- 20. PostgreSQL: rola nie może się logować
- 21. Czym różni się użytkownik renderujący i renderuje "nowy"?
- 22. Python Windows Installer ze wszystkimi zależnościami?
- 23. Użytkownik Postgrera tworzy bazę danych
- 24. Yii wiele połączeń z bazami danych
- 25. Jak korzystać z zapełniacza danych zagranicznych PostgreSQL w celu dołączenia do 2 różnych baz danych PostgreSQL
- 26. Potrzebujesz pomocy w pracy z bazami danych w C#
- 27. Klon element ze wszystkimi jego zdarzeniami
- 28. ORA-01008 ze wszystkimi zmiennymi związany
- 29. PostgreSQL - zapytanie ze skryptu bash jako użytkownika bazy danych 'postgres'
- 30. Jak stworzyć Guida ze wszystkimi elementami zerowymi?
W jaki sposób próbowałeś odebrać przywileje CONNECT? –
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
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