2011-12-13 33 views
21

Từ the PostgreSQL docs:Tại sao PostgreSQL hợp nhất người dùng và nhóm thành các vai trò?

Khái niệm vai trò áp dụng khái niệm "người dùng" và "nhóm". Trong phiên bản PostgreSQL trước 8.1, người dùng và nhóm là các loại riêng biệt của các thực thể, nhưng bây giờ chỉ có vai trò. Bất kỳ vai trò nào cũng có thể đóng vai trò là người dùng, một nhóm hoặc cả hai.

Tại sao họ thực hiện thay đổi này trong 8.1?

Có lẽ nó dễ dàng hơn từ quan điểm lập trình C, với một lớp Vai trò duy nhất (cấu trúc)?

More details:

CREATE USER is equivalent to CREATE ROLE except that CREATE USERcho phép đăng nhập vào user/vai trò.

(Tôi về để thiết kế một hệ thống cho phép cho webapp của tôi, vì thế tôi quan tâm đến việc này.)

Trả lời

27

Hợp nhất có nhiều lợi thế và không có bất lợi. Ví dụ: giờ đây bạn có thể chuyển đổi liền mạch "người dùng" thành "nhóm" và ngược lại bằng cách thêm/xóa đặc quyền LOGIN.

ALTER ROLE myrole LOGIN; 
ALTER ROLE myrole NOLOGIN; 

Hoặc bạn có thể GRANT thành viên trong bất kỳ đăng nhập khác ("user") hoặc vai trò không đăng nhập ("nhóm") vào một vai trò:

GRANT joe TO sue; 

Bạn vẫn có thể:

CREATE USER james; 

Bây giờ chỉ là role with login privilege. Hoặc:

CREATE GROUP workers; 

Đó là hiệu quả the same as CREATE ROLE ngay bây giờ.

manual có tất cả.

3

Từ manual:

Chuẩn SQL định nghĩa các khái niệm của người sử dụng và vai trò, nhưng nó coi chúng là các khái niệm khác biệt và để lại tất cả các lệnh xác định người dùng được chỉ định bởi từng triển khai cơ sở dữ liệu. Trong PostgreSQL , chúng tôi đã chọn để hợp nhất người dùng và vai trò thành một loại thực thể duy nhất. Vai trò do đó có nhiều thuộc tính tùy chọn hơn so với tiêu chuẩn .

+2

này không thực sự trả lời * tại sao * mặc dù ... –

+0

Đó là một cái gì đó bạn nên yêu cầu các tin tặc đã làm điều đó, không phải một số diễn đàn như SO. –

+0

Đủ công bằng :) Chỉ cần nói đó là cách tôi đọc câu hỏi. –

3

Có sự phân biệt giữa người dùng và nhóm không giúp bạn đạt được điều gì.

AFAIK động lực để thay đổi đó là để đơn giản hóa công dụng như:

  • Một người dùng giả mạo khác, ví dụ như một superuser mô phỏng một người sử dụng cho phép giảm.Với vai trò thống nhất, điều này sẽ trở thành một thay đổi khác của vai trò hiện tại, không khác với việc thay đổi nhóm chính.

  • Nhóm là thành viên của các nhóm khác để triển khai quyền truy cập chi tiết.

Nếu bạn muốn biết chi tiết, tuy nhiên, bạn tốt nhất nên kiểm tra ra các tài liệu lưu trữ của danh sách pgsql-hacker cho giai đoạn này, và lịch sử git (quy đổi từ CVS).

+0

Cảm ơn bạn đã đề xuất các lưu trữ của danh sách pgsql-hacker. Tôi đã tìm thấy một chủ đề có liên quan và đã thêm một câu trả lời khác cho câu hỏi này. – KajMagnus

5

Tôi đã tìm thấy this thread in the PostgreSQL-Hackers list, từ ngày 6 tháng 6 năm 2003, rằng cuối cùng cho thấy rằng người dùng và nhóm và vai trò được hợp nhất. (Cảm ơn Craig Ringer vì đã đề nghị tôi kiểm tra lưu trữ danh sách pgsql-hacker.)

Dưới đây là một số lợi ích được đề cập (những thứ tôi tìm thấy).

cho phép các nhóm để có các nhóm như thành viên

mã ACL sẽ được đơn giản hóa

GRANT/REVOKE cú pháp và định dạng hiển thị cho danh sách ACL có thể đơn giản, vì có muốn được không cần cho một dấu hiệu cú pháp là cho dù một tên đã cho là một người dùng hay một nhóm.

Trong một số trường hợp tôi có thể nhìn thấy nó làm cho tinh thần để cho phép khai thác gỗ trong trực tiếp như một nhóm/vai trò/whatchacallit

Điều này cũng sẽ giải quyết được vấn đề mà INFORMATION_SCHEMA quan điểm sẽ hiển thị đối tượng chỉ thuộc sở hữu

[ làm cho nó dễ dàng hơn để] đặc quyền đại diện cấp cho nhóm [kể từ bạn muốn chỉ đơn giản là tái sử dụng vai trò mã liên quan?]

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