ไม่สามารถเปิดฐานข้อมูล“ ทดสอบ” ที่ร้องขอโดยการเข้าสู่ระบบ การเข้าสู่ระบบล้มเหลว เข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'xyz \ ASPNET'


103

ฉันได้สร้างบริการเว็บที่บันทึกข้อมูลบางส่วนลงในฐานข้อมูล แต่ฉันได้รับข้อผิดพลาดนี้:

ไม่สามารถเปิดฐานข้อมูล "ทดสอบ" ที่ร้องขอโดยการเข้าสู่ระบบ การเข้าสู่ระบบล้มเหลว การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'xyz \ ASPNET'

สตริงการเชื่อมต่อของฉันคือ

Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True

เราต้องการข้อมูลเพิ่มเติมมากมายก่อนที่จะช่วยวินิจฉัยได้
sblom

ฉันมีปัญหานี้และปิดสตูดิโอภาพและเปิดอีกครั้งและมันก็เริ่มทำงาน ..
trees_are_great

คำตอบ:


47

ข้อผิดพลาดค่อนข้างชัดเจนใช่ไหม คุณกำลังพยายามเชื่อมต่อกับ SQL Server ของคุณกับผู้ใช้ "xyz / ASPNET" ซึ่งเป็นบัญชีที่แอป ASP.NET ของคุณกำลังทำงานอยู่

บัญชีนี้ไม่ได้รับอนุญาตให้เชื่อมต่อกับ SQL Server - สร้างล็อกอินบน SQL Server สำหรับบัญชีนั้นหรือจากนั้นระบุบัญชี SQL Server อื่นที่ถูกต้องในสตริงการเชื่อมต่อของคุณ

คุณสามารถแสดงสตริงการเชื่อมต่อของคุณ (โดยการอัปเดตคำถามเดิมของคุณ) ได้หรือไม่?

อัปเดต: ตกลงคุณใช้การรับรองความถูกต้องของ Windows ในตัว -> คุณต้องสร้างการเข้าสู่ระบบ SQL Server สำหรับ "xyz \ ASPNET" บน SQL Server ของคุณหรือเปลี่ยนสตริงการเชื่อมต่อของคุณเป็น:

connectionString="Server=.\SQLExpress;Database=IFItest;User ID=xyz;pwd=top$secret"

หากคุณมีผู้ใช้ "xyz" ที่มีรหัสผ่าน "$ ลับสุดยอด" ในฐานข้อมูลของคุณ


12
ไม่ "ไม่ได้รับอนุญาตให้เชื่อมต่อกับ SQL Server" แต่ "ไม่ได้รับอนุญาตให้ใช้ฐานข้อมูล" test ""
wRAR

@wRAR: จริง - แต่ฉันเดาว่าโอกาสที่ผู้ใช้ล็อกอินจะมีอยู่บนเซิร์ฟเวอร์ แต่ไม่ได้เปิดใช้งานในฐานข้อมูลนี้อาจเป็นเพียงบางส่วน (อย่างน้อยฉันก็คิดว่า)
marc_s

โปรดดู "Database = IFItest" เทียบกับ "test" ด้วยแม้ว่านั่นอาจเป็นการพิมพ์ผิด
wRAR

3
จุดหนึ่งที่คุณไม่เคยสัมผัสคือชื่อฐานข้อมูลอาจผิดได้เช่นกัน ฉันได้รับข้อความแสดงข้อยกเว้นจาก Azure SQL Server ของฉันและปรากฎว่าฉันตั้งชื่อฐานข้อมูลของฉันผิดในสตริงการเชื่อมต่อในรหัส C # ในโครงการ ASP.NET ของฉัน
Ron16

รอนนั่นคือปัญหาของฉัน ฉันเคยตรวจการสะกดซ้ำสองครั้ง แต่ก็พลาดไปแล้ว
Darrell Lloyd Harvey

33
  • อย่างใดอย่างหนึ่ง: "xyz \ ASPNET" ไม่ใช่การเข้าสู่ระบบ (ใน sys.server_principals)
  • หรือ: "xyz \ ASPNET" ถูกตั้งค่า แต่ไม่ได้แมปกับผู้ใช้ในการทดสอบฐานข้อมูล (sys.database_principals)

ฉันจะใช้ตัวเลือกที่ 2: ข้อความแสดงข้อผิดพลาดแสดงว่าฐานข้อมูลเริ่มต้นนั้นไม่มีหรือไม่มีสิทธิ์ในนั้นแทนที่จะไม่ได้ตั้งค่าเป็นการเข้าสู่ระบบ

เพื่อทดสอบว่าตั้งค่าเป็นการเข้าสู่ระบบหรือไม่

SELECT SUSER_ID('xyz\ASPNET') -- (**not** SUSER_SID)

ถ้าเป็น NULL

CREATE LOGIN [xyz\ASPNET] FROM WINDOWS

ถ้าไม่ใช่ NULL

USE test
GO
SELECT USER_ID('xyz\ASPNET')

ถ้าเป็น NULL

USE test
GO
CREATE USER [xyz\ASPNET] FROM LOGIN [xyz\ASPNET]

1
นี่เป็นขั้นตอนง่ายๆในการตรวจจับและแก้ไขปัญหา
Mazen el Senih

ตารางที่ "SELECT USER_ID (... " วิ่งแข่งกับอาจารย์?
สาม

13

ฉันมีปัญหานี้และสิ่งที่แก้ไขได้สำหรับฉันคือ:

  • ไปที่พูลแอปพลิเคชันใน IIS
  • คลิกขวาที่พูลแอปพลิเคชันโครงการของฉัน
  • ในส่วน Process Model ให้เปิด Identity
  • เลือกตัวเลือกบัญชีที่กำหนดเอง
  • ป้อนชื่อผู้ใช้และรหัสผ่านพีซีของคุณ

8

ทางออกที่ดีที่สุดสำหรับปัญหาการเข้าสู่ระบบคือการสร้างผู้ใช้ล็อกอินใน sqlServer ต่อไปนี้คือขั้นตอนในการสร้างล็อกอิน SQL Server ที่ใช้ Windows Authentication (SQL Server Management Studio):

  1. ใน SQL Server Management Studio ให้เปิด Object Explorer และขยายโฟลเดอร์ของอินสแตนซ์เซิร์ฟเวอร์ที่จะสร้างการเข้าสู่ระบบใหม่
  2. คลิกขวาที่โฟลเดอร์ Security ชี้ไปที่ New จากนั้นคลิก Login
  3. ในหน้าทั่วไปป้อนชื่อของผู้ใช้ Windows ในกล่องชื่อเข้าสู่ระบบ
  4. เลือก Windows Authentication
  5. คลิกตกลง

ตัวอย่างเช่นหากเป็นชื่อผู้ใช้xyz\ASPNETให้ป้อนชื่อนี้ในกล่องชื่อเข้าสู่ระบบ

นอกจากนี้คุณต้องเปลี่ยนการแมปผู้ใช้เพื่อให้สามารถเข้าถึงฐานข้อมูลที่คุณต้องการเข้าถึงได้


8

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

เยี่ยมชมไซต์ในเบราว์เซอร์และอ่านบันทึกข้อผิดพลาดเหล่านั้นจริงๆซึ่งสามารถช่วยคุณระบุปัญหาเกี่ยวกับรหัสของคุณได้ (โดยปกติจะเป็นปัญหาตรรกะที่ขัดแย้งกับโมเดล)

ในกรณีของฉันรหัสคอมไพล์ดีปัญหาการเข้าสู่ระบบเดียวกันในขณะที่ฉันยังดาวน์โหลดสตูดิโอการจัดการฉันผ่านบันทึกข้อผิดพลาดแก้ไขข้อ จำกัด บริบทฐานข้อมูลของฉันและไซต์เริ่มทำงานได้ดี .... ในขณะที่สตูดิโอการจัดการยังคงดาวน์โหลดอยู่


6

สำหรับฉันฐานข้อมูลไม่ได้สร้างขึ้นและโค้ด EF ควรสร้างขึ้นก่อน แต่มักจะเกิดข้อผิดพลาดนี้เสมอ สตริงการเชื่อมต่อเดียวกันทำงานในโปรเจ็กต์เว็บเริ่มต้นหลักของแอสเน็ต วิธีแก้คือการเพิ่ม

_dbContext.Database.EnsureCreated()

ก่อนการติดต่อฐานข้อมูลแรก (ก่อน DB seeding)


4

ปัญหา

ข้อผิดพลาดแสดงตัวเองเป็นข้อความลักษณะนี้:

ไม่สามารถเปิดฐานข้อมูล "DATABASE NAME" ที่ร้องขอโดยการเข้าสู่ระบบ การเข้าสู่ระบบล้มเหลว การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ XYZ

  • โดยปกติข้อผิดพลาดไม่สามารถแก้ไขได้โดย Visual Studio แบบธรรมดาหรือการรีสตาร์ทคอมพิวเตอร์แบบเต็ม
  • นอกจากนี้ยังสามารถพบข้อผิดพลาดเป็นไฟล์ฐานข้อมูลที่ดูเหมือนถูกล็อก

การแก้ไข

วิธีแก้ปัญหาอยู่ในขั้นตอนต่อไปนี้ คุณจะไม่สูญเสียข้อมูลใด ๆ ในฐานข้อมูลของคุณและคุณไม่ควรลบไฟล์ฐานข้อมูลของคุณ!

ข้อกำหนดเบื้องต้น: คุณต้องติดตั้ง SQL Server Management Studio (Full หรือ Express)

  1. เปิด Studio จัดการเซิร์ฟเวอร์ SQL
  2. ในหน้าต่าง "Connect to Server" (File-> Connect object explorer) ให้ป้อนข้อมูลต่อไปนี้:
    • ประเภทเซิร์ฟเวอร์: Database Engine
    • ชื่อเซิร์ฟเวอร์: (localdb) \ v11.0
    • การตรวจสอบความถูกต้อง: [สิ่งที่คุณใช้เมื่อคุณสร้างฐานข้อมูลในเครื่องของคุณ น่าจะเป็น Windows Authentication)
  3. คลิก "เชื่อมต่อ"
  4. ขยายโฟลเดอร์ "ฐานข้อมูล" ใน Object Explorer (View-> Object Explorer, F8)
  5. ค้นหาฐานข้อมูลของคุณ ควรตั้งชื่อเป็นเส้นทางแบบเต็มไปยังไฟล์ฐานข้อมูล (.mdf) ของคุณ
    • คุณควรเห็นข้อความระบุว่า "(รอการกู้คืน)" ต่อท้ายชื่อฐานข้อมูลหรือเมื่อคุณพยายามขยายฐานข้อมูลจะไม่สามารถทำได้และอาจแสดงข้อความแสดงข้อผิดพลาดหรือไม่ก็ได้
    • นี่คือประเด็น! ฐานข้อมูลของคุณขัดข้องเป็นหลัก ..
  6. คลิกขวาที่ฐานข้อมูลจากนั้นเลือก "Tasks -> Detach ... "
  7. ในหน้าต่างแยกออกให้เลือกฐานข้อมูลของคุณในรายการและตรวจสอบคอลัมน์ที่ระบุว่า "Drop Connections"
  8. คลิกตกลง
  9. คุณควรเห็นฐานข้อมูลหายไปจากรายการฐานข้อมูล ปัญหาของคุณควรได้รับการแก้ไขแล้ว ไปและเรียกใช้แอปพลิเคชันของคุณที่ใช้ localdb ของคุณ
  10. หลังจากเรียกใช้แอปพลิเคชันของคุณแล้วฐานข้อมูลของคุณจะปรากฏขึ้นอีกครั้งในรายการฐานข้อมูลซึ่งถูกต้อง ไม่ควรพูดว่า "รอการกู้คืน" อีกต่อไปเนื่องจากควรจะทำงานได้อย่างถูกต้อง

ที่มาของการแก้ปัญหา: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed


ปัญหาคือฉันหา DB นั้นไม่เจอ
Shimmy Weitzhandler

3

ฉันพยายามอัปเดตผู้ใช้และใช้งานได้ ดูคำสั่งด้านล่าง

USE ComparisonData// databaseName
EXEC  sp_change_users_login @Action='update_one', @UserNamePattern='ftool',@LoginName='ftool';

เพียงแค่แทนที่user('ftool')ตาม


3

นอกจากนี้ยังเกิดขึ้นเมื่อคุณพิมพ์ชื่อ DB ผิด

ex : xxx-db-dev to xxx-dev-db

บางครั้งมันเป็นเพียงความผิดพลาดโง่ ๆ ฉันใช้เวลาประมาณ 1 ชั่วโมงในการค้นหาสิ่งนี้ :( เพราะฉันเพิ่งลองทำสิ่งที่ยากก่อน


2

สิ่งนี้ใช้ได้กับฉัน

  1. ไปที่ SQL Server >> Security >> Logins แล้วคลิกขวาที่ NT AUTHORITY \ NETWORK SERVICE แล้วเลือก Properties
  2. ในหน้าจอที่เพิ่งเปิดใหม่ของคุณสมบัติการเข้าสู่ระบบไปที่แท็บ“ การแมปผู้ใช้”
  3. จากนั้นบนแท็บ“ User Mapping” เลือกฐานข้อมูลที่ต้องการโดยเฉพาะฐานข้อมูลที่แสดงข้อความแสดงข้อผิดพลาดนี้
  4. คลิกตกลง

อ่านบล็อกนี้

http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requested-by-the-login-the-login-failed-login-failed-for- ผู้ใช้ nt-authoritynetwork-service /


ขอบคุณการใช้ "NT AUTHORITY \ SYSTEM" ช่วยแก้ปัญหาของฉันได้
Farzad Karimi

2

ฉันใช้การรับรองความถูกต้องของ Windows เพื่อเชื่อมต่อกับไฟล์. mdf ฐานข้อมูลในเครื่องและเซิร์ฟเวอร์ภายในของฉันคือ sql server 2014 ปัญหาของฉันแก้ไขได้โดยใช้สตริงการเชื่อมต่อนี้

string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";

ฉันต้องลบส่วนนี้ "User Instance = True" เพื่อให้ DB ในเครื่องของฉันทำงานได้
ไม่ระบุชื่อ

2

ในกรณีของฉันมันเป็นปัญหาอื่น ฐานข้อมูลเปลี่ยนเป็นโหมดผู้ใช้คนเดียวและการเชื่อมต่อครั้งที่สองกับฐานข้อมูลแสดงข้อยกเว้นนี้ ในการแก้ไขปัญหานี้ให้ทำตามขั้นตอนด้านล่าง

  1. ตรวจสอบให้แน่ใจว่า object explorer ชี้ไปที่ฐานข้อมูลระบบเช่น master
  2. ดำเนินการexec sp_who2และค้นหาการเชื่อมต่อทั้งหมดไปยังฐานข้อมูล 'my_db' ฆ่าการเชื่อมต่อทั้งหมดโดยทำโดยKILL { session id }ที่รหัสเซสชันคือ SPID ที่แสดงรายการโดย sp_who2
USE MASTER;
EXEC sp_who2
  1. แก้ไขฐานข้อมูล
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO

1

ฉันไม่เห็นสิ่งนี้ที่กล่าวถึงในประเด็นก่อนหน้านี้ดังนั้นขอฉันทิ้งความเป็นไปได้อื่น อาจเป็นไปได้ว่าIFItestไม่สามารถเข้าถึงได้หรือไม่มีอยู่จริง ตัวอย่างเช่นหากมีการกำหนดค่าหลายรายการแต่ละรายการมีฐานข้อมูลของตนเองอาจเป็นไปได้ว่าชื่อฐานข้อมูลไม่ได้เปลี่ยนเป็นชื่อที่ถูกต้องสำหรับการกำหนดค่าปัจจุบัน


1

หมายเหตุ: หากใช้บริการ windows เพื่อโฮสต์เว็บเซอร์

คุณต้องตรวจสอบให้แน่ใจว่าบริการเว็บของคุณใช้บัญชีล็อกออนที่ถูกต้องเพื่อเชื่อมต่อกับ SQL Server

  • เปิดบริการ (ฉันถือว่าบริการ windows ได้รับการติดตั้ง)
  • คลิกขวาที่บริการและคุณสมบัติ goto
  • คลิกที่แท็บ "เข้าสู่ระบบ"
  • คลิกที่ปุ่มตัวเลือก "บัญชีนี้"
  • คลิก "เรียกดู"
  • ป้อนชื่อผู้ใช้พีซีในฟิลด์ข้อความและคลิกปุ่ม "ตรวจสอบชื่อ" ทางด้านขวา
  • คลิกที่ข้อความในช่องข้อความกดปุ่ม "ตกลง"
  • ป้อนรหัสผ่านเข้าสู่ระบบและสมัคร

1

แรงบันดาลใจจากคำตอบของ cyptus ที่ฉันใช้

_dbContext.Database.CreateIfNotExists();

บน EF6 ก่อนการติดต่อฐานข้อมูลแรก (ก่อน DB seeding)


1

หากคุณไม่ได้สร้างฐานข้อมูลในเซิร์ฟเวอร์ของคุณคุณจะได้รับข้อผิดพลาดในการเข้าสู่ระบบเดียวกันตรวจสอบให้แน่ใจว่ามีฐานข้อมูลอยู่ก่อนที่คุณจะเข้าสู่ระบบ


1

ฉันพบปัญหานี้เมื่อพยายามเขียนไปยังฐานข้อมูลเริ่มต้นที่มีให้ในเทมเพลต asp.net mvc เนื่องจากยังไม่ได้สร้างฐานข้อมูล

ในการสร้างฐานข้อมูลและตรวจสอบให้แน่ใจว่าสามารถเข้าถึงได้ให้ทำตามขั้นตอนเหล่านี้:

  1. เปิดคอนโซลตัวจัดการแพ็คเกจใน Visual Studio
  2. เรียกใช้คำสั่ง "update-database"

สิ่งนี้จะสร้างฐานข้อมูลและเรียกใช้การย้ายข้อมูลที่จำเป็นทั้งหมดบนฐานข้อมูล


0

ตัวเลือกที่ดีที่สุดคือใช้การรับรองความถูกต้องแบบรวมของ Windows เนื่องจากมีความปลอดภัยมากกว่าการรับรองความถูกต้อง sql สร้างผู้ใช้ windows ใหม่ในเซิร์ฟเวอร์ sql ด้วยสิทธิ์ที่จำเป็นและเปลี่ยนผู้ใช้ IIS ในการตั้งค่าความปลอดภัยของแอปพลิเคชันพูล


0

ฉันพบว่าฉันต้องตั้งค่าตัวเลือก UserMapping เมื่อสร้างการเข้าสู่ระบบใหม่และสิ่งนี้ช่วยแก้ปัญหาให้ฉันได้ หวังว่าจะช่วยทุกคนที่พบว่าตัวเองติดอยู่ที่นี่!

แก้ไข: การตั้งค่าการเข้าสู่ระบบในฐานะเจ้าของฐานข้อมูลช่วยแก้ปัญหาถัดไปได้เช่นกัน


0

บางครั้งปัญหานี้อาจปรากฏขึ้นหากคุณเปิดฐานข้อมูลนี้ในเซิร์ฟเวอร์ sql อื่น (ตัวอย่างเช่นคุณเปิด sql managment studio (SMS) และเพิ่มฐานข้อมูลนี้) และอย่าลืมหยุดเซิร์ฟเวอร์นี้ เป็นผลให้แอปของคุณพยายามเชื่อมต่อกับผู้ใช้ที่เชื่อมต่อแล้วในฐานข้อมูลนี้ภายใต้เซิร์ฟเวอร์อื่น ในการแก้ไขให้ลองหยุดเซิร์ฟเวอร์นี้โดย Config เซิร์ฟเวอร์ผู้จัดส่ง sql

ฉันขอโทษเกี่ยวกับภาษาอังกฤษที่ไม่ดี ขอแสดงความนับถือ Ignat


0

ในกรณีของฉันแอปพลิเคชัน asp.net สามารถเชื่อมต่อกับฐานข้อมูลได้โดยไม่มีปัญหาใด ๆ ฉันสังเกตเห็นข้อความดังกล่าวในบันทึก ฉันเปิดบันทึกเซิร์ฟเวอร์ SQLและพบข้อความนี้:

2016-10-28 10:27:10.86 Logon       Login failed for user '****'. Reason: Failed to open the explicitly specified database '****'. [CLIENT: <local machine>]
2016-10-28 10:27:13.22 Server      SQL Server is terminating because of a system shutdown. This is an informational message only. No user action is required.

ดูเหมือนว่าเซิร์ฟเวอร์กำลังรีสตาร์ทและเซิร์ฟเวอร์ SQL ที่ปิดตัวลงก่อนหน้านี้เล็กน้อยจากนั้นแอปพลิเคชัน ASP.NET และฐานข้อมูลไม่พร้อมใช้งานเป็นเวลาสองสามวินาทีก่อนที่เซิร์ฟเวอร์จะรีสตาร์ท


0

แม้ว่าคุณจะตั้งค่าการเข้าสู่ระบบเป็นเจ้าของฐานข้อมูลและตั้งค่าการแมปผู้ใช้สำหรับฐานข้อมูลที่จะใช้การเข้าสู่ระบบให้ตรวจสอบว่าผู้ใช้ DB จริง (ไม่ใช่แค่การเข้าสู่ระบบ) มีบทบาทเป็น "เจ้าของ"


0

ในกรณีของฉันฉันใช้บริการ Windows ภายใต้ข้อมูลประจำตัว "ระบบ" ข้อผิดพลาดคือ:

System.Data.SqlClient.SqlException (0x80131904): 
Cannot open database "MyDbName" requested by the login. The login failed.
Login failed for user 'MYDOMAINNAME\HOSTNAME$'.

ปัญหาคือข้อผิดพลาดทำให้เข้าใจผิดได้มาก แม้ว่าฉันจะเพิ่มการเข้าสู่ระบบ 'MYDOMAINNAME \ HOSTNAME $' ลงในฐานข้อมูลและให้สิทธิ์การเข้าถึงระบบผู้ดูแลระบบนี้และเพิ่มผู้ใช้สำหรับการเข้าสู่ระบบนั้นในฐานข้อมูลเป้าหมายของฉันและทำให้ผู้ใช้รายนั้นเป็นเจ้าของฐานข้อมูลฉันก็ยังคงได้รับข้อผิดพลาดเดิม เห็นได้ชัดว่าฉันต้องทำเช่นเดียวกันสำหรับการเข้าสู่ระบบ 'NT AUTHORITY \ SYSTEM' หลังจากทำเช่นนั้นฉันก็สามารถเข้าสู่ระบบได้โดยไม่มีปัญหา ฉันไม่รู้ว่าทำไมข้อความแสดงข้อผิดพลาดถึงบ่นว่า "MYDOMAINNAME \ HOSTNAME $" ฉันลบการเข้าสู่ระบบและผู้ใช้ที่เกี่ยวข้องและทุกอย่างยังคงใช้งานได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.