Aracılığıyla paylaş


Yalnız bırakılmış kullanıcılarla ilgili sorunları giderme (SQL Server)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Bir veritabanı kullanıcısı, master veritabanındaki bir oturum açma bilgisine dayandığında ancak bu oturum açma bilgisi artık master içinde mevcut değilse, SQL Server'da kullanıcılar yetim kalır. Bu durum, oturum açma bilgileri silindiğinde veya veritabanı oturum açmanın olmadığı başka bir sunucuya taşındığında oluşabilir. Bu makalede yetim kullanıcıların nasıl bulunup girişlerle yeniden eşlendiği açıklanır.

Uyarı

Taşınabilecek veritabanları için bağımsız veritabanı kullanıcılarını kullanarak yalnız bırakılmış kullanıcıların olasılığını azaltın. Daha fazla bilgi için bkz. Veritabanınızı kapsanan veritabanlarını kullanarak taşınabilir hale getirme.

Önemli

Saklı sp_change_users_login yordam daha önce yalnız bırakılmış kullanıcıları düzeltmek için kullanılıyordu, ancak artık kullanım dışı bırakıldı. Bunun yerine, ALTER USER ... WITH LOGIN bölümünde açıklandığı gibi kullanın. Daha fazla bilgi için bkz. sp_change_users_login (Transact-SQL).

Arka plan

SQL Server örneğinde oturum açma bilgilerine dayanan bir güvenlik asıl öznesi (veritabanı kullanıcı kimliği) kullanan bir veritabanına bağlantılar için, bu öznede master veritabanında geçerli bir oturum açma bilgisi bulunmalıdır. Bu oturum açma, sorumlunun kimliğini doğrulayan ve sorumlunun SQL Server örneğine bağlanmasına izin verilip verilmeyeceğini belirleyen kimlik doğrulama işleminde kullanılır. Sunucu örneğindeki SQL Server oturum açma işlemleri sys.server_principals katalog görünümünde ve sys.sql_logins uyumluluk görünümünde görünür.

SQL Server oturum açma bilgileri, SQL Server oturum açma bilgisiyle ilişkilendirilen bir "veritabanı kullanıcısı" olarak tek tek veritabanlarına erişir. Bu kuralın üç özel durumu vardır:

  • Kapsanan veritabanı kullanıcıları

    Bağımsız veritabanı kullanıcıları, kullanıcı veritabanı düzeyinde kimlik doğrulaması yapar ve oturum açma bilgileriyle ilişkili değildir. Veritabanları daha taşınabilir olduğundan ve kapsanan veritabanı kullanıcıları yalnız kalamadığından bu model önerilir. Ancak, her veritabanı için yeniden oluşturulmalıdır. Bu model, birçok veritabanının olduğu bir ortamda pratik olmayabilir.

  • Konuk hesabı

    Bir veritabanında etkinleştirildiğinde, bu hesap bir veritabanı kullanıcısına eşlenmeyen SQL Server oturum açma bilgilerinin veritabanına konuk kullanıcı olarak erişmesine izin verir. Konuk hesabı varsayılan olarak devre dışıdır.

  • Microsoft Windows grup üyelikleri

    Bir Windows kullanıcısından oluşturulan SQL Server oturum açma bilgileri, Windows kullanıcısı aynı zamanda veritabanındaki bir Windows grubunun üyesiyse veritabanına erişebilir.

SQL Server oturum açma bilgilerinin veritabanı kullanıcısına eşleneceğiyle ilgili bilgiler veritabanında depolanır. Veritabanı kullanıcısının adını ve ilgili SQL Server oturum açma bilgilerinin güvenlik tanımlayıcısını (SID) içerir. Bu veritabanı kullanıcısının izinleri veritabanında yetkilendirme için uygulanır.

İlgili SQL Server oturum açma bilgilerinin tanımsız olduğu veya sunucu örneğinde yanlış tanımlandığı bir veritabanı kullanıcısı (oturum açmaya bağlı olarak) örnekte oturum açamaz. Böyle bir kullanıcı, söz konusu sunucu örneğindeki veritabanının yalnız bırakılmış bir kullanıcısıdır . Veritabanı kullanıcısı, oturum açma bilgileri SID veritabanında mevcut değilse master eşlendiği durumlarda yetim kalma durumu meydana gelebilir. Veritabanı geri yüklendikten veya oturum açmanın hiç oluşturulmadığı farklı bir SQL Server örneğine eklendikten sonra veritabanı kullanıcısı yalnız bırakılmış duruma gelebilir. İlgili SQL Server oturum açma bilgisi kaldırılırsa, bir veritabanı kullanıcısı da yetim kalabilir. Oturum açma bilgileri yeniden oluşturulsa bile farklı SIDbir öğesine sahiptir, bu nedenle veritabanı kullanıcısı yine yalnız kalır.

Yalnız bırakılmış kullanıcıları algılama

SQL Server ve PDW için

SQL Server’da eksik olan SQL Server kimlik doğrulama oturumlarına dayalı olarak sahipsiz kullanıcıları algılamak için kullanıcı veritabanında aşağıdaki deyimi çalıştırarak:

SELECT dp.type_desc, dp.sid, dp.name AS user_name
FROM sys.database_principals AS dp
LEFT JOIN sys.server_principals AS sp
    ON dp.sid = sp.sid
WHERE sp.sid IS NULL
    AND dp.authentication_type_desc = 'INSTANCE';

Çıktı, geçerli veritabanında herhangi bir SQL Server oturum açma bilgisine bağlı olmayan SQL Server kimlik doğrulama kullanıcılarını ve bunlara karşılık gelen SID'leri listeler.

Azure SQL Veritabanı ve Azure Synapse Analytics için

sys.server_principals tablosu SQL Veritabanı veya Azure Synapse Analytics'te kullanılamaz. Bu ortamlarda yalnız bırakılmış kullanıcıları tanımlamak için şu adımları tamamlayın:

  1. Veritabanına bağlanın master ve aşağıdaki sorguyu kullanarak oturum açma işlemleri için SID'leri seçin:

    SELECT sid
    FROM sys.sql_logins
    WHERE type = 'S';
    
  2. Aşağıdaki sorguyu kullanarak kullanıcı veritabanına bağlanın ve tablodaki sys.database_principals kullanıcıların SID'lerini gözden geçirin:

    SELECT name, sid, principal_id
    FROM sys.database_principals
    WHERE type = 'S'
      AND name NOT IN ('guest', 'INFORMATION_SCHEMA', 'sys')
      AND authentication_type_desc = 'INSTANCE';
    
  3. Kullanıcı veritabanı tablosunda, veritabanı sys.database_principals tablosundaki oturum açma SID'leriyle eşleşmemiş kullanıcı SID'leri mastersql_logins olup olmadığını belirlemek için iki listeyi karşılaştırın.

Yalnız bırakılmış kullanıcıyı çözme

master Veritabanında CREATE LOGIN deyimini SID kullanarak eksik oturum açma bilgilerini yeniden oluşturun. Önceki bölümde edindiğiniz veritabanı kullanıcısının bilgilerini sağlayın.

CREATE LOGIN <login_name>
WITH PASSWORD = '<use_a_strong_password_here>',
SID = <SID>;

Yalnız bırakılmış bir kullanıcıyı içinde masterzaten var olan bir oturum açmayla eşlemek için kullanıcı veritabanında oturum açma adını belirterek ALTER USER deyimini çalıştırın:

ALTER USER <user_name> WITH Login = <login_name>;

Eksik oturum açma bilgilerini yeniden oluşturduğunuzda, kullanıcı sağlanan parolayı kullanarak veritabanına erişebilir. Kullanıcı daha sonra şu deyimi kullanarak ALTER LOGIN oturum açma hesabının parolasını değiştirebilir:

ALTER LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';

Önemli

Her oturum kendi parolasını değiştirebilir. Yalnızca izni olan ALTER ANY LOGIN oturum açma işlemleri başka bir kullanıcının oturum açma parolasını değiştirebilir. Ancak, yalnızca sysadmin rolünün üyeleri sysadmin rol üyelerinin parolalarını değiştirebilir.

Kullanım dışı yöntemler

SQL Server'ın önceki sürümlerinde, sp_change_users_login saklı yordam yalnız bırakılmış kullanıcıları çözümlemek için kullanılırdı. Bu yordam kullanım dışıdır ve gelecekteki bir sürümde kaldırılabilir. Bunun yerine ALTER USER kullanın.

Aşağıdaki tabloda, yaygın sp_change_users_login işlemler için eşdeğer modern söz dizimi gösterilmektedir:

Kullanım dışı söz dizimi Önerilen değişiklik
EXEC sp_change_users_login 'Report' SELECT dp.name FROM sys.database_principals dp LEFT JOIN sys.server_principals sp ON dp.sid = sp.sid WHERE sp.sid IS NULL AND dp.authentication_type_desc = 'INSTANCE'
EXEC sp_change_users_login 'Auto_Fix', '<user>' ALTER USER <user> WITH LOGIN = <user>
EXEC sp_change_users_login 'Update_One', '<user>', '<login>' ALTER USER <user> WITH LOGIN = <login>

Daha fazla bilgi için bkz. sp_change_users_login (Transact-SQL).