2009-07-26 44 views
7

Đối với một máy chủ chuyên dụng, tốt hơn là lưu chuỗi kết nối trong web.config hoặc machine.config? lợi thế và bất lợi của mỗi phương pháp tiếp cận là gì?Lưu trữ các chuỗi kết nối trong machine.config và lưu trữ chúng trong web.config

Cảm ơn

Chỉnh sửa: Tôi lo ngại về bảo mật ở đây, vì vậy, câu hỏi là cách tiếp cận nào an toàn hơn.

+0

Ở cả hai vị trí bạn nên xem xét mã hóa nó (mặc dù nếu bạn đang sử dụng kết nối đáng tin cậy, tôi sẽ không lo lắng nhiều). Có một công cụ khá tiện dụng cho việc này ngay bây giờ tại http://somewebguy.wordpress.com/2009/07/16/encrypt-your-web-config-please/ – blowdart

+0

Liên kết trong nhận xét ở trên đã chết; tại http://hugoware.net/blog/encrypt-your-web-config-please –

Trả lời

10

Tôi sẽ luôn đi với web.config với lý do đó là nơi mọi người mong đợi. Không có điểm nào trong việc cho người đó phải duy trì trang web khó khăn hơn bằng cách lưu trữ các chuỗi kết nối ở một nơi khác thường.

BỔ SUNG

Dựa trên những thông tin bổ sung mà OP là quan tâm đến các khía cạnh an ninh, chứ không phải là lý do chung và tôi đã thêm những điều sau đây.

Tôi vẫn không lưu trữ chuỗi kết nối trong machine.config. Nếu bạn làm điều đó, bất kỳ ứng dụng .NET nào đang chạy trên máy đều có quyền truy cập vào các chuỗi kết nối của bạn.

web.config là tệp được bảo vệ. IIS sẽ không phục vụ nó theo mặc định trừ khi bạn làm điều gì đó để cấu hình sai nó.

+0

Tôi đồng ý. Giữ nó đơn giản. Và không chỉ cho những người khác, cho chính mình, quá. – serialhobbyist

+0

Thực ra tôi sẽ tự bảo trì trang web vì vậy đây không phải là vấn đề. –

+2

Đề xuất của tôi không đề cập đến ai là người duy trì. Ngay cả khi đó là bạn, đề nghị của tôi vẫn đứng vững. Giữ mọi thứ đơn giản. 6 tháng xuống dòng bạn có thể đã quên. –

5

Tôi, cá nhân, sẽ không bao giờ lưu trữ chuỗi kết nối của tôi trong tệp machine.config của tôi, chỉ bao giờ trong web.config.

Bạn nói đó là máy chủ chuyên dụng, nhưng máy chủ này có dành riêng cho một ứng dụng web không?
Nếu không, bây giờ bạn đã có một tệp (machine.config) có hiệu quả chia sẻ dữ liệu cấu hình cho nhiều ứng dụng web (có thể không liên quan). Tùy thuộc vào số lượng các ứng dụng đó và nếu bạn cần di chuyển chúng sang một máy chủ khác, việc sử dụng machine.config có thể rất lộn xộn.

Ngay cả khi máy chủ dành riêng cho một ứng dụng web, có thể bạn sẽ thực hiện việc phát triển và thử nghiệm trên các máy khác. Kể từ khi machine.config không phải là bình thường một tập tin được bao gồm trong tập hợp tập tin của một dự án ứng dụng web ASP.NET, có thể bạn sẽ phải đi ra khỏi con đường của bạn để triển khai machine.config cho mỗi dev/thử nghiệm khác nhau/máy sản xuất, và đảm bảo rằng cấu hình liên quan khác (không kết nối chuỗi) bên trong chúng là chính xác cho máy đó.

Sử dụng web.config để lưu trữ chuỗi kết nối cơ sở dữ liệu hoàn toàn hợp lý và hoàn toàn được mong đợi bởi hầu hết các nhà phát triển ASP.NET, ngay cả khi bạn có nhiều ứng dụng sẽ sử dụng cùng một cơ sở dữ liệu chính xác trên cùng một máy chủ cơ sở dữ liệu. Việc giữ cấu hình này trong web.config của từng ứng dụng cho phép mỗi ứng dụng đó tự chủ và không phụ thuộc vào một số tệp "bên ngoài" khác.

Tôi thường xem machine.config và một cái gì đó mà khung chính nó sử dụng, và nó thuộc về một máy và cụ thể cho máy đó. Tôi rất hiếm khi vào và chạm vào nó. Tôi xem web.config dưới dạng tệp là một phần và gói của dự án ứng dụng web của bạn và "di chuyển xung quanh" với dự án đó khi nó di chuyển và được triển khai tới các máy khác nhau.

Ngoài ra, đừng quên rằng nhiều thứ được xác định trong machine.config có thể được "ghi đè" trên cơ sở mỗi ứng dụng bằng cách xác định lại các yếu tố cấu hình nhất định trong tệp web.config của ứng dụng cụ thể.

Tất nhiên, có một vài lý do hợp lệ để chỉnh sửa/thay đổi tệp machine.config của bạn (chẳng hạn như nhiều máy chủ web trong một trang trại có thể cần những thứ như các khóa mã hóa/giải mã trong machine.config để được đồng bộ hóa) tuy nhiên, tôi không tin rằng chuỗi kết nối cơ sở dữ liệu là một trong những lý do hợp lệ.

+0

Cảm ơn câu trả lời chi tiết của bạn, đó là một ứng dụng web duy nhất bằng cách này. –

+0

Craig - Tôi hiểu quan điểm của bạn nhưng tôi nghĩ bạn đang bỏ lỡ thực tế của việc duy trì bộ ứng dụng lớn sử dụng cấu hình web hoặc ứng dụng. Chúng tôi có 25 dự án trên một số máy chủ của chúng tôi, tất cả đều chứa cùng chuỗi kết nối cơ sở dữ liệu. Chúng tôi sẽ phải tự cập nhật tất cả các chuỗi kết nối trong tất cả các dự án để di chuyển máy chủ DB của chúng tôi sang một tên máy chủ mới. Trong khi nếu chúng ở trong cấu hình máy, chúng ta có thể thay đổi chúng ở một nơi duy nhất. – lukevp

+0

@lukevp Đối với tình huống của bạn, điều này hơi khác thường, tôi có thể hiểu muốn lưu chuỗi kết nối trong tệp machine.config để tránh lặp lại chính xác chuỗi kết nối trong 25 tệp web.config khác nhau. Tuy nhiên, tôi cho rằng hầu hết những người có 25 ứng dụng trên cùng một máy chủ sẽ có nhiều chuỗi kết nối khác nhau, phần lớn là duy nhất cho mỗi ứng dụng. – CraigTP

0

bảo mật thông minh bạn có thể xem xét lưu trữ chuỗi kết nối của mình trong đó có tệp .config được mã hóa mà tệp web.config của bạn sẽ có tham chiếu đến.

+1

Bạn chỉ có thể mã hóa các phần của web.config. Bạn không phải tạo một tập tin hoàn toàn mới. –

+1

tôi thường thấy dễ quản lý hơn nếu chúng ở trong một tệp riêng biệt. đặc biệt là nếu bạn có vô số chuỗi kết nối. – MakkyNZ

3

Nếu bảo mật là mối quan tâm chính của bạn, hãy tập trung vào khóa cơ sở dữ liệu và quyền người dùng. Sự khác biệt về bảo mật giữa web/machine .config là tối thiểu. Câu trả lời của Colin là chính xác. Tôi đã bình chọn hoặc bình luận ở đó nhưng tôi chưa có moxie!

+0

Thật vậy - Bảo mật là một con thú nhiều lớp.Bạn nên cố gắng hết sức để khóa các bit bên dưới bề mặt cũng như những gì ở bề mặt chỉ để chắc chắn. –

8

Tôi thích giữ các chuỗi kết nối của mình trong machine.config.

Chuỗi kết nối của tôi khác nhau giữa các môi trường DEV, QA và PROD và nếu tôi giữ chúng trong web.config, tôi không thể xóa thư mục đích của mình một cách an toàn và sao chép mã mới. Hoặc tôi sẽ phải nhớ để triển khai tất cả mọi thứ nhưng web.config, điều này tạo ra các vấn đề khi các phần khác của thay đổi web.config.

Điều đó phụ thuộc vào hoàn cảnh của bạn, nhưng khi nó phức tạp hơn thì nguy cơ có chuỗi kết nối sai trong môi trường không đúng là quá lớn. Chúng tôi đã thực sự có những tình huống mà thử nghiệm đã đánh vào cơ sở dữ liệu sai vì chuỗi kết nối vô tình bị di chuyển. Machine.config được sử dụng cho các mục máy cụ thể - do đó tên. Nó không bao giờ được chuyển từ máy này sang máy khác.

Vì vậy, trong máy của tôi.config Tôi có nhiều chuỗi kết nối như blogConnString, forumConnString, projectxConnString, v.v. Tôi không xem xét cài đặt trộn này cho các trang web khác nhau, tôi cho rằng nó giữ cài đặt mức máy trong maching.config.

Bạn đã lo lắng về vấn đề bảo mật, tôi nghĩ rằng khi chúng ở trên hộp, chúng được bảo mật như nhau. Nhưng nếu chuỗi kết nối nằm trong web.config, nó thường kết thúc trong kiểm soát nguồn, bàn của nhà phát triển, trong tệp sao lưu, trong kế hoạch cài đặt, bộ triển khai, v.v. Điều này làm cho cách web.config kém an toàn hơn đối với tôi.

Cuối cùng, cách tiếp cận khác là để có nó trong một tập tin cấu hình hoàn toàn khác nhau (nói WebEnvironment.confg), sau đó được tham chiếu trong web.config của bạn. Tệp này sẽ nằm trong thư mục không phải là thực tế trong trang web của bạn, nhưng hầu như nằm trong trang web của bạn. Chi tiết khác là HERE.

+1

Xin lỗi, nhưng tôi hoàn toàn không đồng ý với điều này. Cấu hình máy đi vào machine.config, không phải cấu hình ứng dụng. Chuỗi kết nối cơ sở dữ liệu là ứng dụng cụ thể, không phải máy cụ thể. –

+0

Nếu bạn cài đặt Windows ngay bây giờ, bạn sẽ nhận được một chuỗi kết nối mặc định trong machine.config - LocalSqlServer. Đây là giá trị cấu hình máy cho SQL Express cục bộ. Tôi có cấu hình máy cho blog của tôi, trang web chính của tôi, v.v. Là một nhà phát triển, nó chỉ làm cho nó dễ dàng như vậy. – JBrooks

+0

Cho mỗi sở hữu riêng. Nhưng tôi không nhìn thấy "MS làm điều đó vì vậy nó ok" như là một biện minh tốt. Tôi đã mất số lượng các ví dụ mã khủng khiếp trên trang web của MSDN. Chỉ vì họ tạo ra nó, nó không có nghĩa là những đề xuất của họ về cách sử dụng nó là tốt nhất. Tôi cũng không tập trung vào "làm cho cuộc sống dễ dàng cho các nhà phát triển", nhưng một lần nữa đó là sở thích cá nhân. Nó không phải về tôi, đó là tất cả về phần mềm. –

1

Có rất nhiều điểm tốt, tại đây. Môi trường của JBrooks gần nhất với tôi, nhưng cuối cùng, tôi không đồng ý với việc đặt các chuỗi kết nối trong Machine.config.

Tôi đồng ý với OJ nhưng không vì lý do anh ấy trích dẫn, tại đây. Tôi sẽ chỉ ra, như JBrooks cho biết, chuỗi kết nối rất có thể sẽ sử dụng các thông tin xác thực khác nhau trong môi trường phát triển và sản xuất. Cơ sở dữ liệu phát triển mạng nội bộ của chúng tôi, ví dụ, tất cả đều có cùng một bộ thông tin đăng nhập đơn giản trong khi cơ sở dữ liệu sản xuất của chúng tôi có thông tin đăng nhập khác nhau với mật khẩu phức tạp. Vì vậy, có những lý do rất tốt để không đặt các chuỗi kết nối của bạn trong tệp Web/App.config mà là trong tệp cục bộ tới máy chủ đích. Tôi thích đăng ký, bản thân mình, nhưng tôi biết đó là không phải ở tất cả các hỗ trợ. Rõ ràng, các tập tin Machine.config là có để cung cấp một giải pháp.

Không, tôi đồng ý với OJ vì Machine.config nằm trong khung .Net và có thể được Microsoft thay đổi. Nhưng Microsoft không biết gì về tệp connectionStrings.config trên các máy chủ sản xuất của chúng tôi. Tệp này được tải bởi Web/App.file config với:

<connectionStrings configSource="path\to\connectionStrings.config"/>

blowdart đưa ra luận điểm về mã hóa - luôn luôn là một ý tưởng tốt. Nhưng cuối cùng, cách duy nhất để bảo vệ hoàn toàn thông tin đăng nhập cơ sở dữ liệu của bạn là thay đổi chúng theo định kỳ.

0

tất cả các điểm tốt. Trong môi trường của tôi, cơ sở dữ liệu được chia sẻ để lưu trữ trong một lực lượng web.config dự phòng. Chúng tôi sử dụng cơ sở dữ liệu SQL tiêu chuẩn ở đây mà mọi người truy cập. Tệp cấu hình riêng được ưu tiên. Điều này cho phép chuẩn hóa, bảo mật và loại bỏ nhu cầu thay đổi web.config khi ứng dụng được triển khai.

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