การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ - ข้อผิดพลาด 18456 - ความรุนแรง 14, สถานะ 38


23

ข้อความที่ SQL Server Log Viewer แสดง:

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

ความหมายจริง:

Failed to open the explicitly specified database

คำถามของฉัน:

มีรายการบางส่วนของรูปแบบทั้งหมดของข้อผิดพลาด 18456 (การเข้าสู่ระบบล้มเหลว) สำหรับแต่ละชุดของความรุนแรงและสถานะพร้อมข้อความคำอธิบายที่เป็นประโยชน์หรือไม่

ฉันมี Google แต่ไม่พบสิ่งใดนอกจากชุดค่าผสมเฉพาะ

คำตอบ:


25

รหัสรัฐและความหมาย

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

ข้อมูลรายละเอียดเพิ่มเติมสามารถดูได้ในแอรอนเบอร์ทรานด์ของบล็อก


@PeteOakly คุณกำลังอยู่บนเส้นทางที่ถูกต้องที่นี่สำหรับรัฐ 38. ดูโพสต์ด้านล่างเกี่ยวกับฐานข้อมูลที่ขาดหายไปเป็นหนึ่งในสาเหตุของการรัฐ 38
จอห์น Dyer

4

ฉันมีข้อผิดพลาดเดียวกันกับรหัสสถานะ 38 ที่เกิดจากการพิมพ์ชื่อของฐานข้อมูลในสตริงการเชื่อมต่อ


2

นี่คือสิ่งที่ฉันพบเมื่อฉันแก้ไขข้อผิดพลาดนี้: ฉันได้สร้างการเชื่อมต่อ SQL โดยใช้ windows login ไม่ใช่ชื่อผู้ใช้และรหัสผ่าน ไม่แน่ใจจริงๆว่ามันเกิดอะไรขึ้น แต่ก็เป็นเช่นนั้น ฉันลบพวกเขาแล้วสร้างโมเดลเอนทิตีของฉันใหม่ ฉันใช้สตริงการเชื่อมต่ออื่นที่ฉันรู้ว่าดีและทั้งหมดคือความสุข Key คือ Persist Security Info = True ซึ่งจะไม่ทำงานบนเครือข่ายหรือเว็บไซต์ภายนอก


2

ฉันมี 18456 กับสถานะ 38 เช่นกัน ปรากฎว่าสตริงการเชื่อมต่อมี 'ความปลอดภัยรวม = จริง' ซึ่งไม่ใช่สิ่งที่ฉันต้องการ สตริงการเชื่อมต่อมีหมายเลขผู้ใช้และรหัสผ่านที่จะใช้ เมื่อฉันเปลี่ยนการตั้งค่าเป็นเท็จทั้งหมดเป็นไปด้วยดี


2

ฉันได้รับข้อผิดพลาดนี้พยายามเข้าสู่ SQL Server ที่มีหลายอินสแตนซ์ สตริงการเชื่อมต่อไม่ได้ตั้งชื่ออินสแตนซ์ เมื่อฉันตั้งชื่ออินสแตนซ์ (SERVERNAME \ INSTANCENAME) ฉันจัดการเพื่อเชื่อมต่อกับเซิร์ฟเวอร์


2

@Peat Oaklyอยู่ในเส้นทางที่ถูกต้องพร้อมกับรายชื่อรหัสรัฐ นี่คือรหัสที่เราทุกคนสนใจ:

38 'เข้าสู่ระบบที่ถูกต้อง แต่ฐานข้อมูลไม่พร้อมใช้งาน (หรือเข้าสู่ระบบไม่ได้รับอนุญาต)'

ปัญหาของฉันเริ่มต้นในบันทึกข้อผิดพลาด C #:

ข้อยกเว้น | PublishedException | 000161 | 10/29/2018 | 11: 06: 40.210 | 16284 | InnerException | ไม่สามารถเปิดฐานข้อมูล "InterestingDataBaseName" ที่ร้องขอโดยการล็อกอิน การเข้าสู่ระบบล้มเหลว การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'CORP \ anyuser'

ตาของฉันได้มุ่งเน้นไปที่"เข้าสู่ระบบล้มเหลว"ส่วนหนึ่ง ผู้ใช้ของฉัน sa สำหรับเซิร์ฟเวอร์ฐานข้อมูลนี้การเข้าสู่ระบบอาจล้มเหลวได้อย่างไร

ฉันสะดุดในโพสต์นี้โดยสามโปรแกรมเมอร์ที่มีคำตอบ: https://justaprogrammer.net/2012/12/12/9/a-misleading-sql-error-message-error-18456-severity-14-state-38 /

ไม่ใช่การเข้าสู่ระบบล้มเหลวต่อ se เป็นฐานข้อมูลที่ฉันพยายามเข้าถึง มันไม่มีอยู่จริง!

บิงโก! ฉันเปลี่ยนชื่อฐานข้อมูลด้วยเหตุผลอื่นและไม่ได้อัปเดตไฟล์กำหนดค่า แก้ไขชื่อฐานข้อมูลและสิ่งต่าง ๆ กำลังทำงานเหมือนมีเสน่ห์อีกครั้ง


1

ในกรณีของเราใน SQL Server Configuration Manager | การกำหนดค่าเครือข่ายเซิร์ฟเวอร์ sql TCP / IP | IP | ไม่ได้ตั้งค่าพอร์ต TCP

หากไม่มีเราสามารถสร้างการเชื่อมต่อ ODBC และแม้แต่ใช้การเชื่อมต่อ SQL Management Studio ระยะไกลและลงชื่อเข้าใช้กับผู้ใช้ อย่างไรก็ตามทุกครั้งที่เราเข้าถึง url ของแอปพลิเคชั่น Tomcat ของเรามันเปิดการเชื่อมต่อ jdbc จากนั้นเราพบข้อผิดพลาดในการบันทึกเซิร์ฟเวอร์ SQL: การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'xxxx': เหตุผลล้มเหลวในการเปิดฐานข้อมูล รัฐ 38

นี่เป็นนามธรรมของสตริงการเชื่อมต่อ 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" 

นี้จะบอกว่ายังอยู่ในการกำหนดค่าเครือข่ายเซิร์ฟเวอร์ SQL | โปรโตคอลสำหรับ <instance name> | เนมไปป์ต้องถูกเปิดใช้งานและ\\.\pipe\MSSQL$<instance name>\sql\query จะต้องตั้งชื่อไพพ์ อย่างถูกต้อง


1

นี่เป็นข้อผิดพลาดเกี่ยวกับการอนุญาตฐานข้อมูล ฉันกำลังเพิ่มวิธีแก้ปัญหาในคำถามนี้เพราะมันสำคัญมากที่จะเข้าใจบทบาทของ DBA ดังนั้นมีคำแนะนำของฉัน:

  • ไปที่ Server Manager
  • เลือกเครื่องมือจากนั้นเลือกการจัดการคอมพิวเตอร์
  • ตรวจสอบผู้ใช้และกลุ่มภายใน
  • ตรวจสอบชื่อผู้ดูแลระบบพร้อมคำอธิบาย 'บัญชีในตัวเครื่องเพื่อจัดการคอมพิวเตอร์ / โดเมน'

ตอนนี้เข้าสู่ระบบด้วยชื่อผู้ใช้นั้นและคุณสามารถให้สิทธิ์การเข้าถึงแก่ผู้ใช้ โดยทำดังนี้

ไปที่ความปลอดภัยคลิกขวาที่เข้าสู่ระบบและเลือกเข้าสู่ระบบใหม่

ในหน้าต่างเข้าสู่ระบบคุณสามารถพิมพ์ชื่อผู้ใช้หรือค้นหา เลือกผู้ใช้จากรายการและคลิกตกลงและตกลงอีกครั้ง

ในหน้าต่างล็อกอินเดียวกันให้คลิกที่บทบาทเซิร์ฟเวอร์และให้สิทธิ์การเข้าถึงแก่ผู้ใช้ที่เลือกเช่น: sysadmin, serveradmin, decreator เป็นต้น คลิกตกลง

หากคุณต้องการให้สิทธิ์การเข้าถึงฐานข้อมูลแต่ละรายการไปที่การทำแผนที่ผู้ใช้และให้การเข้าถึงตามความต้องการของคุณ

ตรวจสอบสถานะของฐานข้อมูล: สิทธิ์: แกรนท์ เข้าสู่ระบบ: เปิดใช้งาน

คลิกตกลง


2
นี่อาจเป็นคำตอบที่ดีถ้าคุณให้ความสำคัญกับความเป็นไปได้ของSQL Server ที่ขาดหายไปกับความสัมพันธ์ของผู้ใช้ฐานข้อมูลหรือความเป็นไปได้ที่ฐานข้อมูลเริ่มต้นของSQL Server Loginไม่สามารถใช้งานได้อีกต่อไป ขณะนี้คำตอบของคุณเป็นเพียงข้อเสนอแนะทั่วไปในการสร้างบัญชี ฉันไม่แน่ใจว่าคำตอบแรกของคุณจะช่วยแก้ปัญหาของ OP ได้อย่างไร คุณอธิบายส่วนนั้นได้ไหม
John aka hot2use
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.