2009-09-17 30 views
17

Bạn sử dụng chiến lược nào để tránh lưu trữ mật khẩu trong kiểm soát phiên bản?Làm cách nào để tránh lưu trữ mật khẩu trong kiểm soát phiên bản?

Hiện tại, tôi có mật khẩu phát triển/kiểm tra/sản xuất được lưu trong ba tệp khác nhau và tệp thích hợp được sử dụng trong quá trình triển khai. Tất cả điều này là cam kết kiểm soát phiên bản, nhưng tôi không quá hài lòng với điều đó vì không phải tất cả các nhà phát triển đều cần phải biết những mật khẩu đó (đặc biệt là thuê ngoài, chỉ có quyền truy cập trong khi dự án của họ kéo dài, có thể chỉ một tháng).

mật khẩu lưu trữ trong cơ sở dữ liệu không phải là một lựa chọn tuyệt vời:

  • Tôi cần hầu hết các dữ liệu trong thời gian khởi tạo của bối cảnh mùa xuân (ứng dụng Java), và tôi không muốn xây dựng giàn giáo để kết nối với một một cơ sở dữ liệu, và sau đó kết nối với phần còn lại của cơ sở dữ liệu và khởi tạo phần còn lại của ứng dụng
  • một số mật khẩu chỉ liên quan đến triển khai; mật khẩu để truy cập các máy chủ, kho khóa khác nhau, v.v. đó là những ứng dụng mà mọi thứ không thể tải sau khi nó bắt đầu, vì nó không tải nó ở tất cả

Tôi đang nghĩ về việc di chuyển cấu hình triển khai từ máy nhà phát triển sang máy tính chuyên dụng kiểm tra mã từ điều khiển phiên bản và chạy kịch bản xây dựng/triển khai, nhưng tôi không thực sự chắc chắn đó là cách tốt nhất để làm điều đó.

Tôi cũng cần phải nói rằng tôi không muốn bảo mật tối hậu: Tôi chỉ muốn tránh có mật khẩu trên mỗi đĩa của nhà phát triển và làm cho nó quá dễ dàng.

Vì vậy, tôi yêu cầu trải nghiệm/phương pháp hay nhất của bạn. Bạn làm nó như thế nào?

Trả lời

8

Thuộc tính cấu hình dành riêng cho môi trường Tôi có xu hướng đưa vào, một tệp thuộc tính không nằm trong kiểm soát nguồn và không phải là một phần của quá trình xây dựng. Khi thiết lập môi trường mới, một phần của thiết lập đó là đặt tệp tạo thuộc tính bao gồm những thứ như địa chỉ cơ sở dữ liệu, thông tin đăng nhập và tên, tên của máy chủ từ xa có liên quan, v.v.

Vào mùa xuân, bạn sử dụng PropertyPlaceholderConfigurer để tải tệp thuộc tính. Nó chỉ cần được tìm thấy bởi Spring, mà thường chỉ có nghĩa là đặt nó vào một thư mục thích hợp dưới máy chủ ứng dụng.

Hoặc, bạn sử dụng wrapper để chạy máy chủ ứng dụng và tùy chọn khởi động JVM bao gồm thêm các tệp thuộc tính này vào đường dẫn lớp để Spring có thể tìm thấy chúng.

6

Tôi đã nhìn thấy hai phương pháp sau:

  • Move các mật khẩu vào một cây tầm kiểm soát nguồn mà các nhà phát triển không có quyền truy cập vào.
  • Không đặt bất kỳ mật khẩu nào vào kiểm soát nguồn và người quản lý xây dựng chuyên dụng cần nhập mật khẩu mỗi khi triển khai xong. Đây là một ngân hàng nơi có một anh chàng toàn thời gian làm việc về xây dựng quy trình/sáp nhập/phát hành.
+1

Giữ mật khẩu trên một chi nhánh khác có vẻ như là cách để đi. Các SCM được phân phối như git khiến việc này trở nên rất dễ dàng. – hgmnz

3

Điều này không có tác dụng trong mọi trường hợp, nhưng đây là nơi mà sự vinh quang của việc sử dụng dịch vụ NT AUTHORITY \ NETWORK SERVICE như danh tính dịch vụ của bạn. Nếu bạn sử dụng nhận dạng này, bạn không cần phải duy trì mật khẩu cho nó - bạn chỉ có thể sử dụng thông tin đăng nhập AD của Máy tính dưới dạng DOMAINNAME \ MACHINENAME $ để thực hiện truy cập cơ sở dữ liệu và mạng được bảo vệ của bạn.

Có, tất nhiên, một số điều quan trọng cần chú ý - không ít nhất là không có hai ứng dụng chia sẻ ranh giới bảo mật được lưu trữ như thế này trên cùng một máy chủ.

0

Đặt mật khẩu trong biến môi trường người dùng o/s.

Chỉ người dùng hoặc thư mục gốc mới có thể đọc giá trị, giống như tệp, nhưng không có cơ hội được kiểm tra vào kiểm soát nguồn.

0

Thay vì không lưu trữ chúng, bạn có thể lưu trữ chúng ở dạng được mã hóa. Vì vậy, bạn không có nỗi đau khi gửi tệp thông tin đăng nhập qua IM hoặc EMail mọi lúc một nhà phát triển mới bắt đầu ... Bạn chỉ cần nói cho họ biết mật khẩu chủ cụ thể của dự án một lần để họ có thể mã hóa thông tin xác thực.

+0

Một vấn đề với điều này, và một số gợi ý khác, là chìa khóa, tôi giả định, vẫn sẽ được lưu trữ trong mã ứng dụng. Bạn đề xuất giải mã mật khẩu như thế nào? Điều quan trọng chủ có thể làm việc nếu nó được nhập bằng tay, nhưng đó chỉ là lựa chọn tốt thứ hai. Tốt nhất là không bao giờ lưu trữ mật khẩu trong kiểm soát phiên bản, thậm chí được mã hóa. Tuy nhiên, việc có khóa chính có thể là tùy chọn tốt thứ hai, miễn là thông tin đăng nhập được thực hiện theo cách chỉ cho phép tài khoản cần truy cập (CHỌN nếu không cần cập nhật hoặc xóa, và chỉ trên bảng cần thiết) – adpro

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