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

Nelze zrušit roli, která je udělena pro připojení databáze

Při používání REASSIGN existují některé velmi neintuitivní požadavky na oprávnění .

Zjistil jsem, že když superuživatelský účet není k dispozici (jako v případě RDS nebo Cloud SQL), musím přidělit cílovou roli své aktuální roli, abych mohl přeřadit nebo zrušit vlastněné objekty z cílové role. Například pokud je můj aktivní uživatel postsgres a pokouším se odstranit user_a :

> DROP OWNED BY user_a
ERROR:  permission denied to drop objects
> GRANT user_a TO postgres;
GRANT ROLE
> DROP OWNED BY user_a;
DROP OWNED

Nyní je to trochu složitější, pokud user_a je náhodou členem postgres , zvláště pokud se stane, že toto členství zdědí prostřednictvím nějaké jiné role, nazvěme ji schema_admin ...

> DROP OWNED BY user_a
ERROR:  permission denied to drop objects
> GRANT user_a TO postgres;
ERROR:  role "user_a" is a member of role "postgres"

-- Alright, let's try to revoke it...
> REVOKE postgres FROM user_a;
REVOKE ROLE
> GRANT user_a TO postgres;
ERROR:  role "user_a" is a member of role "postgres"

-- It's still a member through the inherited grant - trying to revoke again doesn't work:
> REVOKE postgres FROM user_a;
WARNING:  role "user_a" is not a member of role "postgres"
REVOKE ROLE

-- So you have to identify the role it's inheriting from, and revoke that:
> REVOKE schema_admin FROM user_a;
REVOKE ROLE
> GRANT user_a TO postgres;
GRANT ROLE

-- Now just to be safe, I'll reassign owned objects before actually dropping everything:
> REASSIGN OWNED BY user_a TO postgres;
REASSIGN OWNED
> DROP OWNED BY user_a;
DROP OWNED
> DROP ROLE user_a;
DROP ROLE;

Voila!

Poznámka:Zde je další široce odkazovaná a účinná odpověď:https://sysadmintips.com/services/databases/postgresql-error-permission-denied-to-reassign-objects/ což funguje skvěle, pokud jste schopni vytvořit a přihlásit se jako nový dočasný uživatel. V některých kontextech je to však problém sám o sobě (a pak máte také další čištění, které musíte zvládnout odstraněním této dočasné role, když skončíte), takže jsem se tomu zde snažil vyhnout.




  1. Jak odstranit konkrétní znak z řetězce, pouze pokud je to první nebo poslední znak v řetězci.

  2. Jak zobrazit komentáře sloupce s operací desc

  3. Zkoumání různých způsobů šifrování dat MariaDB

  4. Vyberte X položek z každého typu