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 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:
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ázesql_loginsspá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 .
Související obsah
- CREATE LOGIN (Transact-SQL)
-
ALTER USER (Transact-SQL) -
CREATE USER (Transact-SQL) - sys.database_principals (Transact-SQL)
- sys.server_principals (Transact-SQL)
- sp_change_users_login (Transact-SQL)
- sp_addlogin (Transact-SQL)
- sp_grantlogin (Transact-SQL)
- sp_password (Transact-SQL)
- sys.sysusers (Transact-SQL)
- sys.sql_logins (Transact-SQL)
- sys.syslogins (Transact-SQL)