Sdílet prostřednictvím


Řešení potíží se osamocenými uživateli (SQL Server)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformní systém (PDW)

Uživatelé jsou na SQL Serveru osamocené, když je uživatel databáze založen na přihlášení v master databázi, ale přihlášení již neexistuje .master K tomu může dojít, když se přihlašovací jméno odstraní nebo když se databáze přesune na jiný server, na kterém přihlášení neexistuje. Tento článek popisuje, jak vyhledat osamocené uživatele a znovu je namapovat na přihlášení.

Poznámka:

Snižte možnost osamocených uživatelů pomocí uživatelů databáze s omezením pro databáze, které je možné přesunout. Další informace naleznete v tématu Nastavení přenositelnosti databáze pomocí obsažené databáze.

Pozadí

Pro připojení k databázi na instanci SQL Serveru, která používá objekt zabezpečení (identitu uživatele databáze) na základě přihlášení, musí mít objekt zabezpečení v master databázi platné přihlášení. Toto přihlášení se používá v procesu ověřování, který ověřuje identitu objektu zabezpečení a určuje, jestli se objekt zabezpečení může připojit k instanci SQL Serveru. Přihlášení SQL Serveru v instanci serveru jsou viditelná v zobrazení katalogu sys.server_principals a zobrazení kompatibility sys.sql_logins .

Přihlášení k SQL Serveru přistupují k jednotlivým databázím jako "uživatel databáze", který je namapovaný na přihlášení k SQL Serveru. Toto pravidlo má tři výjimky:

  • Uživatelé databáze s omezením

    Uživatelé databáze s omezením se ověřují na úrovni databáze uživatele a nejsou přidruženi k přihlášením. Tento model se doporučuje, protože databáze jsou přenosnější a uživatelé databáze s omezením se nemůžou stát osamocenými. Je však nutné je znovu vytvořit pro každou databázi. Tento model může být v prostředí, které má mnoho databází, nepraktické.

  • Účet hosta

    Pokud je tato možnost v databázi povolená, povolí tento účet přihlášení SQL Serveru, která nejsou namapovaná na uživatele databáze, aby k databázi přistupovala jako uživatel typu host . Účet hosta je ve výchozím nastavení zakázaný.

  • Členství ve skupinách Microsoft Windows

    Přihlášení k SQL Serveru vytvořenému uživatelem Systému Windows má přístup k databázi, pokud je uživatel Systému Windows členem skupiny Systému Windows, která je také uživatelem v databázi.

Informace o mapování přihlášení SQL Serveru k uživateli databáze jsou uloženy v databázi. Obsahuje název uživatele databáze a identifikátor zabezpečení (SID) odpovídajícího přihlášení k SQL Serveru. Oprávnění tohoto uživatele databáze se použijí pro autorizaci v databázi.

Uživatel databáze (na základě přihlášení), pro který není definováno odpovídající přihlášení k SQL Serveru nebo je nesprávně definován v instanci serveru, se nemůže přihlásit k instanci. Takový uživatel se říká, že je osamocený uživatel databáze v této instanci serveru. K osamocení může dojít v případě, že je uživatel databáze namapovaný na přihlášeníSID, které v databázi není.master Uživatel databáze se může stát osamoceným po obnovení databáze nebo připojení k jiné instanci SQL Serveru, kde se přihlášení nikdy nevytvořilo. Uživatel databáze se může také stát osamoceným, pokud se zahodí odpovídající přihlášení k SQL Serveru. I když se přihlašovací jméno znovu vytvoří, bude mít jinou SID, takže uživatel databáze bude stále osamocený.

Detekce osamocených uživatelů

Pro SQL Server a PDW

Pokud chcete zjistit osamocené uživatele na SQL Serveru na základě chybějících přihlášení k ověřování SQL Serveru, spusťte v uživatelské databázi následující příkaz:

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

Výstup uvádí uživatele ověřování SQL Serveru a odpovídající identifikátory SID v aktuální databázi, které nejsou propojené s žádným přihlášením k SQL Serveru.

Pro Azure SQL Database a Azure Synapse Analytics

Tabulka sys.server_principals není dostupná ve službě SQL Database ani Azure Synapse Analytics. Pomocí těchto kroků identifikujte osamocené uživatele v těchto prostředích:

  1. Připojte se k master databázi a pomocí následujícího dotazu vyberte identifikátory SID pro přihlášení:

    SELECT sid
    FROM sys.sql_logins
    WHERE type = 'S';
    
  2. Připojte se k uživatelské databázi a pomocí následujícího dotazu zkontrolujte identifikátory SID uživatelů v sys.database_principals tabulce:

    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. Porovnejte dva seznamy a určete, jestli jsou v tabulce databáze sys.database_principals uživatele identifikátory SID, které nejsou v tabulce databáze sql_logins spárované přihlašovacími identifikátory SIDmaster.

Řešení osamocených uživatelů

master V databázi použijte příkaz CREATE LOGIN s SID možností znovu vytvořit chybějící přihlášení. SID Zadejte uživatele databáze, kterého jste získali v předchozí části.

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

Pokud chcete namapovat osamocený uživatel na přihlášení, které již existuje master, spusťte příkaz ALTER USER v uživatelské databázi a zadejte přihlašovací jméno:

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

Při opětovném vytvoření chybějícího přihlášení může uživatel získat přístup k databázi pomocí zadaného hesla. Uživatel pak může změnit heslo přihlašovacího účtu pomocí příkazu ALTER LOGIN :

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

Důležité

Jakékoli přihlášení může změnit své vlastní heslo. Pouze přihlášení s ALTER ANY LOGIN oprávněním můžou změnit heslo pro přihlášení jiného uživatele. Hesla členů role sysadmin ale můžou upravovat jenom členové role sysadmin .