Xin chào các Bạn,
"Làm sao từng user chỉ sửa được những gì mình nhập?" là quan tâm của rất nhiều người khi thiết kế các ứng dụng với Microsoft Access. Sau đây, tôi xin trao đổi một số gợi ý về vấn đề này:
Bản thân Microsoft Access không có cơ chế bảo mật đáp ứng được hoàn toàn nhu cầu trên.
Xin gợi ý cách làm như sau:
1. Trước hết phải dùng chức năng phân quyền có sẵn của MS. Access để áp dụng các giới hạn truy xuất đến các bảng dữ liệu. Sau đó, phải cho "ẩn mặt" file hệ thống có ghi group và user của MS. Access (mặc định tên là system.mdw). Khi đó, để chạy ứng dụng ta phải viết 1 file chạy để chỉ định cho Access khởi động ứng dụng với file hệ thống này.
Và việc cũng cần làm là: phải dịch file ứng dụng sang MDE trước khi cho phát hành sử dụng trên hệ thống. Việc này nhằm ngăn chặn không cho user sửa và xem các form, report, module đã thiết kế.
Mục đích của việc trên là không cho user thoải mái open hoặc import / export trực tiếp các bảng dữ liệu này.
Nên tạo từng nhóm user (Group) với các giới hạn truy xuất cụ thể, để thuận tiện khi áp dụng giới hạn cho các user.
2. Tạo 1 bảng dữ liệu thuộc dạng "Msys" hoặc "Usys" để đăng ký các thẩm quyền truy xuất dữ liệu cụ thể cho từng đối tượng của ứng dụng (table, form, report), đồng thời quy định thẩm quyền truy xuất bảng dữ liệu này chỉ dành toàn quyền riêng cho người quản trị, các user khác chỉ có quyền đọc record dành riêng cho mình.
Do vậy, khi thiết kế các bảng dữ liệu Bạn phải có 1 field để theo dõi user nào là người đã tạo ra từng record, và mỗi khi 1 record mới được chèn vào bảng dữ liệu (After_Insert Event) ứng dụng của Bạn phải cho đăng ký user hiện hành vào field này. Ta có thể dùng thuộc tính "Defaul Value" của filed để chèn tự động giá trị vào field này với khai báo Default Value = CurrentUser().
Sau đây là một cấu trúc đề nghị:
- Tên bảng: UsysPhanquyen
- Gồm các trường (Fields):
+ ObjectName (Text): đăng ký tên các đối tượng cần quản lý
+ Group (Text): đăng ký tên nhóm user được phân quyền
+ User (Text): đăng ký tên user được phân quyền (chỉ đăng ký rong trường hợp cần áp dụng riêng ngoài các giới hạn chung áp dụng cho Group)
+ RO (boolean): thẩm quyền chỉ đọc
+ EDIT (boolean): thẩm quyền được hiệu chỉnh dữ liệu
+ DELETE (boolean): thẩm quyền được xoá
+ FULL (boolean): có toàn quyền
3. Cách áp dụng: với các tác vụ truy xuất đối tượng trong ứng dụng ta sẽ cho kiểm tra khi có sự kiện mở đối tượng (Open Event) bằng Open_Event, trong đó:
+ Dò tìm thẩm quyền của User tương ứng với đối tượng đã được đăng ký trong bảng "UsysPhanquyen" nêu trên, nếu thoả thì mới cho mở, bằng không thì ngăn lại.
+ Xin gợi ý: hàm để xác định user đang làm việc trong phiên hiện hành là: CurrentUser()
Ví dụ minh hoạ: đính kèm file tải về từ link:
http://www.mediafire.com/download.php?kb30w1t59vt7jk3 như một gợi ý để các Bạn tham khảo nhé. Do chỉ là gợi ý nên chỉ mang tính sơ lược.
1. Ứng dụng (là mdb của MS. Access 2003) được tổ chức với file data đặt riêng bên trong folder DATA (là folder con của Folder ứng dụng)
2. Đây là ứng dụng đã được set level security, nên xin khởi động ứng dụng bằng RunMyApp.mdb với Account như sau:
+ Name: qtv với Password: quantrivien
+ Name: nv1 với Password: nv1
+ Name: nv2 với Password: nv2
3. Xin thông tin thêm: bên trong ứng dụng, cái nào bằng tiếng Anh là nguyên bản của Microsoft, còn tiếng Việt là do tôi "chế" thêm theo gợi ý bên trên.
4. Các Bạn cũng có thể tham khảo thêm tài liệu của Microsoft về Bảo mật trong MS. Access tại link sau:
http://support.microsoft.com/?id=165009