PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Не може да се премахне роля, която е предоставена за свързване на база данни

Има някои много неинтуитивни изисквания за разрешение при използване на REASSIGN .

Открих, че когато акаунтът на суперпотребител не е наличен (както в случая с RDS или Cloud SQL), трябва да предоставя целевата роля на текущата си роля, за да превъзлагам или премахвам притежавани обекти от целевата роля. Например, ако активният ми потребител е postsgres и се опитвам да премахна 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

Сега става малко по-сложно, ако user_a случайно е член на postgres , особено ако се случи да наследи това членство чрез друга роля, нека го наречем 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;

Готово!

Забележка:Тук има друг широко използван и ефективен отговор:https://sysadmintips.com/services/databases/postgresql-error-permission-denied-to-reassign-objects/ което работи чудесно, стига да можете да създадете и да влезете като нов временен потребител. Въпреки това, в някои контексти това е проблем само по себе си (и тогава вие също трябва да се справите с допълнителното почистване, за да премахнете тази временна роля, когато сте готови), така че се опитах да избегна това тук.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предаване на списък с параметри към SQL в psycopg2

  2. Импортиране на шейп файлове в postgresql в linux с помощта на pgadmin 4

  3. ISO8601 най-добрият формат за дата ли е за PostgreSQL jsonb, когато искам да филтрирам по дата?

  4. postgres пълнотекстово търсене като оператор

  5. Бързо намиране на близки потребители с помощта на PostGIS