it-swarm-eu.dev

Vytvořený uživatel má přístup ke všem databázím v PostgreSQL bez jakýchkoli dotací

Co se týče nastavení PostgreSQL, něco mi chybí. Chtěl bych vytvořit více databází a uživatelů, kteří jsou od sebe izolováni, takže konkrétní uživatel má přístup pouze k databázím, které určím. Z toho, co mohu zjistit, však má každý vytvořený uživatel přístup ke všem databázím bez udělení konkrétních grantů.

Co dělám na Ubuntu Serveru 12.04:

  1. apt-get install postgresql
  2. Sudo -u postgres createuser -DRSP mike1 (Zadání hesla pro nového uživatele)
  3. Sudo -u postgres createdb data1
  4. psql -h localhost -U mike1 data1 (Určuje heslo pro přihlášení uživatele mike1)

Zdá se, že nový uživatel „mike1“ nemá problém s připojením k databázi „data1“ a vytvářením tabulek atd. A to bez spuštění jakéhokoli příkazu GRANT (a vlastník „data1“ je „postgres“, protože jsem nezadal vlastník v kroku 3). Opravdu to tak funguje?

Chtěl bych udělit úplný přístup k datům1 a poté to opakovat pro více uživatelů a databází, ujistěte se, že uživatelé mají přístup pouze k jedné (nebo možná několika) databázím podle mého výběru.

45
mikeplate

Na úrovni SQL se každý uživatel může skutečně připojit k nově vytvořené databázi, dokud nebude vydán následující příkaz SQL:

REVOKE connect ON DATABASE database_name FROM PUBLIC;

Po dokončení musí být každému uživateli nebo roli, která by se měla připojit, třeba výslovně udělit oprávnění pro připojení:

GRANT connect ON DATABASE database_name TO rolename;

Úpravy: V případě více nájemců by bylo odstraněno více než jen oprávnění connect. Chcete-li získat tipy a osvědčené postupy pro více nájemců, můžete si přečíst na veřejné wiki postgresql: Hosting sdílených databází a Správa práv v PostgreSQL .

47
Daniel Vérité

PUBLIC má ve výchozím nastavení přístup k databázi, ale nemůže k datům přistupovat. VYPLATIT VEŘEJNOST:

REVOKE CONNECT ON DATABASE your_database FROM PUBLIC;

Pokud chcete toto nastavení pro všechny budoucí databáze, zrušte CONNECT v databázi template1 (výchozí databáze šablon pro vytvoření nové databáze):

REVOKE CONNECT ON DATABASE template1 FROM PUBLIC;
24
Frank Heikens

Kromě odvolání oprávnění pro připojení z PUBLIC ve výchozím nastavení a udělení podle potřeby je další úroveň, na které můžete řídit přístup, přes soubor pg_hba.conf.

Kde je soubor uložen, najdete:

SHOW hba_file;

Pokud se rozhodnete tento mechanismus použít, jsou zde vložené komentáře, které vám mohou začít dostačovat. Dokumenty jsou zde:

http://www.postgresql.org/docs/current/interactive/auth-pg-hba-conf.html

4
kgrittn

Narazil jsem na toto vlákno a hledal způsob, jak zabránit uživatelům v uvádění dalších názvů databází. The REVOKE CONNECT tomu nezabrání.

Podle odpovědí na to SO otázka neexistuje (doporučený) způsob, jak toho dosáhnout.

0
AdamAL