Minimalne granty na dostęp tylko do jednego stołu tylko do odczytu na PostgreSQL

10

Poniżej znajduje się lista poleceń, które wydają się działać, aby utworzyć nowego użytkownika (login) i przyznać dostęp tylko do odczytu dla jednej określonej tabeli na PostgreSQL.

Załóżmy, że polecenia te są wykonywane podczas logowania z wystarczającymi uprawnieniami (tj. postgresLogowanie w domyślnej instalacji).

CREATE ROLE user_name NOSUPERUSER NOCREATEDB 
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';

Teraz chcę przyznać selecttabelę tab_abcw bazie danych db_xyz, więc db_xyzproszę bardzo (baza danych jest wybierana jako bieżąca przez PgAdmin lub coś takiego):

grant select on tab_abc to user_name;

Pytanie brzmi: czy jest to wystarczające, czy nie powinno być więcej grantów (baza danych connect, usagebyć może)?

Te polecenia wydają się działać dla mnie, ale moja domyślna instalacja ma domyślne ustawienia zabezpieczeń. Jakie dodatkowe granty należy dodać, jeśli administrator serwera skonfigurował silniejsze zabezpieczenia?

Wygląda na to, że nie muszę udzielać, connectani usage- czy jest to implikowane przy udzielaniu select? Czy zawsze tak jest?

WildWezyr
źródło

Odpowiedzi:

12

Pytanie brzmi: czy to wystarczy, czy powinno być więcej dotacji (połączenie z bazą danych, może użycie)?

Zabezpieczenia mogą zostać wzmocnione od domyślnych głównie w następujących punktach:

  • pg_hba.confPlików. Filtruje połączenia przed rozważeniem jakichkolwiek uprawnień do bazy danych. Wartość domyślna jest stosunkowo otwarta dla połączeń lokalnych, ale może być ograniczona do jawnej listy baz danych, nazw użytkowników i początków sieci.

  • Uprawnienia do publicznego , pseudo-rola, którą każdy ma. Użytkownik może niejawnie łączyć się tylko wtedy, gdy przyznane jest uprawnienie do łączenia PUBLIC. Zobacz Utworzony użytkownik może uzyskać dostęp do wszystkich baz danych w PostgreSQL bez żadnych dotacji . Baza danych może mieć wszystkie uprawnienia odebrane publicznie. Zobacz ODWOŁANIE w dokumencie dla głównej używanej wersji PostgreSQL.

  • Istnienie publicschematu. Domyślnie jest tworzony z bazą danych, ale nie jest to obowiązkowe. Zamiast usuwać uprawnienia publiczne ze publicschematu, DBA może po prostu porzucić publicschemat, gdy nowi użytkownicy nie powinni mieć żadnych niejawnych uprawnień.

W przypadku usunięcia tych wartości domyślnych, aby odczytać jedną tabelę, należy przyznać nowemu użytkownikowi:

GRANT CONNECT ON DATABASE dbname TO username;

Na poziomie bazy danych:

GRANT USAGE ON SCHEMA schemaname TO username;
GRANT SELECT ON schemaname.tablename TO username;
Daniel Vérité
źródło