[Vba] Kiểm tra user đã đăng xuất chưa
Em có viết 1 ứng dụng trên ms Access Form kết nối đến sql server trọng mạng nội bộ. Hiện tại em muốn thêm 1 chức năng kiểm tra user đã đăng xuất chưa ạ. Em chỉ làm được sự kiện đóng form thì sẽ update lại trạng thái user đó nhưng nếu họ ngắt kết nối rồi đóng form thì làm sao server của em cập nhật được ạ.
Em cảm ơn mọi người.
Có 2 cách:
1. Thêm hàm cập nhật hiện trạng kết nối vào cái thủ tục "mở/đóng kết nối".
2. Khai thác các thủ tục hệ thống có sẳn của SQL Server như:
– Chạy stored proc. "sp_Who2".
– Lấy thông tin kết nối từ các table hệ thống: sys.dm_exec_connections; sys.dm_exec_sessions;
2750
www.giaiphapexcel.com/diendan/threads/vba-ki%E1%BB%83m-tra-user-%C4%91%C3%A3-%C4%91%C4%83ng-xu%E1%BA%A5t-ch%C6%B0a.143687/
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Trong cơ quan bạn, bên nào quyền hạn cao hơn? bên sử dụng Access hay bên quản lý SQL Server?
Trên nguyên tắc, SQL Server là CSDL chủ, nó cho phép người ta kết nối vào và tự kiểm soát các kết nối ấy. Bên xin phép kết nối chỉ việc nhập vào và rút lui khi hết việc thôi.
Túm lại, quản lý SQL Server có những công cụ để kiểm soát những cái này. Nếu tôi là admin của máy chủ, tôi buộc tất cả những code VBA (*) kết nối với máy tôi phải đăng ký (**).
(*) Thực ra code nào cũng phải đăng ký. Nhưng VBA là quan trọng nhất vì nó lỏng lẻo nhất.
(**) Ở trên tôi có hỏi ai quyền hạn cao hơn. Đương nhiên nếu cơ quan đặt quyền hạn của admin SQL server quá thấp thì là chuyện của cơ quan, bị attack ráng chịu.
Theo như những bài hỏi của bạn mấy bữa nay thì cơ quan bạn rõ ràng không có một quy trình xác định trách nhiệm từng bộ phận.
Thằng xin kết nối, tức là thằng Access Form, cũng giống như thằng lái xe tải vào kho hàng bạn để lấy hàng.
Bạn không thể dựa vào nó để: "mỗi lần vào lấy hàng thì ghi sổ mở kho, và lấy xong, đóng kho lại cũng ghi sổ đóng kho."
Việc mở đóng kho là nhiệm vụ bên quản kho. Tất cả sự kiện xảy ra ở cửa kho và trong kho đều phải qua thủ kho.
Tôi cố sức tránh dẫn diễn đàn này qua diễn đàn khác.
Nhưng có lẽ trường hợp của bạn cần phải ngoại lệ.
Một khi đã xác định vấn đề của bạn nằm bên SQL Server chứ không phải Access thì bạn cần vào các diễn đàn về SQL Server mà tư vấn.
Thử vào SQLViet hỏi xem. Nhớ mang máng chủ diễn đàn này là Vũ Huy Tâm. Tay này đã từng tổ chức hội thảo về SQL Server, tay nghề có lẽ không kém.
Xin xác định lại là tôi không có ý quảng cáo cho ai hết. Và tôi không hề là thành viên SQLViet.
Bạn đưa cái form Access kết nối, nội dung table lưu thông tin đăng nhập như thế nào… mà bạn đã làm lên đây thì mọi người mới hỗ trợ nhanh được.
Phải xem bạn tổ chức có hợp lý chưa, dễ xử lý code không, các hàm, thủ tục kết nối bạn viết như thế nào rồi mới sửa.
Mấy tham số kết nối như: IP, user/ pass …liên quan đến SQL server của bạn thì cứ đưa data dỏm được rồi.
Theo những gì bạn nói thì trách nhiệm và quyền hạn của bạn trong cơ quan tương đối nhiều.
Lời thật mất lòng, cái thời mà tôi còn làm việc với SQL Server thì trách nhiệm và quyền hạn của tôi chỉ bằng nửa bạn, nhưng kiến thức bắt buộc đã phải gấp đôi bạn.
Tôi tin là cơ quan của bạn hà tiện quá. Với nhân viên ở nhiệm vụ này, bạn phải qua khoá huấn luyện VÀ thường xuyên dự các hội thảo về phát triển và an ninh CSDL. Chỉ có ở những họi thảo này bạn mới có dịp giao lưu với trao đổi những kinh nghiệm cập thời. An ninh dữ liệu (data security) là trò chơi cút bắt. Bọn phá hoại chúng tiến triển rất nhanh. Bên bảo vệ bắt buộc không được dừng chân.
Rất tiếc là tôi không còn làm việc mạng nhiều nữa cho nên kiến thức không cập nhật, không thể giúp cho bạn nhiều hơn.
oh hay nhỉ, người dùng logout lúc nào mà bạn cũng không biết? Bạn tạo cái đăng nhập rồi mà không tạo cái logout? Tất cả do phần mềm chứ như mình nói thì user chẳng biết gì hay không có quyền hạn để vào thẳng CSDL của bạn để ngắt kết nối đâu.
Đó cũng là lý do tôi muốn bạn gửi file lên để xem bạn tổ chức xử lý như thế nào đó. Mọi thứ như bạn quanluu1989 đã nói là xử lý ở hậu trường, còn người dùng thì không cần phải biết.
Sau này có thể không phải chỉ việc quản lý user login, logout mà còn có log file lưu theo dõi việc sửa/ xoá nội dung gì, ở table nào v.v..Bạn phải tổ chức CSDL, qui trình thao tác, xử lý trên form, code như thế nào để có thể lưu lại các thông tin trên.
Khi thưc hiện lênh tới CSDL thì bạn phải mở kết nối tới Server, thực hiện xong thì bạn ngắt kết nối trên phần mềm. Còn vấn đề bạn mất kết nối không thực hiện đc câu lệnh thì do phía server có vấn đề, và phải giải quyết phía server. Còn bị vấn đề gì thì phải xem xét.
Vấn đề của bạn là ngta tắt form của bạn bằng cách nào đó mà code của bạn không hoạt động chứ chẳng liên quan gì đến kết nối.
Trước mình có đọc đâu đó về session , bạn thử tìm hiểu xem, ghi nhận lại thời gian đăng nhập của người dùng, sau một khoảng thời gian nào đó không có thao tác gì thì tự log out hoặc sau bao nhiêu thời gian kể từ lúc đăng nhập thì log out, người dùng muốn thao tác tiếp phải đăng nhập lại. Đây là suy nghĩ của mình, mình chưa làm nên không biết có khả thi hay không.
có 1 vấn đề cần lưu ý là form của họ có luôn giữ kết nối không hay là thực hiện câu lệnh mới két nối, xong câu lệnh là ngắt kết nối thì sao?
Bạn chưa hiểu vấn đề thực sự sao? Ý mình ở đây là code bị vô hiệu hóa hay không chạy. Mình nghĩ bạn có thể log theo 1 khoảng thời gian nào đó
như bạn nói thì là do code không chạy khi bị tác động không mong muốn từ người dùng. Giải pháp là log theo khoảng thời gian.
Mỗi một kết nối liên hệ đến một session (*). Điều đó có thể kiểm soát được. Bài #2 có chỉ một cách kiểm soát cho SA nhưng tôi không hiểu tại sao thớt không chịu theo chiều hướng server mà cứ phải muốn kiểm soát phía bên client.
(*) khi các kết nối đi qua pool thì hơi khó kiểm soát từng cái. Nhưg tôi tin là trường hợp cúa thớt, mỗi user là một process riêng, và như vậy không có pool.
Xuất nó ra csv
Bạn upload cái file Access của bạn lên Google Drive hoặc Mediafire rồi share full, dán link lên đây.
Tôi xem bạn đã làm được những gì rồi hướng dẫn từ từ từng phần giải quyết vấn đề của bạn.