Mengubah Kata Sandi Klien Asli SQL Server Secara Terprogram

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Penting

SQL Server Native Client (sering disingkat SNAC) telah dihapus dari SQL Server 2022 (16.x) dan SQL Server Management Studio 19 (SSMS). SQL Server Native Client (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan aplikasi baru. Beralih ke Microsoft OLE DB Driver (MSOLEDBSQL) baru untuk SQL Server atau Microsoft ODBC Driver terbaru untuk SQL Server ke depannya. Untuk SQLNCLI yang dikirim sebagai komponen SQL Server Database Engine (versi 2012 hingga 2019), lihat pengecualian Siklus Hidup Dukungan ini.

Sebelum SQL Server 2005 (9.x), ketika kata sandi pengguna kedaluwarsa, hanya administrator yang dapat meresetnya. Dimulai dengan SQL Server 2005 (9.x), SQL Server Native Client mendukung penanganan kedaluwarsa kata sandi secara terprogram melalui penyedia OLE DB SQL Server Native Client dan driver ODBC SQL Server Native Client, dan melalui perubahan pada kotak dialog Masuk SQL Server.

Catatan

Jika memungkinkan, minta pengguna untuk memasukkan kredensial mereka pada waktu proses dan menghindari penyimpanan kredensial mereka dalam format yang bertahan. Jika Anda harus mempertahankan kredensialnya, Anda harus mengenkripsinya menggunakan API kripto Win32. Untuk informasi selengkapnya tentang penggunaan kata sandi, lihat Kata Sandi Yang Kuat.

Kode Kesalahan Masuk SQL Server

Ketika koneksi tidak dapat dibuat karena masalah autentikasi, salah satu kode kesalahan SQL Server berikut akan tersedia untuk aplikasi untuk membantu diagnosis dan pemulihan.

Kode Kesalahan SQL Server Pesan kesalahan
15113 Gagal masuk untuk pengguna '%.*ls' Alasan: Validasi kata sandi gagal. Akun terkunci.
18463 Gagal masuk untuk pengguna '%.*ls'. Alasan: Perubahan kata sandi gagal. Kata sandi tidak dapat digunakan saat ini.
18464 Gagal masuk untuk pengguna '%.*ls'. Alasan: Perubahan kata sandi gagal. Kata sandi tidak memenuhi persyaratan kebijakan karena terlalu singkat.
18465 Gagal masuk untuk pengguna '%.*ls'. Alasan: Perubahan kata sandi gagal. Kata sandi tidak memenuhi persyaratan kebijakan karena terlalu panjang.
18466 Gagal masuk untuk pengguna '%.*ls'. Alasan: Perubahan kata sandi gagal. Kata sandi tidak memenuhi persyaratan kebijakan karena tidak cukup kompleks.
18467 Gagal masuk untuk pengguna '%.*ls'. Alasan: Perubahan kata sandi gagal. Kata sandi tidak memenuhi persyaratan DLL filter kata sandi.
18468 Gagal masuk untuk pengguna '%.*ls'. Alasan: Perubahan kata sandi gagal. Terjadi kesalahan tak terduga selama validasi kata sandi.
18487 Gagal masuk untuk pengguna '%.*ls'. Alasan: Kata sandi akun telah kedaluwarsa.
18488 Gagal masuk untuk pengguna '%.*ls'. Alasan: Kata sandi akun harus diubah.

Penyedia OLE DB Klien Asli SQL Server

Penyedia SQL Server Native Client OLE DB mendukung kedaluwarsa kata sandi melalui antarmuka pengguna dan secara terprogram.

Kedaluwarsa Kata Sandi Antarmuka Pengguna OLE DB

Penyedia SQL Server Native Client OLE DB mendukung kedaluwarsa kata sandi melalui perubahan yang dilakukan pada kotak dialog Masuk SQL Server. Jika nilai DBPROP_INIT_PROMPT diatur ke DBPROMPT_NOPROMPT, upaya koneksi awal akan gagal jika kata sandi telah kedaluwarsa.

Jika DBPROP_INIT_PROMPT telah diatur ke nilai lain, pengguna melihat dialog Masuk SQL Server, terlepas dari apakah kata sandi telah kedaluwarsa atau tidak. Pengguna dapat mengklik tombol Opsi dan mencentang Ubah Kata Sandi untuk mengubah kata sandi.

Jika pengguna mengklik OK dan kata sandi telah kedaluwarsa, SQL Server meminta pengguna untuk memasukkan dan mengonfirmasi kata sandi baru menggunakan dialog Ubah Kata Sandi SQL Server.

Perilaku Prompt OLE DB dan Akun Terkunci

Upaya koneksi mungkin gagal karena akun dikunci. Jika ini terjadi setelah tampilan dialog Masuk SQL Server, pesan kesalahan server ditampilkan kepada pengguna dan upaya koneksi dibatalkan. Ini mungkin juga terjadi setelah tampilan dialog Ubah Kata Sandi SQL Server jika pengguna memasukkan nilai buruk untuk kata sandi lama. Dalam hal ini pesan kesalahan yang sama ditampilkan, dan upaya koneksi dibatalkan.

Pengumpulan Koneksi OLE DB, Kedaluwarsa Kata Sandi, dan Akun Terkunci

Akun mungkin dikunci atau kata sandinya mungkin kedaluwarsa saat koneksi masih aktif di kumpulan koneksi. Server memeriksa kata sandi yang kedaluwarsa dan akun terkunci pada dua kesempatan. Yang pertama adalah ketika koneksi pertama kali dibuat. Kesempatan kedua adalah setelah reset koneksi, ketika koneksi diambil dari kumpulan.

Ketika upaya reset gagal, koneksi dihapus dari kumpulan dan kesalahan dikembalikan.

Kedaluwarsa Kata Sandi Terprogram OLE DB

Penyedia SQL Server Native Client OLE DB mendukung kedaluwarsa kata sandi melalui penambahan properti SSPROP_AUTH_OLD_PASSWORD (jenis VT_BSTR) yang telah ditambahkan ke kumpulan properti DBPROPSET_SQLSERVERDBINIT.

Properti "Kata Sandi" yang ada mengacu pada DBPROP_AUTH_PASSWORD dan digunakan untuk menyimpan kata sandi baru.

Catatan

Dalam string koneksi, properti "Kata Sandi Lama" mengatur SSPROP_AUTH_OLD_PASSWORD, yang merupakan kata sandi saat ini (mungkin kedaluwarsa) yang tidak tersedia melalui properti string penyedia.

Penyedia tidak mempertahankan nilai properti ini. Ketika properti ini diatur, penyedia tidak menggunakan kumpulan koneksi untuk koneksi pertama karena koneksi baru akan terjadi. Jika perubahan kata sandi berhasil, koneksi saat ini tidak dapat digunakan kembali karena masih berisi kata sandi lama, yang akan tidak valid setelah perubahan kata sandi. Selain itu, jika login berhasil, penyedia akan menghapus properti ini. Upaya berikutnya untuk mengambil VT_EMPTY pengembalian kata sandi lama.

Catatan

SSPROP_AUTH_OLD_PASSWORD tidak boleh dipertahankan karena hanya digunakan ketika kata sandi telah kedaluwarsa.

Perhatikan bahwa setiap kali properti "Kata Sandi Lama" diatur, penyedia mengasumsikan bahwa upaya untuk mengubah kata sandi sedang dibuat, kecuali Autentikasi Windows juga ditentukan, dalam hal ini selalu diutamakan.

Jika Autentikasi Windows digunakan, menentukan hasil kata sandi lama dalam DB_E_ERRORSOCCURRED atau DB_S_ERRORSOCCURRED tergantung pada apakah kata sandi lama ditentukan sebagai WAJIB atau OPSIONAL masing-masing, dan nilai status DBPROPSTATUS_CONFLICTINGBADVALUE dikembalikan dalam dwStatus. Ini terdeteksi ketika IDBInitialize::Initialize dipanggil.

Jika upaya untuk mengubah kata sandi gagal secara tiba-tiba, server mengembalikan kode kesalahan 18468. Kesalahan OLEDB standar dikembalikan dari upaya koneksi.

Untuk informasi selengkapnya tentang kumpulan properti DBPROPSET_SQLSERVERDBINIT, lihat Properti Inisialisasi dan Otorisasi.

Driver ODBC Klien Asli SQL Server

Penyedia SQL Server Native Client OLE DB mendukung kedaluwarsa kata sandi melalui antarmuka pengguna dan secara terprogram.

Kedaluwarsa Kata Sandi Antarmuka Pengguna ODBC

Driver ODBC Klien Asli SQL Server mendukung kedaluwarsa kata sandi melalui perubahan yang dilakukan pada kotak dialog Masuk SQL Server.

Jika SQLDriverConnect dipanggil dan nilai DriverCompletion diatur ke SQL_DRIVER_NOPROMPT, upaya koneksi awal gagal jika kata sandi telah kedaluwarsa. Nilai SQLSTATE 28000 dan nilai kode kesalahan asli 18487 dikembalikan oleh panggilan berikutnya ke SQLError atau SQLGetDiagRec.

Jika DriverCompletion telah diatur ke nilai lain, pengguna melihat dialog Masuk SQL Server, terlepas dari apakah kata sandi telah kedaluwarsa atau tidak. Pengguna dapat mengklik tombol Opsi dan mencentang Ubah Kata Sandi untuk mengubah kata sandi.

Jika pengguna mengklik OK dan kata sandi telah kedaluwarsa, SQL Server meminta untuk memasukkan dan mengonfirmasi kata sandi baru menggunakan dialog Ubah Kata Sandi SQL Server.

Perilaku Prompt ODBC dan Akun Terkunci

Upaya koneksi mungkin gagal karena akun dikunci. Jika ini terjadi setelah tampilan dialog Masuk SQL Server, pesan kesalahan server ditampilkan kepada pengguna dan upaya koneksi dibatalkan. Ini mungkin juga terjadi setelah tampilan dialog Ubah Kata Sandi SQL Server jika pengguna memasukkan nilai buruk untuk kata sandi lama. Dalam hal ini pesan kesalahan yang sama ditampilkan, dan upaya koneksi dibatalkan.

Pengumpulan Koneksi ODBC, Kedaluwarsa Kata Sandi, dan Akun Terkunci

Akun mungkin dikunci atau kata sandinya mungkin kedaluwarsa saat koneksi masih aktif di kumpulan koneksi. Server memeriksa kata sandi yang kedaluwarsa dan akun terkunci pada dua kesempatan. Yang pertama adalah ketika koneksi pertama kali dibuat. Kesempatan kedua adalah setelah reset koneksi, ketika koneksi diambil dari kumpulan.

Ketika upaya reset gagal, koneksi dihapus dari kumpulan dan kesalahan dikembalikan.

Kedaluwarsa Kata Sandi Terprogram ODBC

Driver ODBC SQL Server Native Client mendukung kedaluwarsa kata sandi melalui penambahan atribut SQL_COPT_SS_OLDPWD yang diatur sebelum menyambungkan ke server menggunakan fungsi SQLSetConnectAttr .

Atribut SQL_COPT_SS_OLDPWD handel koneksi mengacu pada kata sandi yang kedaluwarsa. Tidak ada atribut string koneksi untuk atribut ini, karena ini akan mengganggu pengumpulan koneksi. Jika login berhasil, driver akan menghapus atribut ini.

Driver ODBC Klien Asli SQL Server mengembalikan SQL_ERROR dalam empat kasus untuk fitur ini: kedaluwarsa kata sandi, konflik kebijakan kata sandi, penguncian akun, dan ketika properti kata sandi lama diatur saat menggunakan Autentikasi Windows. Driver mengembalikan pesan kesalahan yang sesuai kepada pengguna ketika SQLGetDiagField dipanggil.

Lihat Juga

Fitur Klien Asli SQL Server