Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytický platformní systém (PDW)
Uživatelé jsou v SQL Serveru osamocení, když je uživatel databáze založen na přihlášení v databázi master, ale přihlášení již v master neexistuje. 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 vzniku osamocených uživatelů použitím integrovaných uživatelů databáze pro databáze vhodné k přesunu. Další informace naleznete v tématu Nastavení přenositelnosti databáze pomocí obsažené databáze.
Důležité
Uložená sp_change_users_login procedura byla dříve použita k opravě osamocených uživatelů, ale nyní je zastaralá. Místo toho použijte ALTER USER ... WITH LOGIN , jak je popsáno v části Řešení osamocených uživatelů . Další informace najdete v tématu sp_change_users_login (Transact-SQL).
Pozadí
Pro připojení k databázi na instanci SQL Serveru, která používá principál zabezpečení (identitu uživatele databáze) podle přihlášení, musí mít principál 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 ve zobrazení kompatibility sys.sql_logins.
Uživatelská přihlášení k SQL Serveru přistupují k jednotlivým databázím jako "databázový uživatel", který je mapován na přihlášení k SQL Serveru. Toto pravidlo má tři výjimky:
Uživatelé databáze s omezením
Uživatelé vlastní databáze se ověřují na úrovni databáze uživatele a nejsou spojeni s přihlašovacími údaji. 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 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ří, má jiné SID, takže uživatel databáze je stále osiřelý.
Detekce osamocených uživatelů
Pro SQL Server a Paralelní datový sklad
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 všechny Azure SQL Database a Azure Synapse Analytics
Tabulka sys.server_principals není dostupná ve službě SQL Database ani Azure Synapse Analytics. Pokud chcete v těchto prostředích identifikovat osamocené uživatele, proveďte následující kroky:
Připojte se k
masterdatabá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';Připojte se k uživatelské databázi a pomocí následujícího dotazu zkontrolujte identifikátory SID uživatelů v
sys.database_principalstabulce: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';Porovnejte dva seznamy a určete, jestli jsou v tabulce databáze
sys.database_principalsuživatele identifikátory SID, které nejsou v tabulce databázemasterspárované přihlašovacími identifikátory SIDsql_logins.
Ř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ého uživatele na přihlášení, které již existuje v 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 .
Zastaralé metody
V dřívějších verzích SQL Serveru se uložená sp_change_users_login procedura použila k vyřešení osiřelých uživatelů. Tento postup je zastaralý a může být odebrán v budoucí verzi. Místo toho použijte ALTER USER.
Následující tabulka uvádí ekvivalentní moderní syntaxi pro běžné sp_change_users_login operace:
| Zastaralá syntaxe | Doporučená náhrada |
|---|---|
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> |
Další informace najdete v tématu sp_change_users_login (Transact-SQL).