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
Podrobnosti
| Vlastnost | Hodnota |
|---|---|
| Název produktu | SQL Server |
| ID události | 4064 |
| Zdroj událostí | MSSQLSERVER |
| Součást | SQLEngine |
| Symbolický název | DB_UFAIL_FATAL |
| Text zprávy | Výchozí databázi uživatele nelze otevřít. Přihlášení se nezdařilo. |
Vysvětlení
Přihlášení k SQL Serveru se nemohlo připojit k SQL Serveru, a to buď kvůli problémům s oprávněními uživatele databáze přidruženého k přihlášení ve výchozí databázi, nebo kvůli potížím s jeho výchozí databází.
Problémy s oprávněními můžou být některé z následujících:
- Přihlášení nemá ve své výchozí databázi odpovídající mapovaný uživatel.
- Přiřadili jste k přihlášení výchozí databázi, ale v zadané databázi jste nevytvořili mapování uživatelů.
- Namapovaný uživatel pro přihlášení byl odepřen přístup. (K tomu může dojít například v případě, že je uživatel neúmyslně přidán do db_denydatareader pevné databázové role.)
Výchozí databáze může být v době připojení nedostupná z následujících důvodů:
- Výchozí databáze je v podezřelém režimu.
- Výchozí databáze již neexistuje.
- Výchozí název databáze není správný.
- Výchozí databáze je v režimu jednoho uživatele a jediné dostupné připojení už používá někdo nebo něco jiného.
- Výchozí databáze byla odpojena.
- Výchozí databáze je nastavená na RESTRICTED_USER stav.
- Výchozí databáze je offline.
- Výchozí databáze je nastavená na stav TÍSŇOVÉHO VOLÁNÍ.
- Výchozí databáze je součástí zrcadlení databáze.
Kromě toho může být přihlašovací účet členem více skupin a výchozí databáze jedné z těchto skupin není v době připojení k dispozici.
Další informace o uživatelích databáze na SQL Serveru naleznete v tématu Vytvoření uživatele databáze.
Akce uživatele
Můžete provést jednu z následujících akcí:
Alternativní řešení problému
Pokud nepotřebujete přistupovat k aktuálně nakonfigurované výchozí databázi a stačí se připojit k instanci SQL Serveru pro jiné operace pomocí aplikace SQL Server Management Studio (SSMS), postupujte takto:
Otevřete SQL Server Management Studio (SSMS).
V Průzkumníku objektů vyberte Připojit>databázový stroj.
Vyplňte dialogové okno Připojit k serveru .
Vyberte Možnosti.
V části Vlastnosti připojení upravte hodnotu Připojit k databázi pomocí jedné z následujících možností:
Pokud je přihlášení členem role správce systému, zadejte
mastera vyberte Připojit , abyste vytvořili připojení k SQL Serveru. Po úspěšném připojení k SQL Serveru můžete výchozí databázi změnit na jinou, která je aktuálně dostupná na stránce Obecné ve vlastnostech přihlášení v SSMS. Pro více informací viz Vytvořit přihlášení.Pokud přihlášení není členem role správce systému, zadejte na serveru název databáze, ke kterému víte, že máte přístup. Případně můžete zkusit zadat název systémové databáze, například
mastera pak vybrat Připojit. Tento krok nemusí fungovat, pokud správce systému explicitně zamítl oprávnění pro uživatele typu host vmasterdatabázi. V tomto scénáři musíte s správcem systému problém vyřešit.
Oprava problému
Správce systému může pomocí následujícího dotazu zkontrolovat, co je aktuální výchozí databáze uživatele:
SELECT name, default_database_name
FROM sys.server_principals
WHERE type = 'S' AND name = '<sql-login>';
K určení vhodné akce pro opravu problému souvisejících příčin použijte následující tabulku:
| Příčina | Resolution |
|---|---|
| Ve výchozí databázi přihlášení neexistuje žádné mapování uživatelů nebo byl uživateli odepřen přístup. | Tito uživatelé databáze se také označují jako osamocené uživatele. K tomuto problému obvykle dochází při přesunu databází mezi dvěma instancemi serveru a je jednou z běžných příčin chyby 4064. Pokud chcete zjistit osamocené uživatele a vyřešit problém, přečtěte si téma Řešení potíží se osamocenými uživateli (SQL Server). |
| Pro přihlášení neexistuje žádný uživatel databáze. | Vytvořte uživatele databáze a přiřaďte příslušná oprávnění pro přístup k databázi. |
| Uživatelský účet databáze odepřel oprávnění pro přístup k databázi | Přejděte do vlastností uživatele v databázi (Rozbalit > uzlu >databáze) a zkontrolujte, jestli je uživatel součástí db_denydatareader role na stránce Členství. Efektivní oprávnění uživatele můžete také zkontrolovat pomocí sys.fn_my_permissions. |
| Výchozí databáze je v podezřelém režimu. | Databáze může být podezřelá z několika důvodů. Mezi možné příčiny patří odepření přístupu k databázovému prostředku operačním systémem a nedostupnost nebo poškození jednoho nebo více databázových souborů. Stav databáze můžete zkontrolovat pomocí tohoto dotazu: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status';. V nástroji SSMS se stav podezřelých databází zobrazuje jako (Čeká na obnovení). Možná budete muset obnovit databázi ze zálohy, aby se tato situace vyřešila. |
| Nesprávný název databáze v připojovacím řetězci | Když se pokusíte připojit k databázi, která neexistuje, může se zobrazit následující chybová zpráva:Cannot open database "AdventureWorks" requested by the login. The login failed.Systém pro správu databází (DBMS) může také zobrazit chybovou Login failed for user CONTOSO\user1 zprávu. Další informace najdete v tématu MSSQLSERVER_18456.V protokolu chyb SQL Serveru se zobrazí následující zpráva: Přihlášení uživatele CONTOSO\User1 se nezdařilo. Důvod: Nepodařilo se otevřít explicitně zadanou databázi AdventureWorks. Chcete-li tuto chybu vyřešit, ujistěte se, že název databáze je stejný jak v chybové zprávě, tak v položce protokolu chyb. Pokud je připojovací řetězec nesprávný, změňte ho nebo uživateli udělte požadovaná oprávnění. |
| Výchozí databáze již neexistuje. | Pokud jste databázi ze serveru úmyslně odstranili, změňte výchozí databázi pro přihlášení na jinou existující databázi na serveru pomocí SSMS nebo příkazu ALTER LOGIN (Transact-SQL). Volitelně můžete chtít pomocí tohoto dotazu zkontrolovat, jestli na serveru existují další přihlášení, jejichž výchozí databáze je nastavená na tuto neexistující databázi: SELECT name AS Login_Name FROM sys.server_principals where default_database_name = '<removed-dbname>'; |
| Výchozí databáze je v režimu jednoho uživatele a jediné připojení používá správce nebo někdo jiný. | Pokud je databáze pro účely údržby nastavená na režim s jedním uživatelem, měli byste ji po dokončení aktivity údržby nastavit zpět do režimu s více uživateli pomocí tohoto dotazu: ALTER DATABASE <dbname> SET MULTI_USER;Další informace naleznete v tématu Nastavení databáze na režim jednoho uživatele. Poznámka: Pokud chcete zkontrolovat, jestli je databáze v režimu jednoho uživatele, můžete použít tento dotaz: SELECT name, user_access_desc FROM sys.databases WHERE name = '<dbname>';.Pokud stále potřebujete omezit přístup k databázi, ale chcete povolit připojení pro ovlivněná přihlášení, změňte výchozí databázi na jinou databázi na serveru. |
| Výchozí databáze byla odpojena. | Odpojení databáze ji odebere z instance SQL Serveru a už není přístupná. Pokud ji chcete zpřístupnit pro přihlášení, připojte databázi pomocí aplikace SSMS nebo sp_attach_db uložené procedury. Další informace naleznete v tématu Odpojení a připojení databáze (SQL Server). |
| Výchozí databáze byla nastavena na RESTRICTED_USER stav. | Pokud je databáze nastavena na RESTRICTED_USER stav, můžou se k databázi připojit jenom členové db_owner pevné databázové role a dbcreator a správce systému. Pokud už nepotřebujete omezit přístup k odpovídající databázi, nastavte databázi na režim více uživatelů pomocí tohoto dotazu: ALTER DATABASE <dbname> SET MULTI_USER;Poznámka: Chcete-li zkontrolovat, zda je databáze v omezeném stavu uživatele, můžete použít tento dotaz: SELECT name, user_access_desc FROM sys.databases WHERE name = '<dbname>';.Pokud stále potřebujete omezit přístup k databázi, ale chcete povolit připojení pro ovlivněná přihlášení, změňte výchozí databázi na jinou databázi na serveru. |
| Výchozí databáze je offline. | Databázi, která je v offline stavu, není možné upravit. Databázi můžete přenést do online režimu pomocí tohoto dotazu: ALTER database <dnname> SET ONLINE;.Pomocí aplikace SSMS můžete zkontrolovat, jestli je databáze offline, nebo pomocí tohoto dotazu: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status';.Pro více informací viz Stavy aALTER DATABASE SET možnosti databáze (Transact-SQL) - SQL Server. Pokud stále potřebujete zachovat databázi v offline stavu, ale chcete povolit připojení pro ovlivněná přihlášení, změňte výchozí databázi na jinou databázi na serveru. |
| Výchozí databáze je nastavená na stav TÍSŇOVÉHO VOLÁNÍ. | Databáze mohla být kvůli řešení potíží správcem systému vložena do stavu TÍSŇOVÉHO VOLÁNÍ. K databázím nastaveným na stav TÍSŇOVÉHO VOLÁNÍ mají přístup pouze uživatelé role správce systému. Databázi můžete přenést do online režimu pomocí tohoto dotazu: ALTER database <dnname> SET ONLINE;.Pomocí aplikace SSMS nebo pomocí tohoto dotazu můžete zkontrolovat, jestli je databáze v nouzovém stavu: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status';Pro více informací viz Stavy databázeaALTER DATABASE SET možnosti (Transact-SQL). Pokud stále potřebujete zachovat databázi ve stavu TÍSŇOVÉHO VOLÁNÍ, ale chcete povolit připojení pro ovlivněná přihlášení, změňte výchozí databázi na jinou databázi na serveru. |
| Výchozí databáze je součástí zrcadlení databáze. | Na zrcadlovém serveru se nemůžete připojit ke zrcadlové databázi a toto chování je záměrně. Pokud chcete zkontrolovat, jestli je databáze aktuálně v zrcadlové roli, použijte tento dotaz SELECT DB_NAME(database_id) as database_name, mirroring_role_desc FROM sys.database_mirroring WHERE DB_NAME(database_id) = '<dbname>';. Další informace o zrcadlení databáze naleznete v tématu Zrcadlení databáze (SQL Server). |
| Přihlašovací účet může být členem více skupin a výchozí databáze jedné ze skupin není v době připojení k dispozici. | Pokud chcete vytvořit výčet skupin, které mají zadaného uživatele pomocí PowerShellu, přečtěte si téma Get-ADPrincipalGroupMembership (ActiveDirectory). |
Změna výchozí databáze pro daného uživatele
Pro změny výchozí databáze uživatele potřebujete mít ALTER JAKÉKOLIV LOGIN oprávnění. Pokud je změněné přihlášení členem pevné role serveru sysadmin nebo udělení oprávnění CONTROL SERVER, vyžaduje také oprávnění CONTROL SERVER při provádění následujících změn. Členové role správce systému mají tato oprávnění ve výchozím nastavení povolená. Další informace najdete v tématu ALTER LOGIN (Transact-SQL).
Změna výchozí databáze pomocí aplikace SSMS
Připojte se k instanci SQL Serveru pomocí aplikace SQL Server Management Studio (SSMS).
Výběremmožnosti Přihlášení> vyhledejte uživatele a změňte výchozí databázi uživatele na jinou, která je aktuálně k dispozici na stránce Obecné vlastnosti přihlášení v aplikaci SSMS. Pro více informací viz Vytvořit přihlášení.
Po připojení k instanci SQL Serveru můžete spustit
ALTER LOGINpříkaz, například následující příklady:ALTER LOGIN <LoginName> WITH DEFAULT_DATABASE = <AvailableDatabaseName>;<AvailableDatabaseName>je zástupný symbol pro název existující databáze, ke které má přístup přihlášení SQL Serveru v instanci.<LoginName>je zástupný symbol pro přihlášení k SQL Serveru s potřebnýmiALTER LOGINoprávněními.Například:
ALTER LOGIN [SQLLogin] WITH DEFAULT_DATABASE = master; ALTER LOGIN [Constoso\Windowslogin] WITH DEFAULT_DATABASE = [AdventureWorks];
Zobrazí se chyba 18456 spolu s chybou 4064.
Pokud používáte aplikace, jako je SSMS, které se uživateli zobrazí chyba 4064, zobrazí se v protokolu chyb SQL Serveru následující zpráva. Toto chování je záměrné. Oprava výchozí databáze neúspěšného přihlášení pomocí postupů popsaných v tomto článku automaticky řeší chybu 18456.
2023-02-06 18:17:02.56 Logon Error: 18456, Severity: 14, State: 40.
2023-02-06 18:17:02.56 Logon Login failed for user '<user name>. Reason: Failed to open the database '<db_name>' specified in the login properties. [CLIENT: <hostname >]