Một thực tiễn bảo mật tốt để lưu trữ cơ sở dữ liệu quan trọng trên máy tính xách tay của nhà phát triển là gì?


33

Chúng tôi có một vài givens:

  1. Các nhà phát triển cần một bản sao của cơ sở dữ liệu sản xuất trên máy của họ.
  2. Các nhà phát triển có mật khẩu để nói cơ sở dữ liệu trong các tệp App.config.
  3. Chúng tôi không muốn dữ liệu trong cơ sở dữ liệu bị xâm phạm.

Một vài giải pháp được đề xuất và nhược điểm của chúng:

  1. Mã hóa toàn bộ đĩa. Điều này giải quyết tất cả các vấn đề, nhưng làm giảm hiệu suất của máy tính xách tay và chúng tôi là một người khởi nghiệp, vì vậy đừng có tiền cho những con ngựa.
  2. Tạo một VM với đĩa cứng được mã hóa và lưu trữ cơ sở dữ liệu trên nó. Nó hoạt động tốt, nhưng nó không giúp được gì nhiều, vì có mật khẩu trong Web.Config.
  3. Giải pháp số 2 + yêu cầu nhà phát triển nhập mật khẩu cơ sở dữ liệu mỗi khi anh ta chạy bất cứ thứ gì. Nó giải quyết tất cả các vấn đề, nhưng nó thực sự cồng kềnh đối với các nhà phát triển đôi khi kích hoạt ứng dụng nhiều lần trong một phút. Ngoài ra, chúng tôi có nhiều ứng dụng kết nối với cùng một cơ sở dữ liệu và việc triển khai màn hình mật khẩu sẽ phải khác nhau ở mỗi ứng dụng.

Vì vậy, câu hỏi của tôi là, nếu có bất kỳ giải pháp chung cho vấn đề như vậy, hoặc bất kỳ đề xuất nào về cách làm cho bất kỳ giải pháp trên có thể thực hiện được?


26
Bạn đã thực sự đo lường tác động hiệu suất của mã hóa toàn bộ đĩa. Tôi đã sử dụng nó trên máy tính xách tay khá cũ và không nhận thấy bất kỳ sự suy giảm hiệu suất đáng kể nào. Các hệ điều hành hiện đại khá tốt trong bộ nhớ đệm và dù sao thì đĩa cũng chậm. Tác động xấu nhất có lẽ là thời gian sử dụng pin của bạn.
5gon12eder

69
Thành thật mà nói, điều này không giống như cách tiếp cận đúng. 1) Tại sao các nhà phát triển cần một cơ sở dữ liệu sản xuất trên máy của họ? Có cách nào để tạo dữ liệu giả cho dev db không? 2) Tại sao mật khẩu được lưu trữ trong văn bản thuần trong tệp cấu hình? Có vẻ như bạn đang cố gắng đưa một chiếc băng đô vào một quy trình thiếu sót. Có lẽ bạn có thể sửa đổi những gì thực sự sống trên các máy dev cũng như cách mật khẩu được lưu trữ cho cơ sở dữ liệu.
Thomas Stringer

2
Có nhiều lý do để các nhà phát triển cần cơ sở dữ liệu sản xuất. Vì lý do lịch sử, công việc của họ quá gắn liền với dữ liệu trực tiếp. Tôi biết đây là một ý tưởng tồi và nếu chúng tôi không tìm được giải pháp tốt, chúng tôi sẽ chuyển sang dữ liệu giả. Hiện tại tôi đang cố gắng tìm một giải pháp tốt mà không cần điều đó.
Svarog

6
Không người dùng MacBook Pro nào có thể cho bạn biết tốc độ của máy cho dù mã hóa toàn bộ đĩa được bật hay tắt trên ổ SSD. Không có sự khác biệt. Không ai mà bạn có thể nhận thấy. Có thể một trong những bạn có thể đo lường, nhưng không có gì đáng chú ý.
gnasher729

5
Tôi thứ hai @ gnasher729 bình luận. Đã sử dụng mã hóa toàn bộ đĩa trong nhiều năm trong các môi trường quy định (tài chính và chăm sóc sức khỏe), nó không phải là một sự tiêu hao đáng chú ý về hiệu suất. Rất nhiều người đưa ra các điểm hợp lệ khác, nhưng trong môi trường HIPAA, thật khó để có một chính sách hợp lý mà không cần mã hóa toàn bộ đĩa, ngay cả khi cơ sở dữ liệu không được đặt trên máy tính xách tay. Email và các đoạn dữ liệu khác thường xuyên xuất hiện ở đó. Hoán đổi tập tin .... vv ... Mã hóa toàn bộ đĩa không đầy đủ, nhưng nó thường là cần thiết.
joshp

Câu trả lời:


100

Bạn không chỉ không muốn một bản sao của cơ sở dữ liệu sản xuất, nó thực sự có thể là bất hợp pháp. Ví dụ: ở Mỹ, bạn không thể di chuyển dữ liệu sản xuất ra khỏi môi trường sản xuất nếu nó chứa thông tin được quy định như dữ liệu sức khỏe cá nhân, dữ liệu tài chính hoặc thậm chí dữ liệu có thể được sử dụng trong hành vi trộm cắp danh tính. Nếu bạn làm như vậy, bạn có thể bị phạt, mất đi sự tuân thủ và do đó phải chịu các cuộc kiểm toán mạnh mẽ hơn, hoặc thậm chí được nêu tên trong một vụ kiện.

Nếu bạn cần dữ liệu ở quy mô sản xuất để thử nghiệm, bạn có một vài lựa chọn:

  1. Tạo tất cả dữ liệu giả. Điều này là khó khăn hơn âm thanh. Thật khó khăn và tốn nhiều công sức để tạo ra dữ liệu tưởng tượng hợp lý.
  2. Ẩn danh dữ liệu sản xuất của bạn. Điều này có thể dễ dàng hơn, nhưng tiến hành thận trọng.

Đối với tùy chọn # 2

  • Trong môi trường sản xuất, quản trị viên cơ sở dữ liệu được ủy quyền tạo một bản sao của dữ liệu sản xuất.
  • Vẫn trong môi trường sản xuất, cùng một quản trị viên được ủy quyền chạy một thói quen ẩn danh tất cả dữ liệu nhạy cảm. Nếu nghi ngờ, hãy ẩn danh.
  • Chỉ sau đó dữ liệu mới được chuyển sang môi trường khác.

31
và mật khẩu cho bản sao cơ sở dữ liệu không nên giống với mật khẩu cho phiên bản sản xuất .....
Cuộc đua Lightness với Monica

3
"Ví dụ: ở Mỹ, bạn không thể di chuyển dữ liệu sản xuất ra khỏi môi trường sản xuất nếu nó chứa thông tin theo quy định" Cái gì? Bạn có một nguồn cho việc này? Ví dụ, bạn có thể không sử dụng các bản sao lưu của cơ sở dữ liệu sản xuất làm dữ liệu cho môi trường dàn dựng hoặc làm thử nghiệm dbs trên các máy phát triển không?
mẫu

12
@nanny Không nếu bạn đang sử dụng dữ liệu theo quy định. Ví dụ: tôi đã làm việc theo quy định của HIPAA. HIPAA tuyên bố "Các thực thể được bảo hiểm cũng phải thực hiện các chính sách và thủ tục cần thiết tối thiểu hợp lý nhằm giới hạn số lượng thông tin sức khỏe được bảo vệ được sử dụng, tiết lộ và yêu cầu cho các mục đích nhất định." Một chính sách tối thiểu cần thiết là mở cho một số giải thích. Tư vấn pháp lý của chúng tôi đề xuất một giải thích chặt chẽ giữ dữ liệu nhạy cảm chứa ở nơi các nhà phát triển không thể truy cập được. (Có thực sự cần thiết cho họ để thực hiện công việc của họ không?) Sự thận trọng tương tự áp dụng cho việc tuân thủ tài chính như PCI.
Corbin ngày

4
@nanny Hãy coi đây là tin đồn từ một người không phải là luật sư, nhưng theo tôi hiểu, các quy tắc khác nhau tùy theo tiểu bang. Tư vấn pháp lý mà tôi làm việc luôn luôn có lỗi. Nói một cách chính xác, các nhà phát triển không cần SSN thực tế để thực hiện nhiệm vụ của mình, vì vậy luật sư đề nghị những SSN đó sống trong một môi trường được bảo vệ nơi các nhà phát triển không thể truy cập chúng. Đừng nghe tôi, mặc dù. Một luật sư tìm kiếm lợi ích lâu dài của bạn sẽ là nguồn lực tốt nhất.
Corbin ngày

5
Nói một cách chính xác, không phải là bất cẩn với PPI, trừ khi bạn đang làm việc của chính phủ, thì Tiêu đề 32 xuất hiện ... nhưng đó là một sự phơi bày trách nhiệm dân sự nghiêm trọng. đây là một câu trả lời tuyệt vời nâng cao.
dwoz

9

Ít nhất bạn có thể cung cấp cho các nhà phát triển VM trong trung tâm dữ liệu của bạn để họ có thể RD cho công việc này không? Mặc dù họ thực sự nên xử lý dữ liệu phi sản xuất, nhưng điều này sẽ an toàn hơn cho đến khi bạn có thể đến đó vì dữ liệu sẽ không được lưu trữ trên máy tính xách tay dễ bị đánh cắp.


Điều này đọc giống như một bình luận, xem Cách trả lời
gnat

5
@gnat, câu trả lời này có thể ngắn nhưng nó là một lựa chọn thay thế rất tốt.

Đừng là một giáo viên như vậy, @gnat ... đây là một câu trả lời tốt.
dwoz

@ dan1111 Đó là vấn đề. Đó không phải là một câu trả lời. Đó là một sự thay thế. Điều đó làm cho nó một nhận xét, không phải là một câu trả lời.
corsiKa

2
@corsiKa, câu trả lời thách thức tiền đề của câu hỏi được cho phép và thường là câu trả lời rất tốt. Xem vấn đề XY: meta.stackexchange.com/questions/66377/what-is-the-xy-probols . Và câu trả lời chi tiết hơn có thể tốt hơn, nhưng đây vẫn là một câu trả lời.

8

Thay đổi cách làm việc của bạn nếu có thể.

Như những người khác đã chỉ ra:

  • Sử dụng dữ liệu sản xuất để phát triển không phải là thông lệ tốt.
  • Có một mật khẩu được lưu trữ trong văn bản đơn giản là không tốt.

Cả hai điều này làm bạn gặp rủi ro đáng kể và nên được thay đổi nếu có thể. Ít nhất bạn nên nghiêm túc đánh giá chi phí thực hiện những thay đổi này sẽ là bao nhiêu. Nếu đây là một sự phụ thuộc bên ngoài mà bạn không có quyền thay đổi, hãy xem xét việc nâng cao điều này như một mối quan tâm đối với bất cứ ai có sức mạnh đó.

Tuy nhiên, trong thế giới thực, có thể thực sự không thể thay đổi điều này. Giả sử rằng những gì bạn đang làm là hợp pháp, bạn có thể phải sống với sự sắp xếp này (ít nhất là tạm thời).

Nếu điều này thực sự cần thiết, bạn chỉ cần thực hiện mã hóa toàn bộ đĩa.

Với các rủi ro, bạn cần sử dụng tùy chọn bảo mật khả dụng tốt nhất và đây là tùy chọn. Nếu có một màn trình diễn thành công, hãy sống với nó. Đó là một chi phí làm việc với dữ liệu nhạy cảm.

Nếu tôi là khách hàng của bạn, tôi sẽ không ấn tượng rằng bạn quyết định không sử dụng tùy chọn bảo mật tốt nhất có sẵn với dữ liệu của tôi, vì nó làm cho máy tính xách tay của bạn chậm hơn một chút.


1
"Không phải là một giải pháp lý tưởng" nên được thay đổi cho "một ý tưởng hoàn toàn ngu ngốc" IMO
Darkhogg

@Darkhogg, bạn đúng nó nên mạnh mẽ hơn. Đã chỉnh sửa. Tôi sẽ không đi xa đến mức "hoàn toàn ngu ngốc" mà không biết ứng dụng nhạy cảm đến mức nào. Thực tế, nguy cơ thỏa hiệp là rất, rất thấp nếu sử dụng mã hóa toàn bộ đĩa, do đó có thể coi quá nhiều điều này là một vấn đề bảo mật.

Tôi đồng ý với điểm đầu tiên, nhưng không phải điểm thứ hai. Nếu bạn không lưu trữ mật khẩu của mình trong văn bản gốc, nơi bạn đang lưu trữ nó (1) bản mã hoặc (2) bộ não của bạn. Nếu (1) thì bạn đang lưu mật khẩu cho mật mã ở đâu (vòng lặp vô hạn được phát hiện). Nếu (2), thì tôi hy vọng bạn thích thức dậy lúc 2:00 sáng để nhập mật khẩu để khởi động lại dịch vụ.
emory

1

Câu trả lời của Corbin March khá hay, tôi sẽ chỉ thêm một chi tiết, rằng bạn thường có hai loại dữ liệu trong cơ sở dữ liệu sản xuất của mình: siêu dữ liệu hệ thống / ứng dụng; và dữ liệu người dùng của khách hàng / dữ liệu giao dịch. Cái sau này KHÔNG BAO GIỜ được sử dụng trong môi trường phát triển "như hiện tại."

Thực sự rất hiếm khi bạn cần thông tin khách hàng sản xuất thực tế để phát triển.

Tuy nhiên, nếu vấn đề mà OP mô tả ở đây liên quan đến dữ liệu bí mật thương mại hoặc dữ liệu hệ thống độc quyền cao không liên quan đến dữ liệu khách hàng, thì đó là yêu cầu của các nhà phát triển ... phương pháp bảo mật phải liên quan đến một kế hoạch không có mật khẩu db được giữ trong Cleartext trong một tệp tài nguyên ở đâu đó. Cần phải có một cơ chế, ví dụ, để tạo lại mật khẩu hàng ngày, không được lưu trữ trên đĩa.


5
client user data/transactional data... should NEVER be used in a development environment "as is." - Điều này nghe có vẻ không khả thi với tôi. Các vấn đề lập trình liên quan đến sản xuất phải làm với dữ liệu của một khách hàng cụ thể sẽ không thể giải quyết được theo sự sắp xếp này. Hơn nữa, dữ liệu trực tiếp thực sự rất hữu ích từ quan điểm thử nghiệm. Nỗ lực tư nhân hóa hoặc ẩn danh chỉ nên tập trung vào dữ liệu được quy định cụ thể.
Robert Harvey

@RobertHarvey, nó chỉ không khả thi nếu bạn không thể tái tạo vấn đề sản xuất trong môi trường dev. Tôi nghĩ trong suốt sự nghiệp của mình (lâu dài) tôi có thể đếm trên một vài ngón tay số lần dữ liệu kiểm tra vệ sinh phù hợp là không đủ để tái tạo lỗi sản xuất. "Thông tin kinh doanh độc quyền" vượt xa, vượt xa số SSN và số CC!
dwoz

4
Nhưng nếu bạn đang đi theo con đường đó, bạn sẽ có những người CNTT không thể thực hiện công việc của họ vì họ không có quyền truy cập Quản trị vào mọi thứ. Tôi thừa nhận rằng điều đó gây ra các vấn đề tiềm ẩn của Snowden, nhưng tôi không thấy một sự thay thế khả thi nào, ngoài việc thuê những người bạn có thể tin tưởng. Sarbanes Oxley và HIPAA rất cụ thể về loại dữ liệu nào cần được sắp xếp theo thứ tự và nó không bao gồm "tất cả dữ liệu sản xuất", không phải bởi một cú đánh dài. Điều đó nói rằng, tôi không tin dữ liệu sản xuất của bất kỳ loại nào nên tồn tại trên máy tính xách tay chuyển vùng.
Robert Harvey

1
-1 cho KHÔNG BAO GIỜ. Nhận xét nhiều sắc thái của bạn tốt hơn câu trả lời của bạn; bạn nên chỉnh sửa chúng vào nó

1
@ dan1111 chúng ta có thể đồng ý không đồng ý rồi. Dữ liệu khách hàng "nguyên trạng" KHÔNG BAO GIỜ KHÔNG BAO GIỜ được sử dụng trong các hệ thống dev. Nó phải luôn luôn được vệ sinh. Bạn không tin điều này bởi vì bạn chưa bị con cầy mang dại này cắn ... và đó là những gì khi nó xảy ra. Một loài gặm nhấm điên cuồng có ý định rút máu của bạn. Hãy nghe lời khuyên của tôi, tránh cầy mangut dại.
dwoz

1

Bạn không nói cơ sở dữ liệu nào và môi trường nào.

Nếu bạn có thể sử dụng bảo mật tích hợp thì cơ sở dữ liệu không thể truy cập mà không đăng nhập như người dùng đó. Có nếu dữ liệu nằm trên đĩa cứng, nó có thể bị hack nhưng đây là phòng thủ cấp đầu tiên.

App.config làm cho tôi nghĩ rằng đây có thể là một .NET. Đặt cấu hình trong một ổ đĩa ngón tay cái và đọc nó từ ổ đĩa ngón tay cái. Nếu ổ đĩa không có thì làm cho người dùng nhập mật khẩu.

Có cách nào để lưu mật khẩu vào bộ nhớ lần đầu tiên được nhập và đọc không. Một lần nữa bạn không nói rõ môi trường. Tập tin đã ánh xạ bộ nhớ

Với một số TDE, bạn có thể lưu trữ khóa trên một thiết bị riêng biệt để họ chỉ cung cấp khóa khi máy chủ cơ sở dữ liệu được khởi động.


0

Một tùy chọn có thể là tạo một bản sao của cơ sở dữ liệu và xóa bản sao đó bằng một tập lệnh để bạn kết thúc với dữ liệu khác với những gì thực sự được sản xuất. Bạn sẽ không kết thúc với cùng một dữ liệu như sản xuất Nhưng bạn sẽ có cùng quy mô.


điều này dường như chỉ lặp lại điểm được thực hiện và giải thích trong câu trả lời hàng đầu khoảng một tuần trước
gnat
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.