2010-07-18 80 views

Trả lời

19

Cột varbinary có thể lưu trữ bất kỳ thứ gì. Để lưu trữ một chuỗi trong nó, bạn sẽ phải bỏ nó vào varbinary:

declare @t table (id int identity, pwd varbinary(50)) 
insert into @t (pwd) values (cast('secret' as varbinary(50))) 

Nhưng đối với một mật khẩu, một cột varbinary thường lưu trữ một hash của một số loại. Ví dụ, một băm SHA1 sử dụng HashBytes function:

insert into @t (pwd) values (HashBytes('sha1', 'secret')); 

Lưu trữ một hash một chiều thay vì mật khẩu thực sự là an toàn hơn. Bạn có thể kiểm tra xem mật khẩu có khớp không:

select * from @t where pwd = HashBytes('sha1', 'secret') 

Nhưng không có cách nào bạn có thể truy xuất mật khẩu bằng cách xem bảng. Vì vậy, chỉ người dùng cuối mới biết mật khẩu của mình và thậm chí cả DBA cũng không thể truy xuất được mật khẩu đó.

+0

Tôi có thể lưu trữ các tệp thô như một tệp âm thanh? – JerryGoyal

+0

@JerryGoyal yes. Một điều khác thường được thực hiện, là lưu trữ các tệp lớn hơn trên đĩa và chỉ lưu trữ đường dẫn tệp trong DB mặc dù – iliketocode

1

Bạn sẽ cần truyền rõ ràng VARCHAR.

SELECT CAST(N'Test' as VARBINARY) 

Thông báo lỗi SQL Server cho biết.

Chuyển đổi ngầm từ kiểu dữ liệu varchar thành varbinary không phải là cho phép.

1

SQL Server yêu cầu một chuyển đổi rõ ràng từ varchar to varbinary, theo bảng lớn trên CAST và CONVERT trong MSDN

Bảng sẽ có một cột varbinary để lưu trữ các giá trị băm theo sys.sql_logins

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