SQL Server'a bağlanmak için Windows kimlik doğrulaması kullanılırken "SSPI bağlamı oluşturulamıyor" hatası

Şunlar için geçerlidir: SQL Server
Orijinal BB numarası: 811889

Not

Sorun gidermeye başlamadan önce önkoşulları denetlemenizi ve denetim listesini gözden geçirmenizi öneririz.

Bir SQL Server örneğini uzaktan bağlamak için Windows kimlik doğrulamasını kullandığınızda aşağıdaki hata iletisini alırsınız:

Hedef asıl adı yanlış. SSPI bağlamı oluşturulamıyor.

Sık sorulan sorular

SSPI nedir?

Güvenlik Destek Sağlayıcısı Arabirimi (SSPI), TCP/IP yuvaları gibi herhangi bir genel veri aktarım katmanı üzerinde temsilci seçmeye ve karşılıklı kimlik doğrulamasına izin veren bir Windows API'leri kümesidir. Bir veya daha fazla yazılım modülü gerçek kimlik doğrulama özelliklerini sağlar. Her modül Güvenlik Destek Sağlayıcısı (SSP) olarak adlandırılır ve Dinamik Bağlantı Kitaplığı (DLL) olarak uygulanır.

Kerberos nedir?

Kerberos v5 protokolü endüstri standardı bir güvenlik paketidir ve Windows işletim sistemlerindeki üç güvenlik paketinden biridir. Daha fazla bilgi için bkz. Güvenlik Destek Sağlayıcıları (SSP).

"SSPI bağlamı oluşturulamıyor" hatası ne anlama gelir?

Bu hata, SSPI'nin SQL Server için TCP/IP veya Adlandırılmış Kanallar aracılığıyla istemci kimlik bilgilerini temsilci olarak atamak için Kerberos kimlik doğrulamasını deneyebileceği ancak kullanamayacağı anlamına gelir. Çoğu durumda, yanlış yapılandırılmış bir Hizmet Asıl Adı (SPN) bu hataya neden olur.

SPN nedir?

Hizmet Asıl Adları (SPN), bir hizmet örneğinin benzersiz tanımlayıcısıdır. SPN'ler, bir hizmet örneğini bir hizmet oturum açma hesabıyla ilişkilendirmek için Kerberos kimlik doğrulaması tarafından kullanılır. Bu ilişkilendirme işlemi, istemcinin bir hesap adı olmasa bile bir istemci uygulamasının hizmet tarafından bir hesabın kimliğini doğrulamasını istemesine olanak tanır.

Örneğin, SQL Server örneğini çalıştıran bir sunucu için tipik bir SPN aşağıdaki gibidir:

MSSQLSvc/SQLSERVER1.northamerica.corp.mycompany.com:1433

Varsayılan örnek için SPN biçimi, adlandırılmış örnek için SPN ile aynıdır. Bağlantı noktası numarası SPN'yi belirli bir örneğe bağlar. SQL Server Hizmet SPN'lerini kaydetme hakkında daha fazla bilgi için bkz. Kerberos Bağlantıları için Hizmet Asıl Adı Kaydetme.

SSPI neden NTLM veya Kerberos kimlik doğrulaması kullanıyor?

Windows kimlik doğrulaması, kullanıcıların SQL Server kimlik doğrulaması için tercih edilen yöntemdir. Windows kimlik doğrulaması kullanan istemcilerin kimliği NTLM veya Kerberos kullanılarak doğrulanır.

SQL Server istemcisi SQL Server çalıştıran bir uzak sunucuya TCP/IP yuvaları üzerinden tümleşik güvenlik kullandığında, SQL Server istemci ağ kitaplığı güvenlik temsilci seçimini gerçekleştirmek için SSPI API'sini kullanır. SQL Server ağ istemcisi AcquireCredentialsHandle işlevine bir çağrı yapar ve pszPackage parametresi için "negotiate" geçirir. Bu işlem, temel alınan güvenlik sağlayıcısına temsilci seçme anlaşması yapmasını bildirir. Bu bağlamda "anlaşma", Windows tabanlı bilgisayarlarda Kerberos veya NTLM kimlik doğrulamasını denemek anlamına gelir. Başka bir deyişle, SQL Server çalıştıran hedef bilgisayarda ilişkilendirilmiş ve doğru yapılandırılmış bir SPN varsa Windows, Kerberos temsilcisini kullanır. Aksi takdirde Windows, NTLM temsilcisi kullanır. SQL Server istemcisi SQL Server'ın bulunduğu makinede yerel olarak bağlanıyorsa her zaman NTLM kullanılır.

Kerberos ile ilgili sorunlarla karşılaşıldıktan sonra bağlantı neden NTLM'ye yük devretmiyor?

İstemcideki SQL Server sürücü kodu, sürücü SQL Server bağlanmak için Windows kimlik doğrulamasını kullandığında sunucunun tam DNS'sini çözümlemek için WinSock ağ API'sini kullanır. Bu işlemi gerçekleştirmek için sürücü kodu gethostbyaddr ve gethostbyname WinSock API'lerini çağırır. Tümleşik güvenlik kullanılırsa sunucu adı olarak bir IP adresi veya ana bilgisayar adı geçirilse bile sürücü, sunucunun tam DNS'sini çözümlemeye çalışır.

İstemcideki SQL Server sürücüsü sunucunun tam DNS'sini çözümlediğinde, sunucunun SPN'sini oluşturmak için ilgili DNS kullanılır. Bu nedenle IP adresini veya ana bilgisayar adını WinSock tarafından tam DNS'ye çözümleme sorunları, SQL Server sürücüsünün sunucu için geçersiz bir SPN oluşturmasına neden olabilir.

Örneğin, istemci tarafındaki SQL Server sürücüsü, geçersiz SPN'leri aşağıdaki gibi çözümlemek için tam DNS olarak kullanılabilir:

  • MSSQLSvc/SQLSERVER1:1433
  • MSSQLSvc/123.123.123.123:1433
  • MSSQLSvc/SQLSERVER1.antartica.corp.mycompany.com:1433
  • MSSQLSvc/SQLSERVER1.dns.northamerica.corp.mycompany.com:1433

SQL Server sürücüsü geçersiz bir SPN oluşturduğunda, SSPI arabirimi Active Directory hizmetinde SPN'yi aramaya çalıştığından kimlik doğrulaması hâlâ çalışmaya devam eder. SSPI arabirimi SPN'yi bulamazsa Kerberos kimlik doğrulaması gerçekleştirilmez. Bu noktada SSPI katmanı NTLM kimlik doğrulama moduna geçer ve oturum açma NTLM kimlik doğrulamasını kullanır ve genellikle başarılı olur. SQL Server sürücüsü uygun kapsayıcıya atanmamış geçerli bir SPN oluşturursa sürücü, SPN'yi dener ancak kullanamaz. Bu durumda, "SSPI bağlamı oluşturulamıyor" hatası oluşabilir. SQL Server başlangıç hesabı yerel bir sistem hesabıysa uygun kapsayıcı bilgisayar adıdır. Diğer tüm hesaplarda uygun kapsayıcı SQL Server başlangıç hesabıdır. Kimlik doğrulaması bulduğu ilk SPN'yi kullanır, bu nedenle yanlış kapsayıcılara hiçbir SPN atanmadığından emin olun. Başka bir deyişle, her SPN yalnızca bir kapsayıcıya atanmalıdır.

Bağlantının kimlik doğrulama yöntemini nasıl doğrulayabilirim?

Bir bağlantının kimlik doğrulama yöntemini belirlemek için aşağıdaki sorguyu çalıştırın:

SELECT net_transport, auth_scheme   
FROM sys.dm_exec_connections   
WHERE session_id = @@SPID;  

Daha fazla bilgi için bkz. Kerberos Kimlik Doğrulaması kullanarak SQL Server'a Bağlı Olup Olmadığımı Belirleme.

SQL Server için SPN'ler nasıl oluşturulur?

SQL Server Veri Tabanı Altyapısı örneği başlatıldığında, SQL Server DsWriteAccountSpn API'sini kullanarak SQL Server hizmeti için SPN'yi otomatik olarak kaydetmeye çalışır. SQL Server hizmet hesabının Active Directory'de Okuma servicePrincipalName ve servicePrincipalName Yazma hakları varsa bu çağrı başarılı olur. Aksi takdirde Active Directory yöneticinizin SQL Server için Microsoft Kerberos Manager'ı veya yerleşik Setspn aracını kullanarak doğru SPN'yi el ile kaydetmesi gerekir. SQL Server için SPN'leri yönetme hakkında daha fazla bilgi için bkz. Kerberos Bağlantıları için Hizmet Asıl Adı Kaydetme.

Not

Bu yordam yalnızca bu hata iletilerini aralıklı olarak değil sürekli aldığınız durumlar için geçerlidir.

Kerberos bağlantılarının başarısız olmasının hatalı yapılandırılmış SPN'ler, ad çözümleme sorunları veya SQL Server hizmet başlangıç hesapları için yetersiz haklar gibi çeşitli nedenleri vardır. Microsoft Kerberos Yapılandırma Yöneticisi (KCM), hatanın nedenlerini denetlemeye yardımcı olabilecek bir araçtır. KCM, işlemdeki tanımlanan sorunları düzeltmek için seçenekler de sağlar.

Etkinleştirme hatalarını gidermek için aşağıdaki adımları izleyin.

  1. Bağlantı sorunlarınız olan bilgisayarda Kerberos Yapılandırma Yöneticisi'ni indirip yükleyin.

  2. %SystemDrive%:\Program Files\Microsoft\Kerberos Yapılandırma Yöneticisi klasöründen KerberosConfigMgr.exe'yi başlatın. Ardından, bağlanamadığınız SQL Server bilgisayarına bağlanma izinlerine sahip bir etki alanı hesabı kullanın.

  3. SQL Server bilgisayarında KCM çalıştırıyorsanız sunucu adını ve senaryonuza uygun diğer ayrıntıları boş bırakarak Bağlan'ı seçin. Çözümlemeyi gerçekleştirmek için Bağlan'ı seçin. KCM gerekli bilgileri almayı tamamladıktan sonra otomatik olarak SPN sekmesine geçer ve varsayılan olarak SQL Server, SQL Server Reporting Services, Analysis Services ve AG Dinleyicileri için olan bilgileri gösterir. Bu hatayı gidermek için SQL Server dışındaki her şeyin işaretini kaldırın.

  4. Durum sütununu kullanarak araçtan tanılamayı gözden geçirin ve sorunu çözmek için ilgili adımları izleyin:

    Durum Daha fazla bilgi Eylem
    İyi İşaretlenen öğe düzgün yapılandırıldı. Çıktıdaki bir sonraki öğeye geçebilirsiniz. Eyleme gerek yok
    Gerekli SPN eksik Active Directory'deki SQL Server başlangıç hesabı için Gerekli SPN sütununda tanımlanan SPN eksik olduğunda bu durum bildirilir. 1. Uyarı iletişim kutusundaki bilgileri gözden geçirmek için Düzelt'i seçin.
    2. Eksik SPN'yi Active Directory'ye eklemek için Evet'i seçin.
    3. Etki alanı hesabınızın Active Directory'yi güncelleştirmek için gerekli izinleri varsa, gerekli SPN Active Directory'ye eklenir.
    4. Etki alanı hesabınızın Active Directory'yi güncelleştirmek için gerekli izinleri yoksa, Active Directory yöneticisinin eksik SPN'leri eklemesine yardımcı olacak betiği oluşturmak için Oluştur veya Tümünü Oluştur'a tıklayın.
    5. SPN'ler eklendikten sonra, SPN sorunlarının çözüldüğünü doğrulamak için Kerberos Yapılandırma Yöneticisi'ni yeniden çalıştırın.
    6. Ayrıca, aşağıdaki komutları kullanabilirsiniz:
    - SPN'yi ve geçerli hesaplarını bulmak için kullanın SETSPN -Q spnName .
    - SPN'yi yanlış hesaptan kaldırmak için kullanın SETSPN -D .
    TCP, Kerberos yapılandırmasını kullanmak için etkinleştirilmelidir İstemci bilgisayarda TCP etkinleştirilmediğinde bu durum oluşur. SQL Server örneğinde TCP/IP protokollerini etkinleştirmek için şu adımları izleyin:
    1. SQL Server Yapılandırma Yöneticisi konsol bölmesinde SQL Server Ağ Yapılandırması'nı genişletin.
    2. Konsol bölmesinde Örnek adı> için <Protokoller'i seçin.
    3. Ayrıntılar bölmesinde, TCP/IP'ye sağ tıklayın ve ardından Etkinleştir'i seçin.
    4. Konsol bölmesinde SQL Server Hizmetleri'ni seçin.
    5. Ayrıntılar bölmesinde SQL Server (<örnek adı>) sağ tıklayın ve ardından yeniden başlat'ı seçerek SQL Server hizmetini durdurun ve yeniden başlatın.
    Daha fazla bilgi için bkz. Sunucu Ağ Protokolünü Etkinleştirme veya Devre Dışı Bırakma.
    Dinamik Bağlantı Noktası Bu ileti, dinamik bağlantı noktaları (varsayılan yapılandırma) kullanan adlandırılmış örnekler için gösterilir. SQL Server'a bağlanmak için Kerberos kullanmanız gereken ortamlarda, adlandırılmış örneğinizi statik bir bağlantı noktası olarak ayarlamanız ve SPN'yi kaydederken bu bağlantı noktasını kullanmanız gerekir. SQL Server örneğinizi statik bağlantı noktası kullanacak şekilde yapılandırmak için şu adımları izleyin:
    1. SQL Server Yapılandırma Yöneticisi konsol bölmesindeAğ Yapılandırması'nı SQL Server genişletin, Örnek adı> protokolleri'ni <genişletin ve ardından TCP/IP'ye çift tıklayın.
    2. TCP/IP Özellikleri iletişim kutusunda Protokol sekmesindeki Tümünü Dinle ayarını gözden geçirin.
    3. Tümünü Dinle ayarı Evet olarak ayarlandıysa IP Adresleri sekmesine geçin ve IPAll ayarını bulmak için Windows'un altına kaydırın. TCP Dinamik Bağlantı Noktaları'nda yer alan geçerli değeri silin ve TCP Bağlantı Noktası alanında istenen değeri ayarlayın. Tamam'ı seçin ve ayarların etkili olması için SQL Server örneğini yeniden başlatın.
    4. Tümünü Dinle ayarı Hayır olarak ayarlandıysa IP Adresleri sekmesine geçin ve IP1, IP2'de görünen IP adreslerinin her birini denetleyin. Etkin IP adresleri için TCP Dinamik Bağlantı Noktaları alanında bulunan geçerli değeri kaldırın ve TCP Bağlantı Noktası alanında istenen değeri ayarlayın. Tamam'ı seçin ve ayarların etkili olması için SQL Server örneğini yeniden başlatın.
    Daha fazla bilgi için bkz. Sunucuyu Belirli bir TCP Bağlantı Noktasında Dinleyecek Şekilde Yapılandırma.
    Yinelenen SPN Active Directory'deki farklı hesaplar altında aynı SPN kaydedildiğinde bu durumla karşılaşabilirsiniz. 1. Düzelt düğmesini seçin, Uyarı iletişim kutusundaki bilgileri görüntüleyin ve eksik SPN'yi Active Directory'ye ekleyebiliyorsanız Evet'i seçin.
    2. Etki alanı hesabınız Active Directory'yi güncelleştirmek için gerekli izinlere sahipse yanlış SPN silinir.
    3. Etki alanı hesabınızın Active Directory'yi güncelleştirmek için gerekli izinleri yoksa Yinelenen SPN'leri kaldırmak için Active Directory yöneticinize devredebileceğiniz gerekli betiği oluşturmak için Tümünü Oluştur veya Oluştur düğmesini kullanın. SPN'ler kaldırıldıktan sonra, SPN sorunlarının çözüldüğünü doğrulamak için KCM'yi yeniden çalıştırın.

    Not

    KCM'yi başlatan etki alanı hesabının Active Directory'deki SPN'leri işleme ayrıcalıkları yoksa gerekli komutları oluşturmak ve KCM tarafından tanımlanan sorunları düzeltmek adına Active Directory yöneticinizle birlikte çalışmak için SPN betiği sütununun altındaki karşılık gelen Tümünü Oluştur veya Oluştur düğmesini kullanabilirsiniz.

  5. KCM'de tanımlanan tüm sorunları düzelttikten sonra aracı yeniden çalıştırın. Başka sorun bildirilmediğinden emin olun ve bağlantıyı yeniden deneyin. Araç hala sorun bildiriyorsa önceki yordamı yineleyin.

Kerberos Yapılandırma Yöneticisi olmadan hatayı düzeltme

KCM'yi kullanamıyorsanız şu adımları izleyin:

1. Adım: Ping komutuyla ad çözümlemesini denetleme

Kerberos kimlik doğrulamasını başarılı kılan temel faktör, ağdaki geçerli DNS işlevselliğidir. Ping komut istemi yardımcı programını kullanarak istemcide ve sunucuda bu işlevselliği doğrulayabilirsiniz. İstemci bilgisayarda, SQL Server çalıştıran sunucunun IP adresini almak için aşağıdaki komutu çalıştırın (bilgisayarın adının SQLServer1 olduğu yerlerde):

ping sqlserver1

Ping yardımcı programının SQLServer1'in tam DNS'sini çözümleyip çözümlemediğini görmek için aşağıdaki komutu çalıştırın:

ping -a <IPAddress>

Örneğin:

C:\>ping SQLSERVER1

Pinging SQLSERVER1 [123.123.123.123] with 32 bytes of data:

Reply from 123.123.123.123: bytes=32 time<10ms TTL=128
Reply from 123.123.123.123: bytes=32 time<10ms TTL=128
Reply from 123.123.123.123: bytes=32 time<10ms TTL=128
Reply from 123.123.123.123: bytes=32 time<10ms TTL=128

Ping statistics for 123.123.123.123:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum =  0ms, Average =  0ms 
C:\>ping -a 123.123.123.123

Pinging SQLSERVER1.northamerica.corp.mycompany.com [123.123.123.123] with 32 bytes of data:

Reply from 123.123.123.123: bytes=32 time<10ms TTL=128
Reply from 123.123.123.123: bytes=32 time<10ms TTL=128
Reply from 123.123.123.123: bytes=32 time<10ms TTL=128
Reply from 123.123.123.123: bytes=32 time<10ms TTL=128
Ping statistics for 123.123.123.123:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum =  0ms, Average =  0ms

C:\> 

ping -a <IPAddress> komutu, SQL Server çalıştıran bilgisayarın doğru tam DNS'sine çözümlendiğinde, istemci tarafı çözümlemesi de başarılı olur.

Ayrıntılı tanılama için, TCP bağlantısını bilgisayarda yüklü olan PowerShell sürümüne göre test etmek amacıyla Test-NetConnection veya Test-Connection cmdlet'ini kullanın. PowerShell cmdlet'i hakkında daha fazla bilgi için bkz. Cmdlet Genel Bakış.

Not

Ad çözümleme yöntemleri DNS, WINS, Ana bilgisayar dosyaları ve Lmhosts dosyalarını içerebilir. Ad çözümleme sorunları ve sorun giderme hakkında daha fazla bilgi için aşağıdaki bağlantıları gözden geçirin:

Hedef SQL Server diğer adlarının SQL Server Yapılandırma Yöneticisi ve SQL Server İstemci Ağı yardımcı programı içinde bulunup bulunmadığını denetleyin. Böyle bir diğer ad varsa sunucu adlarını, ağ protokollerini, bağlantı noktası numarasını vb. denetleyerek doğru yapılandırıldığından emin olun. SQL Server diğer adı beklenmeyen bir SPN oluşturulmasına neden olabilir. Bu, SPN bulunamazsa NTLM kimlik bilgilerine veya yanlışlıkla başka bir sunucunun SPN'sine eşleştiğinde bir SSPI hatasına neden olur.

2. Adım: Etki alanları arasındaki iletişimi doğrulama

Oturum açmak istediğiniz etki alanının SQL Server çalıştıran sunucunun etki alanıyla iletişim kurabildiğini doğrulayın. Etki alanında doğru ad çözümlemesi de olmalıdır.

  1. SQL Server hizmeti başlangıç hesabıyla aynı etki alanı hesabını ve parolayı kullanarak Windows'ta oturum açabildiğinizi doğrulayın. Örneğin, SSPI hatası aşağıdaki durumlardan birinde oluşabilir:

    • Etki alanı hesabı kilitlendi.
    • Hesabın parolası değiştirildikten sonra SQL Server hizmetini yeniden başlatmadınız.
  2. Oturum açma etki alanınız SQL Server çalıştıran sunucunun etki alanından farklıysa etki alanları arasındaki güven ilişkisini denetleyin.

  3. Sunucunun ait olduğu etki alanının ve bağlanmak için kullandığınız etki alanı hesabının aynı ormanda olup olmadığını denetleyin. SSPI'nin çalışması için bu adım gereklidir.

3. Adım: SQLCHECK ve Setspn araçlarını kullanarak SQL Server SPN'leri doğrulama

SQL Server bilgisayarda yerel olarak oturum açabiliyorsanız ve yönetici erişimine sahipseniz SQLCHECK kullanın. SQLCheck, sorun giderme için gereken bilgilerin çoğunu tek bir dosyada sağlar. Aracın nasıl kullanılacağı ve hangi bilgileri topladığı hakkında daha fazla bilgi için aracın giriş sayfasını gözden geçirin. Ayrıca önerilen önkoşulları ve denetim listesi sayfasını da denetleyebilirsiniz. Çıkış dosyasını oluşturduktan sonra, çıkış dosyasının SQL Server Bilgileri bölümünde SQL Server örneğinin SPN yapılandırmasını gözden geçirin.

Örnek çıkış:

Suggested SPN                                               Exists  Status              

----------------------------------------------------------  ------  ------------------- 

MSSQLSvc/testsqlsvr.corp.com:2000                           True    Okay                

MSSQLSvc/testsqlsvr.corp.com                                True    Okay                

MSSQLSvc/testsqlsvr:2000                                    False   SPN does not exist. 

MSSQLSvc/testsqlsvr                                         False   SPN does not exist. 

Sonraki adımları belirlemek için yukarıdaki çıkışı kullanın (aşağıdaki örneklere bakın) ve SPN sorunlarını düzeltmek için gerekli düzeltme eylemlerini yapmak için Setspn aracını kullanın.

Senaryo Önerilen eylem
SPN yok SQL Server hizmet hesabınız için gerekli SPN'leri ekleyin.
Yinelenen SPN'ler SQL Hizmetiniz için yanlış hesapta kayıtlı SPN'yi silin.
Yanlış hesap altında SPN SQL Hizmetiniz için yanlış hesap altında kayıtlı SPN'yi silin ve ardından SPN'yi doğru hizmet hesabı altına kaydedin.

Not

  • SQL Server örneğinizin hizmet hesabını bulmak için SQLCHECK aracının çıkış dosyasının SQL Server Bilgileri bölümünü gözden geçirebilirsiniz.

  • Setspn, Active Directory'de SPN'leri okumanıza, eklemenize, değiştirmenize veya silmenize yardımcı olan ve Windows'un daha yeni sürümlerinde bulunan yerleşik bir araçtır. SQL Server SPN'lerinin Kerberos Bağlantıları için Hizmet Asıl Adı Kaydetme'ye göre yapılandırıldığını doğrulamak için bu aracı kullanabilirsiniz. Daha fazla bilgi için bkz. Setspn aracı ve aracın nasıl kullanılacağına ilişkin örnekler.

  • SQL Server'ın SPN'leri otomatik olarak kaydettirdiği ve el ile SPN kaydının gerekli olduğu senaryolar hakkında daha fazla bilgi için bkz. Kerberos Bağlantıları için Hizmet Asıl Adı Kaydetme.

4. Adım: Bağlı sunucuda SQL Server başlangıç hesabı için hesap iznini denetleme

Bağlı sunucunuzun Güvenlik sayfasında kimlik doğrulaması seçeneği olarak Kimliğe Bürün seçeneğini kullanırsanız gelen kimlik bilgilerini uzak SQL Server'a geçirmek için SQL Server gerekir. Bağlı sunucunun tanımlandığı SQL Server başlangıç hesabında, Active Directory'de Temsilci seçme hakkı için Hesaba güveniliyor olmalıdır. Daha fazla bilgi için bkz. Temsilci seçme için bilgisayar ve kullanıcı hesaplarının güvenilir olmasını etkinleştirme.

Not

Bu adım yalnızca bağlı sunucu sorguları ile ilgili sorunları giderdiğinizde gereklidir.

Ayrıca bkz.