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 kereshet árva felhasználókat, és hogyan lehet újraképezett felhasználókat bejelentkezni.

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.

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 tagot (adatbázis-felhasználói identitást) használ, az egyszerű felhasználó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 az egyszerű identitást, és meghatározza, hogy az egyszerű felhasználó csatlakozhat-e az SQL Server-példányhoz. 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óról azt mondják, hogy az adatbázis árva felhasználója az adott kiszolgálópéldányon. Á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 akkor is, ha a bejelentkezés újra létrejön, más SIDlesz, í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 alábbi lépések végrehajtásával azonosíthatja az árva felhasználókat ezekben a környezetekben:

  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ó bejelentkezés újbóli létrehozásához. Adja meg az SID előző szakaszban beszerzett adatbázis-felhasználót.

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.