SQL Server Yerel İstemci Şifrelerini Programatik Olarak Değiştirme

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform System (PDW)

Important

SQL Server Native Client (SNAC) ile birlikte gönderilmez:

  • SQL Server 2022 (16.x) ve sonraki sürümleri
  • SQL Server Management Studio 19 ve sonraki sürümleri

YENI uygulama geliştirme için SQL Server Yerel İstemcisi (SQLNCLI veya SQLNCLI11) ve SQL Server için eski Microsoft OLE DB Sağlayıcısı (SQLOLEDB) önerilmez.

Yeni projeler için aşağıdaki sürücülerden birini kullanın:

SQL Server Veritabanı Altyapısı'nın (sürüm 2012 ile 2019 arasında) bir bileşeni olarak gelen SQLNCLI için, Destek Yaşam Döngüsü özel durumukonusuna bakın.

SQL Server 2005 (9.x) öncesinde, bir kullanıcının şifresi süresi dolduğunda, sadece bir yönetici şifreyi sıfırlayabiliyordu. SQL Server 2005 (9.x) ile itibaren, SQL Server Native Client hem SQL Server Native Client OLE DB sağlayıcısı hem de SQL Server Native Client ODBC sürücüsü aracılığıyla ve SQL Server Giriş Giriş Kutusundaki değişikliklerle şifre süresi dolmasını programatik olarak işlemeyi destekler.

Note

Mümkünse, kullanıcılara kimlik bilgilerini çalışma zamanı girmelerini söyler ve kimlik bilgilerini kalıcı bir formatta saklamalarını önlemek. Kimlik bilgilerini korumak zorundaysanız, onları Win32 kripto API'si ile şifrelemelisiniz. Şifrelerin kullanımı hakkında daha fazla bilgi için Güçlü Şifreler bölümüne bakınız.

SQL Server Giriş Hata Kodları

Kimlik doğrulama sorunları nedeniyle bağlantı kurulamazsa, aşağıdaki SQL Server hata kodlarından biri uygulamaya tanı ve kurtarma için yardımcı olur.

SQL Server Hata Kodu Hata mesajı
15113 Kullanıcı '%.*ls' için giriş başarısız oldu Neden: Şifre doğrulaması başarısız oldu. Hesap kilitlendi.
18463 '%.*ls' kullanıcısı için oturum açılamadı. Neden: Parola değişikliği başarısız oldu. Parola şu anda kullanılamaz.
18464 '%.*ls' kullanıcısı için oturum açılamadı. Neden: Parola değişikliği başarısız oldu. Parola çok kısa olduğundan ilke gereksinimlerini karşılamıyor.
18465 '%.*ls' kullanıcısı için oturum açılamadı. Neden: Parola değişikliği başarısız oldu. Şifre politika gereksinimlerini karşılamaz çünkü çok uzun.
18466 '%.*ls' kullanıcısı için oturum açılamadı. Neden: Parola değişikliği başarısız oldu. Parola, yeterince karmaşık olmadığından ilke gereksinimlerini karşılamıyor.
18467 '%.*ls' kullanıcısı için oturum açılamadı. Neden: Parola değişikliği başarısız oldu. Parola, parola filtresi DLL'sinin gereksinimlerini karşılamıyor.
18468 '%.*ls' kullanıcısı için oturum açılamadı. Neden: Parola değişikliği başarısız oldu. Parola doğrulaması sırasında beklenmeyen bir hata oluştu.
18487 '%.*ls' kullanıcısı için oturum açılamadı. Sebep: Hesabın şifresinin süresi doldu.
18488 '%.*ls' kullanıcısı için oturum açılamadı. Neden: Hesabın parolası değiştirilmelidir.

SQL Server Native ClientSQL Server Native Client OLE DB Provider

SQL Server Native Client OLE veritabanı sağlayıcısı, kullanıcı arayüzü ve programatik olarak şifre süresi dolmasını destekler.

OLE DB Kullanıcı Arayüzü Şifre Süresi Dolması

SQL Server Native Client OLE veritabanı sağlayıcısı, SQL Server Giriş Giriş Kutusunda yapılan değişikliklerle şifre süresi dolmasını destekler. DBPROP_INIT_PROMPT değeri DBPROMPT_NOPROMPT olarak ayarlanmışsa, şifre süresi dolduysa ilk bağlantı girişimi başarısız olur.

Eğer DBPROP_INIT_PROMPT başka bir değere ayarlanmışsa, kullanıcı şifrenin süresi dolup olmadığına bakılmaksızın SQL Server Giriş diyalogunu görür. Kullanıcı, şifreyi değiştirmek için Seçenekler butonuna tıklayabilir ve Şifreyi Değiştir seçeneğini işaretleyebilir.

Kullanıcı OK tuşuna tıklarsa ve şifrenin süresi dolmuşsa, SQL Server kullanıcıya SQL Server Şifresini Değiştir diyalogundan yeni bir şifre girip onaylamasını ister.

OLE DB İstem Davranışı ve Kilitli Hesaplar

Bağlantı girişimleri hesabın kilitlenmesi nedeniyle başarısız olabilir. Bu, SQL Server Giriş Diyalogu görüntülendikten sonra gerçekleşirse, sunucu hata mesajı kullanıcıya gösterilir ve bağlantı girişimi iptal edilir. Ayrıca, kullanıcı eski şifre için kötü bir değer girerse SQL Server Şifresini Değiştir diyalogunun görüntülenmesinden sonra da meydana gelebilir. Bu durumda aynı hata mesajı gösterilir ve bağlantı girişimi iptal edilir.

OLE DB Bağlantı Havuzu, Şifre Süresi ve Kilitli Hesaplar

Bir hesap kilitlenebilir veya şifresi bağlantı havuzunda aktif iken süresi dolabilir. Sunucu, iki kez süresi dolmuş şifreleri ve kilitli hesapları kontrol ediyor. İlki, bir bağlantının ilk kez kurulduğu zamandır. İkinci durum, bağlantı havuzdan alındığında bağlantı sıfırlandığında gerçekleşir.

Sıfırlama girişimi başarısız olduğunda, bağlantı havuzdan kaldırılır ve hata geri döner.

OLE DB Programatik Şifre Süresi

SQL Server Native Client OLE DB sağlayıcısı, DBPROPSET_SQLSERVERDBINIT özellik setine eklenen SSPROP_AUTH_OLD_PASSWORD (tip VT_BSTR) özelliğinin eklenmesiyle şifre süresi dolmasını destekler.

Mevcut "Password" özelliği DBPROP_AUTH_PASSWORD ifade eder ve yeni şifreyi depolamak için kullanılır.

Note

bağlantı dizesi "Eski Şifre" özelliği SSPROP_AUTH_OLD_PASSWORD ayar, bu mevcut (muhtemelen süresi dolmuş) ve sağlayıcı dizisi özelliği aracılığıyla erişilemeyen şifredir.

Sağlayıcı, bu mülkün değerini ısrarla belirtmez. Bu özellik ayarlandığında, sağlayıcı ilk bağlantı için bağlantı havuzunu kullanmaz çünkü yeni bir bağlantı oluşur. Şifre değişikliği başarılı olursa, mevcut bağlantı tekrar kullanılamaz çünkü eski şifre hâlâ geçersiz olur. Ayrıca, giriş başarılı olursa, sağlayıcı bu mülkü temizler. Eski şifreyi geri almak için yapılan sonraki denemeler VT_EMPTY sonuç veriyor.

Note

SSPROP_AUTH_OLD_PASSWORD asla devam ettirilmemelidir çünkü sadece bir şifre süresi dolduğunda kullanılır.

"Eski Şifre" özelliği ayarlandığında, sağlayıcı şifreyi değiştirme girişiminde olduğunu varsayar, ancak Windows Kimlik Doğrulaması da belirtilmedikçe her zaman öncelik alır.

Eğer Windows Kimlik Doğrulama kullanılırsa, eski şifreyi belirtmek, eski şifrenin sırasıyla ZORUNLU veya ISTEĞE BAĞLI olarak belirtilmesine bağlı olarak DB_E_ERRORSOCCURRED veya DB_S_ERRORSOCCURRED ile sonuçlanır ve dwStatus'ta DBPROPSTATUS_CONFLICTINGBADVALUE durum değeri döner. Bu, IDBInitialize::Initialize çağrıldığında tespit edilir.

Şifreyi değiştirme girişimi beklenmedik şekilde başarısız olursa, sunucu 18468 hata kodu döndürür. Bağlantı girişiminden standart bir OLEDB hatası döner.

DBPROPSET_SQLSERVERDBINIT özellik kümesi hakkında daha fazla bilgi için Başlatma ve Yetkilendirme Özellikleri bölümlerine bakınız.

SQL Server Yerel İstemci ODBC Sürücüsü

SQL Server Native Client OLE veritabanı sağlayıcısı, kullanıcı arayüzü ve programatik olarak şifre süresi dolmasını destekler.

ODBC Kullanıcı Arayüzü Şifre Süresi Dolması

SQL Server Native Client ODBC sürücüsü, SQL Server Giriş iletişim kutularında yapılan değişikliklerle şifre süresi dolmasını destekler.

Eğer SQLDriverConnect çağrılırsa ve DriverCompletion değeri SQL_DRIVER_NOPROMPT olarak ayarlanmışsa, şifre süresi dolduysa ilk bağlantı girişimi başarısız olur. SQLSTATE değeri 28000 ve yerel hata kodu değeri 18487, sonraki çağrılarla SQLError veya SQLGetDiagRec ile döndürülür.

DriverCompletion başka bir değere ayarlanmışsa, kullanıcı şifrenin süresi dolup olmadığına bakılmaksızın SQL Server Giriş Girişi diyalogunu görür. Kullanıcı, şifreyi değiştirmek için Seçenekler butonuna tıklayabilir ve Şifreyi Değiştir seçeneğini işaretleyebilir.

Kullanıcı OK tuşuna tıklarsa ve şifrenin süresi dolduğunda, SQL Server Change SQL Server Şifresi diyalogunu kullanarak yeni bir şifre girip onaylamasını ister.

ODBC İstem Davranışı ve Kilitli Hesaplar

Bağlantı girişimleri hesabın kilitlenmesi nedeniyle başarısız olabilir. Bu, SQL Server Giriş Diyalogu görüntülendikten sonra gerçekleşirse, sunucu hata mesajı kullanıcıya gösterilir ve bağlantı girişimi iptal edilir. Ayrıca, kullanıcı eski şifre için kötü bir değer girerse SQL Server Şifresini Değiştir diyalogunun görüntülenmesinden sonra da meydana gelebilir. Bu durumda aynı hata mesajı gösterilir ve bağlantı girişimi iptal edilir.

ODBC Bağlantı Havuzu, Şifre Süresi Dolması ve Kilitli Hesaplar

Bir hesap kilitlenebilir veya şifresi bağlantı havuzunda aktif iken süresi dolabilir. Sunucu, iki kez süresi dolmuş şifreleri ve kilitli hesapları kontrol ediyor. İlki, bir bağlantının ilk kez kurulduğu zamandır. İkinci durum, bağlantı havuzdan alındığında bağlantı sıfırlandığında gerçekleşir.

Sıfırlama girişimi başarısız olduğunda, bağlantı havuzdan kaldırılır ve hata geri döner.

ODBC Programatik Şifre Süresi Sonu

SQL Server Native Client ODBC sürücüsü, SQLSetConnectAttr fonksiyonuyla sunucuya bağlanmadan önce ayarlanan SQL_COPT_SS_OLDPWD özniteliğinin eklenmesiyle şifre süresi dolmasını destekler.

Bağlantı kolunun SQL_COPT_SS_OLDPWD özniteliği, süresi dolmuş şifreyi ifade eder. Bu öznitelik için bir bağlantı dizesi özniteliği yoktur, çünkü bu bağlantı havuzuna müdahale eder. Giriş başarılı olursa, sürücü bu özniteliği temizler.

SQL Server Native Client ODBC sürücüsü bu özellik için dört durumda SQL_ERROR geri döner: şifre süresi dolmak, şifre politikası çakışması, hesap kilitlenmesi ve eski şifre özelliği Windows Kimlik Doğrulama kullanılırken ayarlandığında. Sürücü, SQLGetDiagField çağrıldığında kullanıcıya uygun hata mesajlarını döndürür.

  • SQL Server Yerel İstemci Özelliklerini