Tôi có hai ứng dụng sử dụng Bảo mật tích hợp. Một gán Integrated Security = true
trong chuỗi kết nối và các bộ khác Integrated Security = SSPI
.
Sự khác biệt giữa SSPI
và true
trong bối cảnh của Bảo mật tích hợp là gì?
Tôi có hai ứng dụng sử dụng Bảo mật tích hợp. Một gán Integrated Security = true
trong chuỗi kết nối và các bộ khác Integrated Security = SSPI
.
Sự khác biệt giữa SSPI
và true
trong bối cảnh của Bảo mật tích hợp là gì?
Câu trả lời:
Theo Microsoft họ là những điều tương tự.
Khi
false
, ID người dùng và mật khẩu được chỉ định trong kết nối. Khi đúng, thông tin đăng nhập tài khoản Windows hiện tại được sử dụng để xác thực.
Giá trị nhận đượctrue
,false
,yes
,no
, vàsspi
(khuyên), tương đương vớitrue
.
Integrated Security=true;
không hoạt động trong tất cả các nhà cung cấp SQL, nó ném một ngoại lệ khi được sử dụng với OleDb
nhà cung cấp.
Vì vậy, về cơ bản Integrated Security=SSPI;
được ưa thích vì hoạt động với cả SQLClient
&OleDB
nhà cung cấp.
Đây là bộ cú pháp đầy đủ theo MSDN - Cú pháp chuỗi kết nối (ADO.NET)
Sử dụng xác thực Windows
Để kết nối với máy chủ cơ sở dữ liệu, nên sử dụng Windows xác thực, thường được gọi là bảo mật tích hợp. Để chỉ định xác thực Windows, bạn có thể sử dụng bất kỳ cặp nào trong hai cặp khóa-giá trị sau với nhà cung cấp dữ liệu. NET Framework cho SQL Server:
Integrated Security = true;
Integrated Security = SSPI;
Tuy nhiên, chỉ có thứ hai hoạt động với nhà cung cấp dữ liệu .NET Framework OleDb . Nếu bạn đặt Integrated Security = true
cho ConnectionString, một ngoại lệ sẽ được đưa ra.
Để chỉ định xác thực Windows trong nhà cung cấp dữ liệu. NET Framework cho ODBC, bạn nên sử dụng cặp khóa-giá trị sau.
Trusted_Connection = yes;
Nhiều câu hỏi nhận được câu trả lời nếu chúng ta sử dụng .Net Reflector
để xem mã thực tế của SqlConnection
:)
true
và sspi
giống nhau:
internal class DbConnectionOptions
...
internal bool ConvertValueToIntegratedSecurityInternal(string stringValue)
{
if ((CompareInsensitiveInvariant(stringValue, "sspi") || CompareInsensitiveInvariant(stringValue, "true")) || CompareInsensitiveInvariant(stringValue, "yes"))
{
return true;
}
}
...
EDIT 20.02.2018 Bây giờ trong .Net Core, chúng ta có thể thấy nguồn mở của nó trên github! Tìm kiếm phương thức ConvertValueToIntegratedSecurityI Internalal:
ConvertValueToIntegratedSecurityInternal
. Thuộc tính đó chỉ được sử dụng khi nhà cung cấp SqlClient
ở trong SqlClient
, SSPI
& true
giống nhau nhưng không phải khi khách hàng là OleDb
hoặc OracleClient
. Tôi đã làm rõ rằng trong stackoverflow.com/a/23637478/704008 với tham chiếu
Tích hợp bảo mật = Sai: ID người dùng và mật khẩu được chỉ định trong kết nối. Tích hợp bảo mật = true: thông tin đăng nhập tài khoản Windows hiện tại được sử dụng để xác thực.
Bảo mật tích hợp = SSPI: điều này tương đương với đúng.
Chúng tôi có thể tránh các thuộc tính tên người dùng và mật khẩu từ chuỗi kết nối và sử dụng Bảo mật tích hợp
Hãy để tôi bắt đầu với Integrated Security = false
false
ID người dùng và mật khẩu được chỉ định trong chuỗi kết nối.
true
Thông tin tài khoản Windows được sử dụng để xác thực.
Giá trị công nhận là true
, false
,yes
, no
, vàSSPI
.
Nếu User ID
và Password
được quy định và an ninh tích hợp được thiết lập để true
, sau đó User ID
và Password
sẽ bị bỏ qua và an ninh tích hợp sẽ được sử dụng
Lưu ý rằng các chuỗi kết nối là cụ thể cho những gì và cách bạn đang kết nối với dữ liệu. Chúng đang kết nối với cùng một cơ sở dữ liệu nhưng đầu tiên là sử dụng .NET Framework Data Carrier cho SQL Server. Bảo mật tích hợp = True sẽ không hoạt động đối với OleDb.
Khi nghi ngờ, hãy sử dụng Kết nối dữ liệu Visual Studio Server Explorer.
True chỉ hợp lệ nếu bạn đang sử dụng thư viện .NET SqlClient. Nó không hợp lệ khi sử dụng OLEDB. Trong đó SSPI được trả tiền trong cả hai bạn đang sử dụng thư viện .net SqlClient hoặc OLEDB.
Theo quan điểm của tôi,
Nếu bạn không sử dụng Tích hợp bảo mật = SSPI, thì bạn cần mã hóa tên người dùng và mật khẩu trong chuỗi kết nối có nghĩa là "tương đối không an toàn" tại sao bởi vì, tất cả các nhân viên đều có quyền truy cập ngay cả nhân viên cũ có thể sử dụng thông tin độc hại.
Integrated Security = True
hoặcSSPI
không giống nhau.Integrated Security=true;
không hoạt động trong tất cả các nhà cung cấp SQL, nó ném một ngoại lệ khi được sử dụng vớiOleDb
nhà cung cấp. Vì vậy, về cơ bảnIntegrated Security=SSPI;
được ưa thích vì làm việc với cảSQLClient
&OleDB
nhà cung cấp. Tôi đã thêm một câu trả lời để làm rõ hơn.