2015-02-18 18 views
25

Tùy chọn/lừa grant Tôi cần cung cấp cho người dùng hiện tại ("userA") để cho phép anh ta thay đổi chủ sở hữu của đối tượng thuộc về bởi một người dùng khác ("userC")?Postgresql: lỗi "phải là chủ sở hữu của quan hệ" khi thay đổi đối tượng chủ sở hữu

Chính xác hơn, các xúc bảng thuộc sở hữu của userC và khi tôi thực hiện các truy vấn sau đây cho việc thay đổi chủ sở hữu để các userB, kết nối với các userA:

alter table contact owner to userB; 

Tôi gặp lỗi này:

ERROR: must be owner of relation contact 

Nhưng userA có tất cả các quyền cần thiết để làm điều đó thường (các "tạo ra trên giản đồ" tùy chọn cấp nên là đủ):

grant select,insert,update,delete on all tables in schema public to userA; 
grant select,usage,update on all sequences in schema public to userA; 
grant execute on all functions in schema public to userA; 
grant references, trigger on all tables in schema public to userA; 
grant create on schema public to userA; 
grant usage on schema public to userA; 

Thks


dòng lệnh đầu ra:

[email protected]:~# psql -U userA myDatabase 
myDataBase=>\dt contact 
    List of relations 
Schema | Name | Type | Owner 
-------+---------+----------+--------- 
public | contact | table | userC 
(1 row) 
myDataBase=> 
myDataBase=>alter table contact owner to userB; 
ERROR: must be owner of relation public.contact 
myDataBase=> 

Trả lời

44

Nhờ nhận xét của Mike, tôi đã đọc lại tài liệu và tôi đã nhận ra rằng người dùng hiện tại của tôi (aka. UserA đã có đặc quyền tạo đặc quyền) không phải là thành viên trực tiếp/gián tiếp sở hữu cổ phiếu vai trò mới ...

Vì vậy, các giải pháp khá đơn giản, tôi vừa thực hiện cấp này:

grant userB to userA; 

Đó là tất cả dân gian ;-)


Cập nhật:

yêu cầu khác là đối tượng phải được sở hữu bởi người dùng userA trước khi thay đổi nó ...

+0

vấn đề này xảy ra khi chúng tôi đang sử dụng sai người dùng để thực hiện hành động như cập nhật/xóa.Tôi đã phải đối mặt với vấn đề này coz tôi đã sử dụng sai người dùng để làm DMLs.when tôi đã chọn đúng người dùng, vấn đề đã được giải quyết.Ngoài ra nếu bạn cấp đặc quyền DML cho người dùng hiện tại, vấn đề này sẽ được giải quyết. – Ankur

+0

Chỉ muốn đề cập rằng nếu bất kỳ người dùng nào phân biệt chữ hoa chữ thường, nó sẽ được trích dẫn. Ví dụ: cấp "UserB" cho userA -> trong trường hợp đó người dùng đầu tiên phân biệt chữ hoa chữ thường – guival

6

Từ the fine manual.

You must own the table to use ALTER TABLE.

Hoặc là một siêu người dùng cơ sở dữ liệu.

ERROR: must be owner of relation contact

Thông báo lỗi PostgreSQL thường được phát hiện. Điều này là tại chỗ trên.

+0

Các doc là nhiều sắc thái: _You * phải sở hữu bàn * để sử dụng ALTER BÀN. [...] Để thay đổi chủ sở hữu, bạn * cũng phải là thành viên trực tiếp hoặc gián tiếp của vai trò sở hữu mới * và vai trò đó phải có đặc quyền CREATE trên lược đồ của bảng._ => người dùng đích (aka. UserB) đã tạo priv. trên lược đồ nhưng người dùng hiện tại của tôi (aka. userA) không phải là thành viên gián tiếp của vai trò mới. Cảm ơn Mike đã khai sáng cho tôi! – gudepier

Các vấn đề liên quan