sql >> Databáze >  >> RDS >> PostgreSQL

Uživatelská oprávnění PostgreSQL

V PostgreSQL je vše postaveno na konceptu role .

Při první instalaci PostgreSQL na macOS skript vytvořil roli s vaším uživatelským jménem macOS , se seznamem udělených oprávnění.

V PostgreSQL nejsou žádní uživatelé, pouze role .

Spuštěním psql postgres ve svém terminálu se automaticky přihlásíte svým uživatelským jménem macOS do PostgreSQL, čímž získáte přístup k vytvořené roli.

V mém případě flaviocopes role byla vytvořena a mohu ji zobrazit pomocí \du příkaz:

Vidět? Mám následující atributy rolí ve výchozím nastavení:

  • Superuser
  • Create role
  • Create DB
  • Replication
  • Bypass RLS

a nejsem členem žádné jiné role (více o tom později)

Vytvoření nové role

Nová role se vytvoří pomocí CREATE ROLE příkaz:

CREATE ROLE <role>;

Například:

CREATE ROLE testing;

Máme novou roli s Cannot login atribut role. Náš nově vytvořený uživatel se nebude moci přihlásit.

Můžete to zkusit zadáním \q a poté psql postgres -U testing , ale zobrazí se tato chyba:

K vyřešení tohoto problému musíme přidat LOGIN atribut role při vytváření:

CREATE ROLE <role> WITH LOGIN;

Pokud tuto roli odebereme pomocí:

DROP ROLE <role>;

a přidejte WITH LOGIN tentokrát:

DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;

Vidíme, že testing role se může přihlásit, protože nemáme Cannot login atribut role tentokrát:

Zkuste to přidáním příkazu \q pro ukončení a poté psql postgres -U testing :

Všimněte si, že výzva změněno z =# na => protože nemáme Superuser atribut role now.

Přidání hesla k roli

V předchozím CREATE ROLE příkaz vytvořili jsme roli bez hesla. Samozřejmě je velmi důležité mít (zabezpečená) hesla. Heslo můžete přidat pomocí PASSWORD klíčové slovo:

CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';

VYTVOŘIT UŽIVATELE

Alternativní způsob, jak definovat role pomocí LOGIN atribut automaticky přidaný (účinně vytváří uživatele, kteří se mohou přihlásit) je použít CREATE USER :

CREATE USER <role> PASSWORD '<password>';

Přidání atributu role k roli

Atribut role lze k roli přidat později pomocí ALTER ROLE příkaz.

Předpokládejme, že jsme vytvořili roli bez atributu LOGIN:

CREATE ROLE <username> PASSWORD '<password>';

Můžeme jej přidat pomocí:

ALTER ROLE <role> WITH LOGIN;

Vestavěné atributy rolí

Viděli jsme LOGIN role, aby se role mohla přihlásit.

Jaké jsou ale další vestavěné atributy rolí, které můžeme použít?

  • LOGIN / NOLOGIN :povolit (nebo ne) přihlásit se k PostgreSQL
  • SUPERUSER / NOSUPERUSER :povolit (nebo nepovolit) oprávnění superuživatele. Superuživatel databáze obejde ostatní kontroly oprávnění, kromě LOGIN (musí být uděleno samostatně).
  • CREATEDB / NOCREATEDB :povolit (nebo ne) možnost vytvářet nové databáze
  • CREATEROLE / NOCREATEROLE :umožňuje (nebo ne) možnost vytvářet nové role
  • CREATEUSER / NOCREATEUSER :povolit (nebo nepovolit) možnost vytvářet nové uživatele
  • INHERIT / NOINHERIT :povolit (nebo nepovolit) možnost dědit oprávnění
  • REPLICATION / NOREPLICATION :udělit (nebo neudělit) oprávnění k replikaci (pokročilé téma, kterému se nebudeme věnovat)

Skupinové role

V PostgreSQL nejsou žádné skupiny uživatelů.

Místo toho můžete vytvořit role s určitými oprávněními a pak tyto role udělit jiným rolím.

Role zdědí oprávnění rolí, která jim byla udělena, pokud mají tyto role atribut ZDĚDĚT.

Vytvořte skupinovou roli

Chcete-li vytvořit skupinovou roli, zadejte

CREATE ROLE <groupname>;

Syntaxe je stejná jako při vytváření role.

Jakmile je skupinová role vytvořena, můžete do skupinové role přidat role pomocí GRANT :

GRANT <groupname> TO <role>

Můžeme například vytvořit flavio uživatelská role, skupinová role „zaměstnanec“ a přiřazení uživatele ke skupinové roli:

CREATE USER flavio PASSWORD 'superSecret123$';
CREATE ROLE employee;
GRANT employee TO flavio;

Roli můžete odebrat ze skupinové role pomocí:

REVOKE <groupname> FROM <username>

Příklad:

REVOKE employee FROM flavio;

Atributy role skupiny

Ve výchozím nastavení ne přidání role do skupinové role aby role dědila atributy (oprávnění) ze skupinové role.

Skupinovou roli musíte vytvořit pomocí INHERIT atribut.

Předpokládejme, že vytvoříte roli skupiny zaměstnanců a přiřadíte jí CREATEDB atribut:

CREATE ROLE employee WITH CREATEDB INHERIT;

Nyní vytvořte novou roli pomocí INHERIT :

CREATE ROLE flavio;
GRANT employee TO flavio;


  1. Jak migrovat úlohy serveru SQL z jedné instance serveru SQL Server do druhé

  2. Chyba 1046 Není vybrána žádná databáze, jak vyřešit?

  3. Průměrná data v oracle sql

  4. Převod Long na Varchar2