PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Không thể bỏ vai trò được cấp để kết nối cơ sở dữ liệu

Có một số yêu cầu cấp phép rất không trực quan khi sử dụng REASSIGN .

Tôi nhận thấy rằng khi không có tài khoản siêu người dùng (như trong trường hợp RDS hoặc Cloud SQL), tôi phải cấp vai trò đích cho vai trò hiện tại của mình để gán lại hoặc loại bỏ các đối tượng được sở hữu khỏi vai trò đích. Ví dụ:nếu người dùng đang hoạt động của tôi là postsgres và tôi đang cố xóa 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

Bây giờ, nó trở nên phức tạp hơn một chút nếu user_a tình cờ là thành viên của postgres , đặc biệt nếu tình cờ kế thừa tư cách thành viên đó thông qua một số vai trò khác, hãy gọi nó là 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;

Thì đấy!

Lưu ý:Có một câu trả lời hiệu quả và được tham khảo rộng rãi ở đây:https://sysadmintips.com/services/databases/postgresql-error-permission-denied-to-reassign-objects/ hoạt động tốt, miễn là bạn có thể tạo và đăng nhập với tư cách là người dùng tạm thời mới. Tuy nhiên, trong một số ngữ cảnh, bản thân đó cũng là một vấn đề (và sau đó bạn cũng phải dọn dẹp thêm để xử lý việc xóa vai trò tạm thời đó khi bạn hoàn thành), vì vậy tôi đã cố gắng tránh điều đó ở đây.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đẩy một đối tượng JSON vào một mảng lồng nhau trong một cột JSONB

  2. Làm cách nào để xuất bảng dưới dạng CSV với các tiêu đề trên Postgresql?

  3. Ký tự dòng mới của PostgreSQL

  4. NHẬN CHẨN ĐOÁN với câu lệnh SAO CHÉP trong hàm Pl / pgsql

  5. Làm cách nào để lấy một cột có các số liên tiếp, tăng dần mà không bị thiếu số nào?