it-swarm-eu.dev

Přihlášení se nezdařilo pro uživatele - Chyba 18456 - závažnost 14, stav 38

Zpráva, kterou zobrazuje Prohlížeč souborů protokolu serveru SQL:

Login failed for user [User]
Error: 18456, Severity: 14, State 38

Co to vlastně znamená:

Failed to open the explicitly specified database

Moje otázka:

Existuje seznam všech variací chyb 18456 (Přihlášení selhalo), pro každou kombinaci závažnosti a stavu, s užitečným popisným textem?

Měl jsem Google, ale nemohl jsem najít nic jiného než konkrétní kombinace.

24
Pete Oakey

Kódy státu a jejich význam.

1      'Account is locked out'
2      'User id is not valid'
3-4    'Undocumented'
5      'User id is not valid'
6      'Undocumented'
7      'The login being used is disabled'
8      'Incorrect password'
9      'Invalid password'
10     'Related to a SQL login being bound to Windows domain password policy enforcement.
        See KB925744.'
11-12  'Login valid but server access failed'
16     'Login valid, but not permissioned to use the target database'
18     'Password expired'
27     'Initial database could not be found'
38     'Login valid but database unavailable (or login not permissioned)'

Podrobnější informace jsou k dispozici v blogu Aarona Bertranda .

25
Pete Oakey

Měl jsem stejnou chybu se stavovým kódem 38 způsobený překlepem názvu databáze v připojovacím řetězci.

4
Rob Bowman

Zde je to, co jsem našel, když jsem tuto chybu vyřešil: Vytvořil jsem některá připojení SQL pomocí přihlašovacího jména systému Windows, nikoli uživatelského jména a hesla. Nejste si jisti, co a jak se to stalo, ale stalo se. Odstranil jsem je a pak jsem znovu sestavil své entity. Použil jsem další připojovací řetězec, o kterém jsem věděl, že je dobrý, a vše je radost. Key is Persist Security Info = True, které nebude fungovat na síti ani na externím webovém serveru

2
Bill W.

Měl jsem také 18456 se stavem 38. Ukázalo se, že připojovací řetězec měl „integrované zabezpečení = pravda“, což nebylo to, co jsem chtěl. Připojovací řetězec obsahoval uživatelské jméno a heslo, které mělo být použito. Když jsem změnil nastavení na false, všechno bylo v pořádku.

2
Dick Vandenberg

@ Pete Oakly je na správné cestě se seznamem kódů státu. Konkrétně se jedná o kód, o který se všichni zajímáme:

38 'Přihlášení platné, ale databáze nedostupná (nebo není povoleno přihlášení)'

Můj problém začal v protokolu chyb C #:

Výjimka | Publikovaná výjimka | 000161 | 10/29/2018 | 11: 06: 40.210 | 16284 | InnerException | Nelze otevřít databázi "InterestingDataBaseName" požadovanou při přihlášení. Přihlášení se nezdařilo. Přihlášení se nezdařilo pro uživatele 'CORP\anyuser'.

Moje oči byly zaměřeny na část „Přihlášení se nezdařilo“ . Můj uživatel byl sa pro tento server DB, jak by mohlo přihlášení selhat?

Do tohoto příspěvku jsem narazil trojicí programátorů, kteří měli odpověď: https://justaprogrammer.net/2012/12/09/a-misleading-sql-error-message-error-18456-severity-14 -state-38 /

Není to selhání přihlášení samo o sobě, je to databáze, ke které se pokouším přistupovat. NEExISTUJÍ!

Bingo! Název databáze jsem změnil z jiných důvodů a neaktualizoval jsem konfigurační soubor. Opraveno jméno DB a věci znovu fungují jako kouzlo.

2
John Dyer

Tuto chybu jsem se pokusil přihlásit k serveru SQL s více instancemi. Připojovací řetězec pojmenoval instanci. Jakmile jsem pojmenoval instanci (SERVERNAME\INSTANCENAME), podařilo se mi připojit k serveru.

2
Nasser

V našem případě ve Správci konfigurace serveru SQL | Konfigurace sítě serveru SQL TCP/IP | IP | Port TCP byl NEBYL .

Bez toho, že bychom mohli navázat spojení ODBC a dokonce použít vzdálené připojení SQL Management Studio a přihlásit se s uživatelem. Pokaždé, když jsme přistupovali k adrese URL naší aplikace Tomcat, spustilo se připojení jdbc, pak jsme v protokolu serveru SQL došlo k chybě: Přihlášení se nezdařilo pro uživatele 'xxxx': důvod Nepodařilo se otevřít explicitně definovanou databázi, chyba 18456, závažnost 14, stav 38

Zde je výpis připojovacího řetězce jdbc

"jdbc:sqlserver://10.10.10.10:1433;databaseName=zzzzzzz" username="yyyyyy" password="xxxxxx" driverClassName="com.Microsoft.sqlserver.jdbc.SQLServerDriver" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" defaultAutoCommit="true"/>
<Resource name="jdbc/application" 

To říká, že také v SQL Server Network Configuration | Protokoly pro <název instance> | Pojmenované kanály musí být ZAPNUTY a název potrubí \\.\pipe\MSSQL$<instance name>\sql\query musí být nastaveno správně.

1
Sti

Jedná se o chybu týkající se oprávnění k databázi. K této otázce přidávám své řešení, protože je velmi důležité porozumět úloze DBA. Takže, existují mé návrhy:

  • Přejděte do Správce serverů
  • Vyberte Nástroje a poté Správa počítače
  • Zkontrolujte místní uživatele a skupiny
  • Zkontrolujte jméno správce s popisem „Vestavěný účet pro správu počítače/domény“.

Nyní se přihlaste pomocí tohoto uživatelského jména a můžete uživateli udělit přístup. Udělat to tak:

Přejděte na Zabezpečení, klepněte pravým tlačítkem myši na Přihlášení a vyberte Nové přihlášení

V přihlašovacím okně můžete zadat uživatelské jméno nebo ho vyhledat. Vyberte uživatele ze seznamu a znovu klikněte na OK a OK .

Ve stejném přihlašovacím okně klikněte na Role server a udělte přístup vybranému uživateli jako: sysadmin, serveradmin, snižovač atd .; klepněte na OK .

Pokud chcete udělit přístup k individuální databázi, přejděte na Mapování uživatelů a zadejte přístup podle vašich požadavků.

Zkontrolujte stav databáze: Permission: Grant Login: Enabled

Klikněte na OK

1
Priyanka