Có an toàn hơn không khi đi qua cơ sở dữ liệu thứ 3 để kết nối hai cơ sở dữ liệu bằng cùng một thông tin đăng nhập?


18

Chúng tôi có các thiết lập sau:

  • Nhiều cơ sở dữ liệu sản xuất chứa dữ liệu riêng tư được sử dụng bởi phần mềm máy tính để bàn
  • Cơ sở dữ liệu web cho một trang web công cộng cần một số dữ liệu từ cơ sở dữ liệu riêng tư
  • Một cơ sở dữ liệu trung gian chứa một vài khung nhìn và các thủ tục được lưu trữ để lấy dữ liệu từ cơ sở dữ liệu riêng

Hiện tại trang web đăng nhập vào cơ sở dữ liệu web và cơ sở dữ liệu web kết nối với cơ sở dữ liệu trung gian để lấy dữ liệu hoặc thực hiện các quy trình được lưu trữ trên cơ sở dữ liệu sản xuất. Tất cả các cơ sở dữ liệu trên cùng một phiên bản SQL và toàn bộ quá trình sử dụng cùng một tài khoản người dùng.

Tài khoản người dùng có toàn quyền truy cập vào cơ sở dữ liệu web và cơ sở dữ liệu trung gian, nhưng chỉ có thể truy cập vào các chế độ xem cụ thể và các thủ tục được lưu trữ và cơ sở dữ liệu riêng tư

Điều này có thực sự an toàn hơn là chỉ làm cho cơ sở dữ liệu công cộng kết nối trực tiếp với những người riêng tư?

Có vẻ như cơ sở dữ liệu trung gian chỉ ở đó để làm phức tạp mọi thứ vì cùng một thông tin đăng nhập được sử dụng để truy cập dữ liệu trong tất cả các cơ sở dữ liệu và nó chỉ giới hạn ở các chế độ xem / SP cần trong cơ sở dữ liệu riêng. Tôi hy vọng loại bỏ nó.


2
Bạn có một trung gian; những procs / lượt xem trên web DB. Miễn là perms của bạn được đặt chính xác, cơ sở dữ liệu bổ sung có vẻ như trừu tượng không cần thiết mà không có ý nghĩa bảo mật nào cả.
Ben Brocka

@BenBrocka Đó là những gì tôi đã nghĩ, nhưng tôi muốn kiểm tra lại trước khi gỡ bỏ hoàn toàn
Rachel

Câu trả lời:


7

Một điều nhảy ra ở đây:

Toàn bộ quá trình sử dụng cùng một bộ thông tin đăng nhập

Vấn đề

Vì vậy, userX giả định (cho dù một số meatsack sử dụng Excel hoặc IIS AppPool Identity) có thể thấy một số chế độ xem và mã. Việc các khung nhìn và mã này nằm trong cơ sở dữ liệu nào không quan trọng vì dù sao userX cũng được thiết lập trong 3 cơ sở dữ liệu.

Tuy nhiên, bạn mất quyền sở hữu chuỗi như thế này.

Hãy nói WebDB.dbo.SomeProccuộc gọi PrivateDB.dbo.SomeTable. UserX yêu cầu quyền trên cả hai đối tượng. Nếu điều này được OneDB.WebGUI.SomeProcsử dụng OneDB.dbo.SomeTablethì chỉ có OneDB.WebGUI.SomeProcquyền cần thiết. Quyền đối với các đối tượng được tham chiếu với cùng một chủ sở hữu không được kiểm tra.

Lưu ý: Tôi đã không nhìn quá sâu vào chuỗi sở hữu cơ sở dữ liệu chéo . Tôi chỉ biết đồng bằng cũ "sở hữu chaining" tốt

Bây giờ, theo nhận xét, bạn thực sự có 2 cơ sở dữ liệu có thể được kết hợp. Không phải 3 mà ban đầu được ngụ ý. Tuy nhiên, các trung gian và web có thể được kết hợp.

Các cơ sở dữ liệu "riêng tư" khác có thể được kết hợp, nhưng đó sẽ là một vấn đề riêng biệt. Xem liên kết dưới cùng để thảo luận đầy đủ hơn về "một cơ sở dữ liệu hoặc nhiều"

Dung dịch?

Nếu các cơ sở dữ liệu bổ sung chỉ là các thùng chứa mã, thì các lược đồ là một ý tưởng tốt hơn.

Điều này có vẻ như bạn đã sử dụng "Cơ sở dữ liệu" trong đó bạn nên sử dụng "Lược đồ" (theo nghĩa của Máy chủ SQL, không phải ý nghĩa của MySQL). Tôi có lược đồ WebGUI, lược đồ trợ giúp hoặc chung (để thay thế cơ sở dữ liệu trung gian) và lược đồ máy tính để bàn. Bằng cách này, bạn tách các quyền dựa trên máy khách và chỉ có một cơ sở dữ liệu

Với một cơ sở dữ liệu (ngoài "chuỗi sở hữu"), bạn cũng có thể bắt đầu xem xét các chế độ xem được lập chỉ mục, SCHEMABINDING (tôi luôn sử dụng nó) và không thể thực hiện được với các cơ sở dữ liệu riêng biệt

Để biết thêm về các lược đồ, xem những câu hỏi sau:

Cuối cùng, không có lý do gì để có cơ sở dữ liệu riêng biệt dựa trên "tính toàn vẹn giao dịch không bắt buộc". Xem câu hỏi này để giải thích điều này: Tiêu chí quyết định khi nào nên sử dụng lược đồ không dbo so với Cơ sở dữ liệu mới


Cảm ơn bạn. Có một vài lý do dữ liệu web nằm trong một cơ sở dữ liệu riêng biệt, nhưng lý do lớn nhất là thực sự có nhiều cơ sở dữ liệu riêng tư và web có trách nhiệm đi đến cơ sở dữ liệu riêng để lấy dữ liệu. Mối quan tâm chính của tôi là tìm hiểu xem db trung gian có thực sự bổ sung bất cứ điều gì vào bảo mật của trang hay không vì tôi muốn xóa nó. Cho đến nay nghe có vẻ như nó không thêm bất cứ thứ gì ngoài một lớp phức tạp thêm.
Rachel

@Rachel: bit "nhiều cơ sở dữ liệu riêng tư" khá phù hợp với bất kỳ câu trả lời nào, đặc biệt là câu trả lời này ... Tôi đã nói điều gì đó khác biệt nếu điều này được biết đến
gbn

@Rachel: tại sao bạn không đề cập đến "nhiều PrivateDB" trong câu hỏi? Điều đó thay đổi mọi thứ ...; - \
Fabricio Araujo

@FovenioAraujo Tôi đã chỉnh sửa câu hỏi của mình 2 giờ trước để đưa thông tin đó vào. Tôi đã không nghĩ rằng nó quan trọng vào thời điểm đó vì tôi đã hỏi về tính bảo mật của việc sắp xếp cơ sở dữ liệu, chứ không phải thiết kế của nó.
Rachel

1
@FovenioAraujo: các điều kiện cần thiết xác định thiết kế, vì vậy một thiết kế phải chính xác trước khi được bảo mật. Một thiết kế không chính xác được bảo mật là vô giá trị - một thiết kế chính xác không an toàn có thể được thực hiện an toàn bất cứ lúc nào.
Fabricio Araujo

4

Câu trả lơi con phụ thuộc vao nhiêu thư. Nếu cơ sở dữ liệu riêng tư không được truy cập từ mạng LAN bên ngoài (hoặc chỉ thông qua VPN), lược đồ này sẽ thêm bảo mật vì ai đó sử dụng thông tin đăng nhập của WebSite sẽ chỉ có quyền truy cập hạn chế vào Máy chủ DB riêng đó (và sẽ có thêm một số công việc để nhận vào mạng nội bộ của bạn - thời gian có thể thuận tiện trong việc khám phá sự xâm nhập và đóng lỗ hổng).

Nếu không, tôi không nghĩ rằng nó bổ sung bất cứ điều gì ngoại trừ sự phức tạp.


CHỈNH SỬA:

Có vẻ như tôi đã đọc sai câu hỏi của bạn, vì vậy hãy xem bây giờ tôi đã hiểu đúng chưa: IntermDb là một cơ sở dữ liệu trống chỉ để kết nối với PrivateDB HOẶC đó là một DB có các khung nhìn / thủ tục của chính nó kết nối với PrivateDB để lấy dữ liệu ?

Trong trường hợp đầu tiên, WTF? Xé nó ra. Điều đó là vô ích, trừ khi ai đó muốn kiểm toán nó để truy cập hồ sơ vào PrivateDB theo cách lười biếng hơn (và làm cho các nhà phát triển WebApp làm việc chăm chỉ hơn). SQL Profiler có thể lọc bằng DB_ID ...

Trong trường hợp thứ hai, tôi duy trì câu trả lời trước đó của tôi.

EDIT: "Tôi vẫn không thấy cách này an toàn hơn so với việc kết nối trực tiếp db riêng với db công khai vì cả 3 cơ sở dữ liệu trên cùng một phiên bản SQL và thông tin đăng nhập được sử dụng cho cả 3 cơ sở dữ liệu là như nhau và chỉ có thể truy cập quan điểm cụ thể và các thủ tục được lưu trữ trong mọi cách riêng tư db ".

Có trung gian có nghĩa là kẻ xâm lược sẽ phải đào mã của bạn biết sự tồn tại của IntermDB - và nó phải đào mã của bạn trên đó để biết rằng có tồn tại PrivateDB.

Nếu bạn đặt PrivateDB trên một máy chủ khác bên trong LAN / WAN của tổ chức (nếu có thể), nó có thể cung cấp đủ thời gian để quản trị viên phát hiện và chặn nỗ lực xâm lược. Nếu bạn sử dụng từ đồng nghĩa, việc di chuyển này diễn ra suôn sẻ vì tất cả những gì bạn có là xây dựng lại chúng theo mã hiện có, đi đến đúng nơi.

Ngoài ra, bạn có được các lợi thế khác: vì tất cả các mã phải thông qua IntermDB để truy cập dữ liệu trong PrivateDB, không có nhà phát triển nào muốn thử bỏ qua nó - và nỗ lực đó có thể dễ dàng được phát hiện trên SQL Server Profiler như DB_ID của yêu cầu dữ liệu PrivateDb sẽ là WebAppDb.


Bảo mật sẽ không giống như khi bạn có db công khai trên một máy chủ và riêng tư trên một máy chủ khác? Việc thêm cơ sở dữ liệu thứ 3 vào sơ đồ đó để làm gì để tăng tính bảo mật? Mặc dù trong tình huống của tôi, cả 3 cơ sở dữ liệu đều trên cùng một phiên bản máy chủ SQL (cũng đã thêm thông tin này vào câu hỏi của tôi)
Rachel

Để đáp ứng với chỉnh sửa của bạn, db giữa chứa các chế độ xem và các thủ tục được lưu trữ của nó trả về dữ liệu từ db riêng. Tôi vẫn không thấy cách này an toàn hơn so với việc kết nối trực tiếp db riêng với db công khai vì cả 3 cơ sở dữ liệu trên cùng một phiên bản SQL và thông tin đăng nhập được sử dụng cho cả 3 cơ sở dữ liệu là như nhau và chỉ có thể truy cập các chế độ xem cụ thể và thủ tục lưu trữ trong db anyways
Rachel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.