Megosztás a következőn keresztül:


Árva felhasználók hibaelhárítása (SQL Server)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

A felhasználók árvaként jelennek meg az SQL Serverben, ha egy adatbázis-felhasználó az master adatbázisban való bejelentkezésen alapul, de a bejelentkezés már nem létezik az masteradatbázisban. Ez akkor fordulhat elő, ha a bejelentkezést törlik, vagy ha az adatbázist egy másik kiszolgálóra helyezik át, amelyen a bejelentkezés nem létezik. Ez a cikk azt ismerteti, hogyan találhatja meg az árva felhasználókat, és hogyan rendelheti őket újra bejelentkezésekhez.

Megjegyzés:

Csökkentse az árva felhasználók lehetőségét, ha tartalmazott adatbázis-felhasználókat használ az áthelyezhető adatbázisokhoz. További információ: Az adatbázis hordozhatóvá tétele tartalmazott adatbázisokhasználatával.

Fontos

A sp_change_users_login tárolt eljárást korábban az árva felhasználók kijavítására használták, de most elavult. Használja ALTER USER ... WITH LOGIN inkább az árva felhasználók feloldása című szakaszban leírtak szerint. További információ: sp_change_users_login (Transact-SQL).

Háttér

Ha az SQL Server egy példányán lévő adatbázishoz való csatlakozáshoz egy bejelentkezésen alapuló biztonsági azonosítót (adatbázis-felhasználói identitást) használ, akkor a biztonsági azonosítónak érvényes bejelentkezéssel kell rendelkeznie az master adatbázisban. Ezt a bejelentkezést használja a hitelesítési folyamat, amely ellenőrzi a megbízó identitását, és meghatározza, hogy a megbízó csatlakozhat-e az SQL Server példányához. A kiszolgálópéldányok SQL Server-bejelentkezései a sys.server_principals katalógusnézetben és a sys.sql_logins kompatibilitási nézetben láthatók.

Az SQL Server-bejelentkezések az egyes adatbázisokhoz az SQL Server-bejelentkezéshez leképezett "adatbázis-felhasználóként" férnek hozzá. A szabálynak három kivétele van:

  • Tartalmazott adatbázis-felhasználók

    A tárolt adatbázis felhasználói a felhasználói adatbázis szintjén hitelesítik magukat, és nincsenek bejelentkezésekhez társítva. Ez a modell azért ajánlott, mert az adatbázisok hordozhatóbbak, és a tárolt adatbázis-felhasználók nem válhatnak árvatá. Ezeket azonban minden adatbázishoz újra létre kell hozni. Ez a modell nem praktikus egy olyan környezetben, amely sok adatbázissal rendelkezik.

  • A vendégfiók

    Ha engedélyezve van egy adatbázisban, ez a fiók engedélyezi az adatbázis-felhasználóhoz nem hozzárendelt SQL Server-bejelentkezéseket, hogy vendégfelhasználóként hozzáférjenek az adatbázishoz. A vendégfiók alapértelmezés szerint le van tiltva.

  • Microsoft Windows-csoporttagságok

    A Windows-felhasználó által létrehozott SQL Server-bejelentkezések akkor férhetnek hozzá az adatbázisokhoz, ha a Windows-felhasználó tagja egy Olyan Windows-csoportnak, amely szintén az adatbázisban lévő felhasználó.

Az SQL Server-bejelentkezés adatbázis-felhasználóhoz való leképezésével kapcsolatos információk az adatbázisban találhatók. Tartalmazza az adatbázis-felhasználó nevét és a megfelelő SQL Server-bejelentkezés biztonsági azonosítóját (SID). Az adatbázis-felhasználó engedélyeit a rendszer az adatbázisban való engedélyezéshez alkalmazza.

Egy adatbázis-felhasználó (bejelentkezés alapján), amelyhez a megfelelő SQL Server-bejelentkezés nincs meghatározva, vagy helytelenül van definiálva egy kiszolgálópéldányon, nem tud bejelentkezni a példányba. Az ilyen felhasználó az adott kiszolgálópéldány adatbázisának árva felhasználója . Árvaság akkor fordulhat elő, ha az adatbázis-felhasználó olyan bejelentkezésre SID van leképezve, amely nem szerepel az master adatbázisban. Az adatbázis-felhasználók árvává válhatnak, ha egy adatbázist visszaállítanak, vagy egy másik SQL Server-példányhoz csatolnak, ahol a bejelentkezés soha nem jött létre. Az adatbázis-felhasználók árvatá válhatnak, ha a megfelelő SQL Server-bejelentkezést elvetik. Még ha a bejelentkezés újra létrejön is, egy másik SID-val rendelkezik, így az adatbázis-felhasználó továbbra is árva marad.

Árva felhasználók észlelése

SQL Server és PDW esetén

Ha hiányzó SQL Server-hitelesítési bejelentkezések alapján szeretné észlelni az árva felhasználókat az SQL Serverben, futtassa a következő utasítást a felhasználói adatbázisban:

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';

A kimenet felsorolja az SQL Server-hitelesítés felhasználóit és a megfelelő SID-ket az aktuális adatbázisban, amelyek nincsenek egyetlen SQL Server-bejelentkezéshez sem csatolva.

Az Azure SQL Database és az Azure Synapse Analytics esetében

A sys.server_principals tábla nem érhető el az SQL Database-ben vagy az Azure Synapse Analyticsben. Az árva felhasználók azonosításához hajtsa végre az alábbi lépéseket:

  1. Csatlakozzon az master adatbázishoz, és válassza ki a bejelentkezések azonosítóit az alábbi lekérdezéssel:

    SELECT sid
    FROM sys.sql_logins
    WHERE type = 'S';
    
  2. Csatlakozzon a felhasználói adatbázishoz, és tekintse át a táblázatban szereplő sys.database_principals felhasználók SID-jét az alábbi lekérdezéssel:

    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. Hasonlítsa össze a két listát annak megállapításához, hogy vannak-e olyan felhasználói SID-k a felhasználói adatbázistáblában sys.database_principals , amelyek nem egyeznek meg az master adatbázistábla sql_logins bejelentkezési azonosítóival.

Árva felhasználó feloldása

Az adatbázisban használja a masterCREATE LOGIN utasítást a SID hiányzó felhasználói fiók újbóli létrehozásához. Adja meg az előző szakaszban beszerzett adatbázis-felhasználó azonosítóját SID.

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

Ha egy árva felhasználót olyan bejelentkezéshez szeretne hozzárendelni, amely már létezik master, futtassa az ALTER USER utasítást a felhasználói adatbázisban, és adja meg a bejelentkezési nevet:

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

Hiányzó bejelentkezés újbóli létrehozásakor a felhasználó a megadott jelszóval férhet hozzá az adatbázishoz. A felhasználó ezután az utasítással ALTER LOGIN módosíthatja a bejelentkezési fiók jelszavát:

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

Fontos

Minden bejelentkezés megváltoztathatja a saját jelszavát. Csak az ALTER ANY LOGIN engedéllyel rendelkező bejelentkezések módosíthatják egy másik felhasználó bejelentkezési jelszavát. Azonban csak a sysadmin szerepkör tagjai módosíthatják a sysadmin szerepkör tagjainak jelszavát.

Elavult módszerek

Az SQL Server korábbi verzióiban az sp_change_users_login tárolt eljárást az árva felhasználók összekapcsolására használták. Ez az eljárás elavult, és lehetséges, hogy egy későbbi verzióban el lesz távolítva. A ALTER USER használható helyette.

Az alábbi táblázat a gyakori sp_change_users_login műveletek egyenértékű modern szintaxisát mutatja be:

Elavult szintaxis Javasolt helyettesítés
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>

További információ: sp_change_users_login (Transact-SQL).