2010-01-08 25 views
7

Có thể với Postgresql để tạo cơ sở dữ liệu có 2 người dùng hoạt động như chủ sở hữu cơ sở dữ liệu không?Hai chủ sở hữu của cùng một cơ sở dữ liệu PostgreSQL

Tôi có thể tạo vai trò nhóm và thêm cả người dùng vào nhóm đó, sau đó đặt nhóm làm chủ sở hữu cơ sở dữ liệu, nhưng điều này yêu cầu cả hai người dùng phải đặt thủ công vai trò của họ trên mọi kết nối để tạo bất kỳ bảng nào đã tạo được quyền truy cập cho người dùng khác. Có cách nào để làm cho nhóm trở thành vai trò mặc định cho người dùng mỗi khi họ đăng nhập hay bất kỳ cách nào khác để đạt được điều tương tự?

Trả lời

10

Không, mỗi cơ sở dữ liệu chỉ có thể có một chủ sở hữu. Như đã nói trước đây, bạn có thể có nhiều hơn một superuser, hoặc bạn có thể cấp quyền cụ thể cho các nhóm được thừa kế.

Bạn có thể muốn xem http://blog.hagander.net/archives/70-Faking-the-dbo-role.html, để tìm cách giả mạo nội dung nào đó tương tự với nội dung bạn đang yêu cầu. Nó không hoàn hảo, nhưng nó có thể đủ tốt cho bạn. Nó sẽ có thể giải quyết vấn đề quyền sở hữu đối tượng ít nhất.

+0

Có, điều đó dường như làm những gì tôi muốn. Bất kỳ tác động an ninh nào khi làm việc theo cách này mà bạn có thể nghĩ đến? –

+0

Không, điều đó sẽ ổn thôi. Tôi giả sử rằng nếu bạn làm cho họ quản trị viên, họ được tin tưởng không cố ý phá vỡ mọi thứ. Giống như, người dùng vẫn có thể hoàn nguyên vai trò của mình với vai trò ban đầu nếu anh ta có mục đích xấu. –

4

Ah, tìm thấy nó: "vai trò thành viên có các thuộc tính kế thừa tự động có sử dụng đặc quyền của vai trò mà họ là thành viên của" PostgreSQL Docs: Chapter 20. Database Roles and Privileges

CREATE ROLE joe LOGIN INHERIT; 
CREATE ROLE admin NOINHERIT; 
GRANT admin TO joe; 

"Ngay sau khi kết nối như vai trò joe, một phiên cơ sở dữ liệu sẽ phải sử dụng các đặc quyền được cấp trực tiếp đến joe cộng với bất kỳ đặc quyền cấp cho admin, vì joe 'thừa hưởng' đặc quyền admin."

+0

Đúng, nhưng bảng được tạo bởi joe thuộc sở hữu của joe chứ không phải quản trị viên, điều đó có nghĩa là bất kỳ người dùng nào khác trong nhóm không có quyền truy cập vào chúng. –

+0

Nhưng bạn có thể có 'quản trị' với quyền làm tất cả mọi thứ trên tất cả các bảng, trong đó sẽ bao gồm các bảng được tạo bởi người dùng khác trong nhóm. – Timothy

+0

Nhưng bạn vẫn phải tự đặt vai trò quản trị cho mỗi kết nối bạn thực hiện với người dùng phải không? –