2009-06-25 24 views
6

Tôi đang viết một ứng dụng máy khách Java để truy xuất dữ liệu từ một máy chủ MySQL từ xa. Vì mục đích phát triển, tôi đã kết nối trực tiếp với máy chủ MySQL (tức là với DriverManager.getConnection (databaseURL), vv), nhưng đã có ý định chuyển sang sử dụng dịch vụ web (một khi đã được xây dựng). Câu hỏi của tôi là liệu tôi không thể tiếp tục với kết nối trực tiếp?Có hợp lý khi kết nối máy khách với máy tính để bàn trực tiếp với MySQL không?

Dịch vụ web sẽ cung cấp cho tôi mã nào khác để viết? Tôi sẽ phải thực hiện xác thực của riêng mình; có gì sai khi chỉ dựa vào MySQL?

(Tôi đang đặt câu hỏi này thay vì tiêu cực, vì tôi có ý tưởng rằng mô hình này hơi cau mày vào những ngày này; đó thực sự là lý do tôi hỏi nó, vì dường như tôi hoàn toàn ổn điều cần làm.)

Cảm ơn bạn vì bất kỳ thông tin chi tiết nào bạn có thể cung cấp cho tôi!

Trả lời

2

Vâng, miễn là bạn cung cấp cho khách hàng một người dùng chỉ với các quyền phù hợp, tôi không thấy bất kỳ điều gì sai bằng cách kết nối trực tiếp với MySQL. Có lẽ nếu bạn sẽ có rất nhiều và nhiều khách hàng đang chạy, điều này sẽ giữ nhiều kết nối với MySQL mở, trong khi một dịch vụ web có thể sử dụng một kết nối duy nhất và xử lý tải từ tất cả các máy khách.

Tính hữu ích thực sự của dịch vụ web là khi bạn có nhiều logic nghiệp vụ không thể có trong cơ sở dữ liệu. Đặt logic này trong máy khách là một ý tưởng rất tồi bởi vì người dùng có thể chạy các phiên bản lỗi thời, v.v. Ngoài ra, một dịch vụ web cho phép bạn có các loại khách hàng khác nhau (chẳng hạn như máy khách Windows, ứng dụng khách web, v.v.) mà không phải viết lại bất kỳ logic nào ngoài bản trình bày.

3

Một số lý do (không theo thứ tự đặc biệt):

  • Thay đổi logic kinh doanh chỉ trong một nơi, thay đổi sơ đồ cơ sở dữ liệu không có hiệu lực trên các máy khách (chỉ là dịch vụ)
  • MySQLs hệ thống ủy quyền là khá thô
  • an toàn hơn, vì bạn không cần phải mở DB của bạn với thế giới bên ngoài
  • dịch vụ Web hoạt động thông qua cổng standart HTTP, ít rắc rối với tường lửa
  • không cần t o cài đặt trình điều khiển ODBC

Tất nhiên, dịch vụ web không phải là thuốc chữa bách bệnh toàn cầu. Một số điều trên có thể không áp dụng trong trường hợp cụ thể của bạn, hãy sử dụng những gì tốt nhất cho bạn.

0

Dịch vụ web sẽ cho phép bạn lưu trữ dữ liệu, giảm căng thẳng trên cơ sở dữ liệu. Nó cũng sẽ giúp việc hiển thị dữ liệu từ hệ thống của bạn đến các hệ thống khác dễ dàng hơn. Một điều khác là khả năng linh hoạt - với dịch vụ web dưới dạng một lớp khác, bạn có thể thay đổi chuỗi kết nối/thay đổi lược đồ cho tất cả khách hàng ở một vị trí duy nhất, bạn sẽ không phải phân phối lại máy khách.
Bạn có bao giờ cần bất kỳ điều nào trong số này không? Tôi thường không đi cho mô hình, như bạn nói, nhưng tôi nghĩ rằng một dịch vụ web có thể có ý nghĩa. Tuy nhiên, chỉ có bạn biết thiết kế ứng dụng của bạn: Có bao nhiêu người sẽ sử dụng ứng dụng này? Kết nối với máy chủ MySQL có yêu cầu bất kỳ phần mềm/cấu hình đặc biệt nào trên máy khách không? (Oracle, ví dụ).

0

Cấp dữ liệu này vào các câu trả lời khác, nhưng hãy xem xét nếu bạn cho phép khách hàng kết nối trực tiếp với máy chủ trung tâm, điều này sẽ cung cấp cho họ các thông tin cần thiết để chạy bất kỳ truy vấn nào trong cơ sở dữ liệu mà họ đang làm việc. hỗ trợ tốt như thế nào trong MySQL để hạn chế sử dụng tài nguyên nhưng tôi cá cược rằng ngay bây giờ một khách hàng được xác định có thể kết nối với máy chủ cơ sở dữ liệu của bạn và khởi chạy một truy vấn để viết sai nó mang máy chủ DB đến đầu gối của nó. Họ sẽ không nhất thiết phải làm điều này với mục đích độc hại, có lẽ họ chỉ đang cố gắng thực hiện một tính năng bổ sung mà bạn không nghĩ đến.

Về cơ bản, dịch vụ web cho phép bạn làm là lấy đi một số nguồn từ người dùng. Sức mạnh mà họ không cần trong trường hợp này. Trừ khi khách hàng chạy máy chủ cơ sở dữ liệu riêng của họ tất nhiên, nhưng đó là một môi trường hoàn toàn khác. (nếu họ muốn làm hỏng DB của riêng họ, đó là việc của họ)

+0

Có, đây có vẻ là một vấn đề lớn, nhưng tôi thấy rằng tôi có thể hạn chế quyền truy cập của khách hàng vào các thủ tục được lưu trữ thích hợp và tất cả sẽ tốt. Có lẽ có nhiều hơn để nó mặc dù. –

+0

Tại sao không nhúng chuỗi kết nối với tên người dùng/mật khẩu bên trong ứng dụng? Bằng cách đó, ứng dụng có toàn quyền truy cập vào cơ sở dữ liệu, nhưng người dùng thực tế vẫn không biết thông tin xác thực đăng nhập. Rõ ràng, bạn kiểm soát mã ứng dụng, vậy đâu là mối quan tâm? – JoeCool

+0

@JoeCool cho kẻ tấn công, việc tìm kiếm thông tin đăng nhập cũng đơn giản như chạy 'chuỗi' trên bình chưa được đóng gói. Bạn có thể đề xuất các giải pháp cho điều đó, nhưng tất cả chúng đều có cùng một vấn đề cơ bản mà DRM có, cụ thể là tại một số thời điểm bạn cần đăng nhập người dùng trong văn bản rõ ràng trên hệ thống người dùng. Người dùng điều khiển hệ thống đó để họ có thể truy cập vào hệ thống đó. Đây không phải là vấn đề lớn nếu ứng dụng của bạn là một thứ trong nhà được sử dụng bởi 3 nhân viên trong suốt cuộc đời của nó, vì vậy khi bạn phân phối nó cho nhiều người, một số người có thể không thích bạn lắm. – wds

0

Kết nối trực tiếp với cơ sở dữ liệu đòi hỏi, rõ ràng là có giao diện đến cơ sở dữ liệu của bạn có thể truy cập trực tiếp từ Internet. Điều đó có nghĩa là trừ khi bạn rất cẩn thận với cách bạn thiết lập quyền của bạn, bạn có thể làm cho toàn bộ cơ sở dữ liệu của bạn dễ bị tấn công. Trong khi với một Dịch vụ Web, quyền truy cập duy nhất mà bất kỳ người dùng nào cũng có thể có vào cơ sở dữ liệu là quyền truy cập/chức năng có sẵn thông qua Dịch vụ Web. Tôi sẽ gửi rằng việc bảo mật và duy trì một cơ sở dữ liệu MySQL được mở trên mạng sẽ phức tạp hơn so với mã bổ sung liên quan đến việc tạo ra một lớp xác thực Dịch vụ Web.

Ngoài ra nếu bạn cần thay đổi bảng của mình theo bất kỳ cách nào, bạn sẽ phải cập nhật ứng dụng khách, thay vì chỉ cập nhật Dịch vụ web, nếu truy vấn của bạn được khách hàng tạo.

0

Câu hỏi khác hơn là câu trả lời, hàm ý tốc độ giữa 2 cách tiếp cận là gì? tức là kết nối trực tiếp tới mysql hoặc sử dụng dịch vụ web

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