2010-01-16 42 views
7

Nếu ứng dụng C# kết nối với máy chủ mysql từ máy khách, làm cách nào để lưu trữ tên người dùng/mật khẩu mysql cho kết nối? Nếu tôi có nó trong một tập tin cấu hình hoặc nhúng vào nguồn nó có thể được tìm thấy bằng kỹ thuật đảo ngược. Nó không thể cung cấp cho tất cả người dùng một mật khẩu MySql.Thực hành kết nối mysql C#

Ngoài ra, tôi có đăng nhập cho ứng dụng. Làm cách nào để tôi thực thi rằng người dùng thực hiện quá trình đăng nhập và không chỉ đảo ngược kỹ sư và nhận xét ra mã C# xác minh đăng nhập?

Vẫn quản lý các kết nối này giữa MySql và ứng dụng phía máy khách hoặc phải có chương trình thứ ba ở phía máy chủ tương tác với cơ sở dữ liệu cục bộ để bảo mật không?

+0

Thú vị ... tôi sẽ gắn cờ bài viết này dưới dạng bản dup nhưng tìm kiếm trên SO đã chuyển lên zilch. Câu hỏi của chỉ được hỏi về ASP.NET, dường như không bao giờ về khách hàng Winform. –

Trả lời

3

Có lẽ bạn có thể có hệ thống hai giai đoạn: Có một tài khoản SQL có quyền duy nhất là thực thi thủ tục được lưu trữ lấy tên người dùng và mật khẩu của người dùng và cấp cho họ thông tin đăng nhập để sử dụng cho tài khoản thực. Khi người dùng đăng nhập, bạn kết nối bằng tài khoản bị hạn chế, nhận thông tin đăng nhập cho tài khoản thực, sau đó thực hiện công việc của bạn bằng tài khoản đó. Bạn cũng có thể thay đổi mật khẩu SQL khá thường xuyên. Nếu bạn nghi ngờ một người dùng chơi sai, hãy thực hiện thủ tục trả lại cho họ một tập hợp thông tin xác thực khác và theo dõi các thông tin đăng nhập đó.

+0

Tôi nghĩ tôi thích điều này. Có bất kỳ vấn đề tiềm ẩn nào với giải pháp này không? – MattR

+1

Như đã đề cập bởi Paul Sasik, nếu có mật khẩu dùng chung, người dùng có đủ quyền truy cập vào máy tính của họ có thể lấy mật khẩu đó. Vì vậy, trong khi điều này sẽ giảm thiểu vấn đề (chỉ người dùng đăng nhập có thể tìm ra mật khẩu SQL), nó không loại bỏ nó. Để loại bỏ hoàn toàn, bạn cần phải có thứ gì đó giữa người dùng và cơ sở dữ liệu. – Yuliy

1

Đây là vấn đề. Bạn đang tin tưởng người dùng cuối với các tệp nhị phân sẽ gọi các truy vấn MySQL. Điều này có nghĩa là, ngoài bất kỳ bóng mờ nào, một người dùng thông minh có thể "kiểm soát" và chạy truy vấn trực tiếp.

Có những việc bạn có thể làm để cải thiện tình hình. Có vẻ như bạn đang ở trên mạng LAN. Tại sao bạn không thể cung cấp cho mỗi người dùng người dùng cơ sở dữ liệu riêng của họ? Điều đó có nghĩa rằng xác thực là (a) được chăm sóc cho bạn, và (b) bạn có thể sử dụng các quyền "thực" của MySQL để hạn chế những gì chúng có thể làm hại. Ngoài ra, bạn có thể sử dụng thủ tục lưu trữ và cung cấp cho họ chỉ truy cập vào các procs, thực sự hạn chế những gì họ có thể làm.

Bạn cũng có thể xem xét viết lại dưới dạng ứng dụng web nơi bạn xử lý mọi thứ trên máy chủ ngoài tầm với của họ.

Tuy nhiên, thực sự có vấn đề ở đây hay bạn chỉ là lý thuyết?

2

Đối với khách hàng Winform kết nối trực tiếp với db, đây là câu hỏi về độ tuổi (10 năm hoặc lâu hơn) có thể không bao giờ được giải quyết.

Vấn đề là dù bạn mã hóa hay làm xáo trộn chuỗi kết nối thì sẽ luôn có một thời điểm mà chuỗi sẽ được biểu diễn dưới dạng văn bản thuần trong bộ nhớ của máy khách và do đó có thể tấn công.

Bạn đã được các nhà cung cấp khác đề xuất, tôi chỉ nghĩ tôi sẽ chỉ ra những gì bạn đang cố gắng làm việc.

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