Mô hình cơ bản để tạo cơ sở dữ liệu với người dùng và nhóm là gì?


9

Tôi đang cố gắng tìm cách tốt nhất cho hệ thống bảo mật cơ bản cho trang web. Tôi biết tôi muốn người dùng và các nhóm.

Tôi nghĩ tôi có:

user_table
user_id
user_name
...

group_type
group_id
group_name
parent_id
...

group_table
id
user_id
group_id

Người đầu tiên là người dùng, người thứ hai là nhóm và người thứ ba là bảng trung gian kết nối hai người. Một người dùng có nhiều nhóm.

Nghe có ổn không?


Khác với tên. GROUP_TYPEBảng của bạn phải được đặt tên GROUPhoặc một cái gì đó tương tự, và bạn GROUP_TABLEnên tham khảo cả Người dùng và Nhóm, vì đó là những gì nó liên kết.
Adam Musch

@adam không group_table làm điều đó với user_id và group_id?
johnny

4
@AdamMusch Không nên đặt tên NHÓM, vì đó là một từ dành riêng. Các bảng và cột không bao giờ được đặt tên theo các từ dành riêng
Philᵀᴹ

1
@Phil đồng ý. Bạn cũng có thể đặt tên cho một bảng SELECTvà một trường FROMđể bạn có thể có một truy vấn nhưSELECT [FROM] FROM [SELECT]
JNK

2
Hãy thử gọi các thực thể cơ bản một cái gì đó như 'app_user' và 'app_role'
ConcernedOfTunbridgeWells

Câu trả lời:


17

Cách truyền thống để mô hình hóa điều này là sử dụng một mẫu gọi là Bảo mật dựa trên vai trò .

Ý tưởng không chỉ là có các nhóm người dùng, mà còn có các nhóm quyền. Đây là cách mô hình trông:

Bảo mật dựa trên vai trò ERD

Lưu ý rằng bạn muốn tránh các từ dành riêng cho tên bảng, vì vậy đừng đặt tên cho bảng của bạn chính xác như được hiển thị trong sơ đồ.

Cách thức hoạt động là các nhóm hoặc Vai trò của bạn không chỉ có một danh sách người dùng được gán cho họ mà còn có một danh sách các quyền được gán cho họ. Điều này cho phép bạn lái xe cả hai người có thể làm gì, nhưng họ cũng có thể làm gì, nếu bạn theo tôi.


Nhưng điều gì sẽ xảy ra nếu người dùng của tôi có một số vai trò như người quản lý hoặc bất cứ điều gì và vì một lý do nào đó, cùng một người dùng cũng cần một sự cho phép cụ thể (không thuộc vai trò đó, cũng không có vai trò nào khác)?
levi

@levi - Nếu điều đó xảy ra thì một cách để xử lý là tạo một vai trò đặc biệt như "Quyền đặc biệt của Bob" , đó là một chút của một loại bùn, nhưng nó giải quyết vấn đề miễn là bạn không có quá nhiều ngoại lệ như điều này. Có thể những gì bạn nghĩ là một ngoại lệ riêng lẻ thực sự có thể là một vai trò mới tinh tế mà bạn chưa xem xét. Điều gì xảy ra khi Bob bỏ cuộc? Có phải sự thay thế của Bob cũng cần sự cho phép đặc biệt đó? Nếu vậy thì bạn thực sự có một vai trò với một thành viên, không phải là một ngoại lệ.
Joel Brown

@levi - Một khả năng khác là bạn thực sự cần phải có sự pha trộn giữa quyền cá nhân và vai trò. Trong trường hợp đó, ROLEbảng của bạn có thể được chia thành các loại Cá nhânNhóm , trong đó loại nhóm có 0 cho nhiều thành viên và loại riêng lẻ có chính xác một thành viên. Làm thế nào bạn thực thi các quy tắc cardinality là tùy thuộc vào bạn. Nó có thể được thực hiện khai báo trong lược đồ cơ sở dữ liệu của bạn, trong trường hợp đó bạn cần thay đổi lược đồ hình một chút. Hoặc bạn có thể sử dụng logic ứng dụng, trong trường hợp đó lược đồ của bạn vẫn trông giống như những gì tôi đã hình dung ở trên.
Joel Brown
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.