Saya memiliki dua aplikasi yang menggunakan Keamanan Terpadu. Satu ditugaskan Integrated Security = true
di string koneksi, dan set lainnya Integrated Security = SSPI
.
Apa perbedaan antara SSPI
dan true
dalam konteks Keamanan Terpadu?
Saya memiliki dua aplikasi yang menggunakan Keamanan Terpadu. Satu ditugaskan Integrated Security = true
di string koneksi, dan set lainnya Integrated Security = SSPI
.
Apa perbedaan antara SSPI
dan true
dalam konteks Keamanan Terpadu?
Jawaban:
Menurut Microsoft mereka adalah hal yang sama.
Kapan
false
, ID Pengguna dan Kata Sandi ditentukan dalam koneksi. Ketika benar, kredensial akun Windows saat ini digunakan untuk otentikasi.
Nilai-nilai yang diakuitrue
,false
,yes
,no
, dansspi
(sangat dianjurkan), yang setara dengantrue
.
Integrated Security=true;
tidak bekerja di semua penyedia SQL, itu membuat pengecualian ketika digunakan dengan OleDb
penyedia.
Jadi pada dasarnya Integrated Security=SSPI;
lebih disukai karena bekerja dengan SQLClient
& OleDB
penyedia.
Berikut ini set lengkap sintaksis menurut MSDN - Connection String Syntax (ADO.NET)
Menggunakan Otentikasi Windows
Untuk terhubung ke server database dianjurkan untuk menggunakan Otentikasi Windows, umumnya dikenal sebagai keamanan terintegrasi. Untuk menentukan otentikasi Windows, Anda dapat menggunakan salah satu dari dua pasangan nilai kunci berikut dengan penyedia data. NET Framework untuk SQL Server:
Integrated Security = true;
Integrated Security = SSPI;
Namun, hanya yang kedua yang berfungsi dengan penyedia data .NET Framework OleDb . Jika Anda mengatur Integrated Security = true
untuk ConnectionString pengecualian dilemparkan.
Untuk menentukan otentikasi Windows di penyedia data. NET Framework untuk ODBC, Anda harus menggunakan pasangan kunci-nilai berikut.
Trusted_Connection = yes;
Banyak pertanyaan mendapatkan jawaban jika kita gunakan .Net Reflector
untuk melihat kode SqlConnection
:) yang
sebenarnya true
dan sspi
sama:
internal class DbConnectionOptions
...
internal bool ConvertValueToIntegratedSecurityInternal(string stringValue)
{
if ((CompareInsensitiveInvariant(stringValue, "sspi") || CompareInsensitiveInvariant(stringValue, "true")) || CompareInsensitiveInvariant(stringValue, "yes"))
{
return true;
}
}
...
EDIT 20.02.2018 Sekarang di .Net Core kita bisa melihat open source-nya di github! Cari metode ConvertValueToIntegratedSecurityInternal:
ConvertValueToIntegratedSecurityInternal
. Properti itu hanya digunakan ketika provider berada SqlClient
di SqlClient
, SSPI
& true
sama tetapi tidak ketika klien OleDb
atau OracleClient
. Saya telah mengklarifikasi bahwa dalam stackoverflow.com/a/23637478/704008 dengan referensi msdn
Keamanan Terintegrasi = Salah: ID Pengguna dan Kata Sandi ditentukan dalam koneksi. Keamanan Terpadu = benar: kredensial akun Windows saat ini digunakan untuk otentikasi.
Keamanan Terpadu = SSPI: ini setara dengan benar.
Kita dapat menghindari atribut nama pengguna dan kata sandi dari string koneksi dan menggunakan Keamanan Terpadu
Biarkan saya mulai dengan Integrated Security = false
false
ID Pengguna dan Kata Sandi ditentukan dalam string koneksi.
true
Kredensial akun Windows digunakan untuk otentikasi.
Nilai yang diakui adalah true
, false
, yes
, no
, dan SSPI
.
Jika User ID
dan Password
ditentukan dan Keamanan Terpadu diatur ke true
, maka User ID
dan Password
akan diabaikan dan Keamanan Terpadu akan digunakan
Perhatikan bahwa string koneksi khusus untuk apa dan bagaimana Anda menghubungkan ke data. Ini menghubungkan ke database yang sama tetapi yang pertama menggunakan .NET Framework Data Provider untuk SQL Server. Keamanan Terintegrasi = Benar tidak akan berfungsi untuk OleDb.
Jika ragu gunakan Koneksi Data Visual Studio Server Explorer.
True hanya valid jika Anda menggunakan pustaka .NET SqlClient. Itu tidak valid saat menggunakan OLEDB. Di mana SSPI adalah bvaid di kedua Anda menggunakan perpustakaan .net SqlClient atau OLEDB.
Dalam pandangan saya,
Jika Anda tidak menggunakan keamanan Terpadu = SSPI, maka Anda perlu membuat hardcode nama pengguna dan kata sandi dalam string koneksi yang berarti "relatif tidak aman" mengapa karena, semua karyawan memiliki akses bahkan mantan karyawan dapat menggunakan informasi tersebut dengan jahat.
Integrated Security = True
atauSSPI
tidak sama.Integrated Security=true;
tidak bekerja di semua penyedia SQL, itu membuat pengecualian ketika digunakan denganOleDb
penyedia. Jadi pada dasarnyaIntegrated Security=SSPI;
lebih disukai karena bekerja denganSQLClient
&OleDB
penyedia. Saya telah menambahkan jawaban untuk klarifikasi yang lebih baik.