ฐานข้อมูล Azure SQL“ การล็อกอินล้มเหลวสำหรับผู้ใช้” ในแอปพลิเคชัน แต่ทำงานได้ดีใน SSMS


14

ฉันต้องการลองใช้คุณลักษณะผู้ใช้ฐานข้อมูลที่มีอยู่ใน Azure SQL Database V12 แต่ฉันประสบปัญหาในการตรวจสอบสิทธิ์ซึ่งดูเหมือนว่าแปลกสำหรับฉัน

Classifierฉันสร้างฐานข้อมูลที่เรียกว่า ฉันเพิ่ม IP ของฉันไปที่กฎไฟร์วอลล์เพื่อให้ฉันสามารถเชื่อมต่อกับเซิร์ฟเวอร์ Azure db จาก SSMS บนเวิร์กสเตชันของฉัน เมื่อฉันสามารถเชื่อมต่อผ่าน SSMS เพื่อการดูแลระบบได้ฉันพยายามเพิ่มผู้ใช้ด้วยรหัสผ่านในฐานข้อมูลเช่นนี้

CREATE USER classifier WITH PASSWORD='thepassword'

ฉันยังเพิ่มผู้ใช้นี้ในบทบาทตัวเขียนข้อมูลและผู้อ่าน

exec sp_addrolemember 'db_datawriter', 'classifier'
exec sp_addrolemember 'db_datareader', 'classifier'

หลังจากนี้ฉันสามารถเชื่อมต่อกับฐานข้อมูลด้วยข้อมูลรับรองเหล่านี้จาก SSMS:

ป้อนคำอธิบายรูปภาพที่นี่

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

<add name="Classifier" connectionString="Data Source=xxxxxxx.database.secure.windows.net;Initial Catalog=Classifier;User ID=classifier;Password=xxxxxxxxxxxxx;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient"/>

ฉันพยายามรีเซ็ตรหัสผ่าน (ผ่าน SSMS) สำหรับผู้ใช้แล้วอัปเดตสตริงการเชื่อมต่อ; ฉันยังตรวจสอบรหัสผ่านอีกครั้งโดยคัดลอกมันออกมาจากสตริงการเชื่อมต่อนี้และในกล่องโต้ตอบการเชื่อมต่อใน SSMS เพื่อให้แน่ใจว่าฉันไม่ได้พิมพ์ผิดบางชนิดที่นั่น

ฉันเปิดใช้งานการตรวจสอบบัญชีในเซิร์ฟเวอร์ Azure db โดยหวังว่าจะได้รับรายละเอียดบางอย่างเกี่ยวกับสาเหตุที่มันล้มเหลว แต่ทั้งหมดที่ฉันได้รับคือ:

ข้อผิดพลาด 18456, ระดับ 14, สถานะ 1, เซิร์ฟเวอร์ SQL Azure, สาย 1 ล็อกอินล้มเหลวสำหรับผู้ใช้ 'ตัวจําแนก'

และนี่คือที่ฉันติดอยู่ ที่สุดของสิ่งที่ฉันสามารถค้นหาโดยเอกสารหรือบล็อกระบุว่าสิ่งที่ต้องทำคือดูที่บันทึก SQL Server เพื่อดูสิ่งที่สถานะข้อผิดพลาดจริงซึ่งจะบ่งบอกลักษณะของความล้มเหลวแคบลง แต่เนื่องจากฉัน กำลังติดต่อกับ Azure ไม่มีทางทำเช่นนั้น (เท่าที่ฉันรู้)

สิ่งที่อาจทำให้แอปพลิเคชันล้มเหลวโดยที่ SSMS (และ LinqPad และ Visual Studio Server Explorer โดยบังเอิญ) สำเร็จ

คำตอบ:


15

เราพบว่าด้วยฐานข้อมูลที่มีอยู่ / ผู้ใช้ที่มีอยู่คุณต้องระบุ:

GRANT CONNECT TO [YOUR_USER]

มิฉะนั้นCONNECTดูเหมือนว่าจะถูกเพิกถอนโดยปริยาย เมื่อเราทำการเปลี่ยนแปลงข้างต้นเราสามารถเข้าถึงฐานข้อมูล


เรามีบัญชีที่ใช้งานได้และหยุดทำงาน ฉันต้องให้การเชื่อมต่ออีกครั้ง
Shane Courtrille

บน Azure ฉันได้รับข้อผิดพลาดCannot find the user 'myuser', because it does not exist or you do not have permission.แม้ว่าชื่อผู้ใช้นั้นจะอยู่ภายใต้ความปลอดภัย> การเข้าสู่ระบบ แต่ไม่ใช่ MyDatabse> ความปลอดภัย> ผู้ใช้ ฉันพยายามCREATE USER [myuser] FOR LOGIN [myuser] WITH DEFAULT_SCHEMA=[mydb] GOแต่มีข้อผิดพลาดThe login already has an account under a different user name.
Korayem

ฉันมีปัญหาที่คล้ายกัน ในสภาพแวดล้อม dev ทุกอย่างทำงานเชื่อมต่อกับ SQL Azure แต่เมื่อเผยแพร่แล้วจะเกิดข้อผิดพลาดนั้น อย่างไรก็ตามฉันไม่สามารถเรียกใช้คำสั่งหรือสร้างผู้ใช้ใครก็ตามที่พยายามจะต่างกัน
Ricker Silva

@dezso ฉันกำลังเผชิญกับปัญหาที่คล้ายกัน รหัส ADO.NET และ EF (DBContext) ของฉันทำงานได้ดีในเครื่องท้องถิ่น (ยังไม่ได้ลองใน Azure) แต่รหัส EF ถูกใช้งานโดยใช้ IdentityDBConext ล้มเหลว ฉันไม่แน่ใจว่ามีอะไรผิดปกติหรือฟีเจอร์ใดของ IdentityDBConext ต้องมีการเข้าถึงเซิร์ฟเวอร์ นี่คือคำถามเดิมของฉันstackoverflow.com/questions/40260720/…
Hiren Desai

5

เมื่อเปลี่ยน API ของเราเพื่อเชื่อมต่อกับฐานข้อมูล Azure ผ่านผู้ใช้ใหม่ที่มีอยู่เราต้องเปลี่ยนสตริงการเชื่อมต่อของเราเพื่อรวม:

Persist Security Info=True;

แม้ว่าฉันจะไม่เข้าใจว่าทำไมต้องมีการเปลี่ยนแปลงนี้ฉันต้องการโพสต์ที่นี่เพื่อช่วยคนอื่นในอนาคต

เรามาลองกับคำถามนี้


2

ปัญหาของฉันก็แตกต่างกัน แต่ที่เกี่ยวข้อง: ผมพยายามที่จะเชื่อมต่อกับฐานข้อมูล SQL Azure โดยใช้ Studio จัดการเซิร์ฟเวอร์ SQL (SSMS) กับผู้ใช้ที่มีอยู่ ฉันได้รับข้อความ "การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้" ใน SSMS

วิธีแก้ไข:ในตัวเลือกการเชื่อมต่อ SSMS สำหรับหน้าต่างแบบสอบถามฉันได้ตั้งค่า "เชื่อมต่อกับฐานข้อมูล" เป็นชื่อของฐานข้อมูลที่ฉันพยายามเชื่อมต่อ

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


สนใจอธิบายการลงคะแนนเสียงไหม?
Vince Horst

1
ไม่ใช่ฉัน แต่อาจเป็นเพราะคำตอบของคุณตรงข้ามกับคำถาม ยังมีประโยชน์และขอบคุณการออกแบบที่ไม่ดีของกล่องโต้ตอบ SSMS นั้นเป็นข้อผิดพลาดง่าย ๆ ที่จะทำให้!
Simon_Weaver

0

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

เช่น. ฉันวิ่งเข้าไปในนี้ด้วยScaffold-DbContextคำสั่ง

https://github.com/aspnet/EntityFrameworkCore/issues/6624

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