Apa perbedaan antara Keamanan Terpadu = Benar dan Keamanan Terpadu = SSPI?

531

Saya memiliki dua aplikasi yang menggunakan Keamanan Terpadu. Satu ditugaskan Integrated Security = truedi string koneksi, dan set lainnya Integrated Security = SSPI.

Apa perbedaan antara SSPIdan truedalam konteks Keamanan Terpadu?

JD.
sumber
70
Jawaban yang diterima bukan yang terbaik, juga tidak sepenuhnya benar. Integrated Security = Trueatau SSPItidak sama. Integrated Security=true;tidak bekerja di semua penyedia SQL, itu membuat pengecualian ketika digunakan dengan OleDbpenyedia. Jadi pada dasarnya Integrated Security=SSPI;lebih disukai karena bekerja dengan SQLClient& OleDBpenyedia. Saya telah menambahkan jawaban untuk klarifikasi yang lebih baik.
Pranav Singh
3
@ ParranSingh memiliki ide yang tepat, pertanyaan ini tidak lengkap kecuali Anda menentukan penyedia yang Anda gunakan. Penyedia berbeda menerima dan / atau menerjemahkan berbagai string ke status internal.
Markus
Meskipun mereka sama, saya percaya bahwa ada dokumen yang sangat lama di salah satu situs web, pada saat itu saya ingin tahu sama seperti Anda, yang mengatakan jika Anda mengembangkan untuk windows mobile (bukan apa yang Anda lihat hari ini, perangkat lama yang saya tidak ingat akhiran OS karena saya tidak pernah memilikinya), Anda harus menggunakan SSPI, dan Kata Sandi Pengguna bersama. tetapi karena saya tidak pernah menulis satu, dan saya tidak ingat sumber dokumen itu, saya tidak dapat menjaminnya.
deadManN

Jawaban:

436

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 diakui true, false, yes, no, dan sspi(sangat dianjurkan), yang setara dengan true.

cptScarlet
sumber
28
Awalnya, saya pikir ada perbedaan bahwa "Benar" menggunakan NTLM dan "SSPI" menggunakan Kerberos, tetapi mereka sekarang dipertukarkan.
SqlRyan
5
Tidak memeriksa komentar terakhir, tetapi jika benar, harus sebagai jawaban, tetapi bukan komentar
Johnny_D
20
@ RadneyFoley maaf, tes saya mengkonfirmasi bahwa jawaban ini benar dan komentar Anda tidak. Mungkin berhasil sekali, tetapi tidak sekarang, dan Anda tidak dapat memberikan referensi ke dokumen Microsoft yang mendukung pendapat Anda.
Kirk Broadhurst
3
Setuju dengan Kirk. Pengguna / kata sandi diabaikan ketika SSPI ditentukan - .net 4.0, SQL server 2012.
Alex des Pelagos
3
Jadi jika mereka "adalah hal yang sama" mengapa SSPI "sangat direkomendasikan" daripada "benar" atau "ya? Itulah alasan mengapa saya sampai pada pertanyaan ini ...
Zé Carlos
171

Integrated Security=true;tidak bekerja di semua penyedia SQL, itu membuat pengecualian ketika digunakan dengan OleDbpenyedia.

Jadi pada dasarnya Integrated Security=SSPI;lebih disukai karena bekerja dengan SQLClient& OleDBpenyedia.

Berikut ini set lengkap sintaksis menurut MSDN - Connection String Syntax (ADO.NET)

! [Sintaks Windows Auth

Pranav Singh
sumber
73

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 = trueuntuk ConnectionString pengecualian dilemparkan.

Untuk menentukan otentikasi Windows di penyedia data. NET Framework untuk ODBC, Anda harus menggunakan pasangan kunci-nilai berikut.

Trusted_Connection = yes;

Sumber: MSDN: Bekerja dengan String Koneksi

Asereware
sumber
33

Banyak pertanyaan mendapatkan jawaban jika kita gunakan .Net Reflectoruntuk melihat kode SqlConnection:) yang sebenarnya truedan sspisama:

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:

https://github.com/dotnet/corefx/blob/fdbb160aeb0fad168b3603dbdd971d568151a0c8/src/System.Data.SqlClient/src/System/Data/Common/DbConnectionOptions.cs

Pavel Biryukov
sumber
2
Bagian kode itu adalah properti hanya untuk satu kasus yang dapat dijelaskan dengan namanya ConvertValueToIntegratedSecurityInternal. Properti itu hanya digunakan ketika provider berada SqlClientdi SqlClient, SSPI& truesama tetapi tidak ketika klien OleDbatau OracleClient. Saya telah mengklarifikasi bahwa dalam stackoverflow.com/a/23637478/704008 dengan referensi msdn
Pranav Singh
Turunkan suara untuk alasan Pranav di sini.
Scott
21

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

NITIN KAUSHIK
sumber
13

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 IDdan Passwordditentukan dan Keamanan Terpadu diatur ke true, maka User IDdan Passwordakan diabaikan dan Keamanan Terpadu akan digunakan

kudlatiger
sumber
7

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.

  • Sumber Data = .; Katalog Awal = aspnetdb; Keamanan Terpadu = Benar
  • Penyedia = SQLOLEDB; Sumber Data =.; Keamanan Terpadu = SSPI; Katalog Awal = aspnetdb

Jika ragu gunakan Koneksi Data Visual Studio Server Explorer.

pengguna1874524
sumber
5

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.

Amit Shishodia
sumber
2

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.

Sathishkumar
sumber
1
String koneksi belum tentu terlihat oleh karyawan mana pun.
underscore_d