2009-09-13 21 views
7

Tôi có bản ghi (Địa chỉ liên hệ, Địa chỉ, v.v.) mà có thể truy cập được vào bất kỳ nội dung nào sau đây (bao gồm kết hợp, ví dụ 2 nhóm và 4 cá nhân):Quyền truy cập bản ghi cơ sở dữ liệu dạng hạt (ví dụ: Nhóm "X" & Cá nhân "Smith" có thể xem Bản ghi Z)

  • Mọi người
  • các thành viên của nhiều nhóm/Sở
  • thành viên của một nhóm đơn/cục
  • nhiều cá nhân
  • Cá nhân đơn lẻ

Cấu trúc cơ sở dữ liệu tốt để nhận ra điều này là gì? Về cơ bản trong ứng dụng của tôi, tôi cần có khả năng hạn chế khi người dùng XYZ đăng nhập chỉ hiển thị cho anh ta những bản ghi "có thể xem" đối với anh ta như một cá nhân, thành viên của nhóm hoặc vì họ hiển thị với tất cả mọi người.

Về cơ bản, tôi đang tìm cách lưu trữ hiệu quả các mối quan hệ này. Nó phải nhanh như tôi sẽ xem xét các mối quan hệ mỗi lần bất cứ ai nhìn vào bất cứ điều gì.

Tôi thực sự đánh giá cao một số gợi ý về cách thực hiện việc này!

Cảm ơn bạn!

Chỉnh sửa: Tôi đang sử dụng SQL Server 2008 Web Edition.

+0

Bạn đã giải quyết được sự cố này? Tôi có vấn đề rất giống nhau và nó sẽ là tốt đẹp nếu bạn có thể nói như thế nào bạn giải quyết nó. Cảm ơn! – Orbitum

Trả lời

4

Điều này đang lảo đảo theo hướng RBAC - kiểm soát truy cập dựa trên vai trò. Bạn cũng có thể thắc mắc về việc có nên sử dụng điều khiển truy cập dựa trên nhãn LBAC hay không. Và, tùy thuộc vào DBMS của bạn, có thể có những cách khác để đạt được nó (xem xét Oracle VPD - cơ sở dữ liệu riêng ảo - ví dụ). Tất cả điều này là DBMS cụ thể hoặc rất cụ thể - các giải pháp khác nhau cho các DBMS khác nhau.

Dường như bạn đang nói về kiểm soát ở cấp độ hàng. Nghĩa là, một hàng trong bảng liên lạc có thể truy cập được với tất cả mọi người, trong khi một hàng khác chỉ có thể truy cập vào một bộ phận, một nhóm khác chỉ có thể truy cập vào một nhóm người, v.v.

Hãy nhớ rằng DBMS quan hệ hoạt động tốt nhất với các bộ. Một nhóm duy nhất là một nhóm các nhóm với một nhóm thành viên; một người dùng là tập hợp các nhóm với một người dùng thành viên. Điều này có nghĩa là chúng tôi có ít trường hợp hơn để giải quyết.

Nếu bạn muốn thực hiện nó trong SQL tiêu chuẩn, thì tôi nghĩ bạn sẽ cần phải sử dụng kết hợp các khung nhìn khai thác các kết nối với bảng điều khiển, vv Các phần cứng với hệ thống như vậy đang đặt các bảng điều khiển và hạn chế người dùng quản trị (thực ra, quản trị viên hạn chế luôn là một trong những phần cứng).

Kỹ thuật cơ bản sẽ là:

  • Tạo bảng cơ sở với một cột thích hợp để xác định các thiết lập đặc quyền mà áp dụng cho mỗi hàng trong bảng.
  • Thu hồi tất cả quyền truy cập công khai vào bảng.
  • Tạo chế độ xem trên bảng cơ sở hiển thị tất cả các cột từ bảng cơ sở được phép. Nó sẽ là một khung nhìn kết nối với một bảng điều khiển, được định nghĩa trong giây lát. Các điều kiện truy vấn xem cũng sẽ được điều chỉnh bởi người dùng hiện tại.
  • Cấp quyền truy cập thích hợp cho chế độ xem.
  • Tạo các trình kích hoạt INSTEAD OF phù hợp trên giao diện để xử lý chèn, xóa và cập nhật các thao tác trên khung nhìn, chuyển tiếp các thay đổi tới bảng cơ sở.
  • Tạo bảng điều khiển để kết hợp với bảng cơ sở.
  • Điền dữ liệu đó vào dữ liệu thích hợp.
  • Giấy cảm ứng màu xanh nhạt và đứng lưng lại.

Bây giờ, về điều đó khi tham gia cột và bảng điều khiển ...

Ai đó phải xác định những điều khoản áp dụng đối với hàng mới được chèn vào trong bảng - truy cập mặc định cung cấp là gì. Và ai đó phải xác định cách truy cập mặc định có thể bị ghi đè. Cả hai đều có thể lộn xộn.

Có một số cách để cấu trúc bảng điều khiển:

  1. Một cơ chế dựa trên mỗi hàng trong bảng cơ sở có một ID duy nhất (mà có thể là một ID được tạo ra tự động hoặc chỉ giá trị của khóa chính). Bảng điều khiển sau đó bao gồm một bản sao của ID duy nhất đó và xác định người dùng hoặc nhóm nào có thể truy cập nó. Điều này có nghĩa là có thể có nhiều mục nhập trong bảng điều khiển cho một hàng nhất định, một cho mỗi người dùng hoặc nhóm có thể truy cập hàng. Trong lược đồ này, bảng điều khiển có khóa ngoài tham chiếu đến bảng cơ sở.

  2. Cơ chế khác nhúng số ID vào bảng cơ sở là khóa ngoài cho (các) bảng điều khiển. Về cơ bản nó xác định một tập các đặc quyền, và tham chiếu trong bảng cơ sở có nghĩa là hàng có quyền truy cập được kết hợp với ID điều khiển truy cập. Cấu trúc phía sau bảng điều khiển có thể là ID 0 không có quyền truy cập cho bất kỳ ai (thông qua chế độ xem), ID 1 có quyền truy cập cho mọi người và các giá trị khác chỉ định kết hợp người dùng và nhóm - mỗi kết hợp khác nhau có ID khác nhau. Với điều này, có thể có một vài bảng trong bộ bảng điều khiển - và chúng tôi cũng đang thảo luận về việc có một bộ các bảng điều khiển này cho mỗi bảng được bảo vệ.

Rõ ràng, việc truy cập vào bảng điều khiển bị hạn chế nghiêm trọng - nhưng cũng rất quan trọng đối với việc quản lý ai có thể xem nội dung gì.

Cả hai đều là những cơn ác mộng hành chính - đó là lý do tại sao bạn có thể kết thúc với một cơ chế kiểm soát truy cập do DBMS cung cấp chứ không phải là một giải pháp SQL chung.

+0

Cảm ơn bạn rất nhiều vì bài viết chi tiết của bạn! Về kiểm soát truy cập DBMS cung cấp: Tôi đang sử dụng SQL Server 2008 Web Edition. Nó có bất cứ thứ gì được tích hợp để làm những gì tôi cần làm không? – Alex

0

Tôi đồng ý với Jonathon về kỹ thuật nhưng không nhất thiết phải về cơn ác mộng.Tôi đã thực hiện điều này với một cái nhìn duy nhất của một liên minh quyền dựa trên:

  • người tạo bản ghi cơ sở
  • các đơn vị kinh doanh chỉ trên hồ sơ cơ sở
  • ad hoc nhóm người sử dụng ghi trên kỷ lục cơ sở
  • bộ phận nội bộ ghi trên kỷ lục cơ sở
  • tài trợ quảng cáo đặc biệt để người dùng cá nhân
  • Administrati có vai trò

Hiệu suất tốt, tin hay không, mặc dù bảng cơ sở không bao giờ lớn hơn 250K bản ghi ... rõ ràng, một bảng cơ sở lớn hơn có thể yêu cầu thiết kế phức tạp hơn. Nhưng trong trường hợp của chúng tôi, nó hoạt động tốt và việc quản lý không phải là vấn đề lớn. Việc chỉ định nhóm được tạo bởi và người dùng đặc biệt là các quy tắc duy nhất được sử dụng trên bất kỳ loại quy mô rộng nào. Việc chỉ định/thu hồi quyền truy cập vào các nhóm là một nhiệm vụ đang diễn ra, nhưng một nhiệm vụ đi kèm với lãnh thổ.

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