2009-05-18 101 views
39

Thực tiễn được khuyến nghị để lưu trữ mật khẩu người dùng trong SQL Server 2008 là gì?lưu trữ mật khẩu trong SQL Server

Tôi đang lưu trữ chi tiết người dùng cho mạng nội bộ và muốn nhận lời khuyên về cách tốt nhất để lưu trữ chi tiết người dùng như tên, mật khẩu và quyền truy cập của người dùng, v.v. Tôi đang nghĩ đến việc tạo cột nvarchar và sau đó mã hóa văn bản trước khi chèn vào bảng.

+2

Nếu đó là miền AD, bạn có thể cho phép xác thực xử lý AD không? – Rytmis

+0

Cảm ơn mọi người vì những gợi ý. Richard – Richard

Trả lời

2

thường là cách để thực hiện.

Ứng dụng của bạn sẽ xử lý việc mã hóa (và tùy chọn giải mã), cơ sở dữ liệu sẽ chỉ lưu trữ mật khẩu.

tôi khuyên bạn nên sử dụng một cái gì đó mạnh hơn defacto ngày - MD5

phát triển .net Hầu hết dường như thích sử dụng TDES

+0

Tôi đồng ý rằng bạn muốn đi với thứ gì đó mạnh hơn MD5 khi bạn có thể –

+3

MD5 không phải là thuật toán mã hóa, đó là thuật toán băm. http://en.wikipedia.org/wiki/MD5 –

+0

Đồng ý. Tôi đoán tôi đã không rõ ràng để bạn có được một lên :) –

2

T-Sql bao gồm chức năng mã hóa - 4Guys đã có một aa good article on it for SQL Server 2005 khi trở lại nhưng tôi nghĩ rằng nó tất cả vẫn áp dụng cho năm 2008.

+0

Bài viết đó là mã hóa khóa đối xứng. Mật khẩu phải được băm. – Swoogan

+0

Tôi đồng ý - bài viết tôi liên kết đến đáng kể. Đó là lý do tại sao tôi cá nhân upvoted câu trả lời của elazar-leibovich ở trên. –

7

Mã hóa cho dữ liệu nhạy cảm là tốt. Tuy nhiên, với mật khẩu, bạn không bao giờ cần phải biết giá trị ban đầu, và vì bất cứ thứ gì được mã hóa cũng có thể được giải mã, bạn đặt thông tin đó vào nguy cơ bị phát hiện.

Thay vào đó, bạn nên giữ một mã băm của mật khẩu. Quá trình này lấy giá trị và tạo ra số tiền cho một tổng kiểm tra rất phức tạp. Với số lượng, không có cách nào để quay trở lại mật khẩu ban đầu, làm tăng tính bảo mật của thông tin đó. Khi bạn muốn biết liệu ai đó đã cung cấp cho bạn mật khẩu chính xác, bạn băm giá trị mà họ đã cung cấp cho bạn và so sánh các băm.

Bảo mật là một chủ đề phức tạp. Ngay cả với băm, bạn có thể kết thúc có một hệ thống có lỗ hổng bảo mật đáng kể. Nhận được sự giúp đỡ của một nhà tư vấn bảo mật không phải là một ý tưởng tồi nếu không ai khác trong nhóm của bạn đã có loại kiến ​​thức đó.

+1

Rất đúng trong hầu hết các trường hợp. Cho rằng OP đang sử dụng trên mạng nội bộ, có thể có các trường hợp (tích hợp với các ứng dụng khác trên mạng nội bộ yêu cầu đăng nhập), nơi có thể truy xuất mật khẩu là hữu ích. –

53

Cách thông thường để lưu trữ mật khẩu, là sử dụng hàm băm trên mật khẩu, nhưng trước salt trước mật khẩu. Điều quan trọng là phải "muối" mật khẩu, để tự bảo vệ mình trước các cuộc tấn công rainbow table.

Vì vậy bảng của bạn sẽ giống như thế

._______._________________.______________. 
|user_id|hash    |salt   | 
|-------|-----------------|--------------| 
|12  |[email protected]|13%!#tQ!#3t...| 
|  |...    |...   | 

Khi kiểm tra nếu một mật khẩu cho phù hợp với người sử dụng, bạn nên nối thêm muối vào mật khẩu nhất định, và tính toán hàm băm của chuỗi kết quả. Nếu đầu ra hàm băm khớp với cột hash - đó là mật khẩu chính xác. Tuy nhiên, điều quan trọng là hiểu ý tưởng băm muối có lý do cụ thể - để ngăn chặn bất kỳ ai có quyền truy cập vào cơ sở dữ liệu khi biết mật khẩu của bất kỳ ai (nó được coi là vấn đề khó khăn để đảo ngược đầu ra hàm băm). Ví dụ: DBA của ngân hàng, sẽ không thể đăng nhập vào tài khoản ngân hàng của bạn, ngay cả khi anh ấy có quyền truy cập vào tất cả các cột.

Bạn cũng nên cân nhắc sử dụng nó nếu bạn cho rằng người dùng của mình sẽ sử dụng mật khẩu nhạy cảm (ví dụ mật khẩu của họ cho tài khoản gmail) làm mật khẩu cho trang web của bạn.

IMHO không phải lúc nào cũng là tính năng bảo mật cần thiết. Vì vậy, bạn nên suy nghĩ có hay không bạn muốn nó.

Xem this article để có bản tóm tắt tốt về cơ chế này.

Cập nhật: Điều đáng nói, để bảo mật thêm chống lại tấn công nhắm mục tiêu đảo ngược mã băm của mật khẩu cá nhân, bạn nên use bcrypt, có thể tùy ý tính toán. (Nhưng trừ khi bạn thực sự sợ người đàn ông bí ẩn đen nhắm vào cơ sở dữ liệu cụ thể của bạn, tôi nghĩ sha1 là đủ tốt. Tôi sẽ không giới thiệu một sự phụ thuộc nào khác cho dự án của tôi để bảo mật thêm nữa. 100 lần, sẽ tạo ra hiệu ứng tương tự).

+4

liên kết ở trên không hoạt động, nhưng [this] (http://msdn.microsoft.com/en-us/library/ff649202.aspx) một liên kết. – JumpingJezza

+1

@JumpingJezza, cảm ơn, nó đã từng hoạt động, tôi đang cập nhật liên kết –

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