“ การอ้างอิงที่ไม่ได้รับการแก้ไขกับผู้ใช้” หลังจากนำเข้าเป็นโครงการ VS DB


11

ฉันเพิ่งนำเข้าฐานข้อมูลการผลิต SQL Server 2008r2 ที่มีอยู่ไปยังโครงการฐานข้อมูล VS 2013

ตอนนี้ฉันได้รับข้อผิดพลาดจำนวนมากตามแนวของ

Error       SQL71501: User: [mydbuser] has an unresolved reference to Login [mydbuser].

ฉันไม่ต้องการโครงการ VS DB ของฉันเพื่อจัดการผู้ใช้ แต่ฉันกังวลว่ามันจะพยายามลบออกเมื่อทำการปรับใช้หากไม่ได้อยู่ที่นั่น

ตัวไฟล์เองนั้นถูกสร้างขึ้นเป็น

CREATE USER [mydbuser] FOR LOGIN [mydbuser];

หรือ

CREATE USER [mydomainuser] FOR LOGIN [MYDOMAIN\mydomainuser];

เครื่องหมายแสดงให้เห็นข้อผิดพลาดว่ามันเป็นเฉพาะสำหรับการเข้าสู่ระบบ เนื่องจากเป็นวัตถุระดับระบบฉันสามารถเข้าใจว่ามันอยู่นอกขอบเขตของโครงการ db

เป็นที่ต้องการหรือไม่ที่ฉันจะเปลี่ยนพวกเขาทั้งหมดเป็น

CREATE USER [mydbuser] WITHOUT LOGIN;

หรือเพิ่มส่วนCREATE LOGINคำสั่งที่จุดเริ่มต้นของแต่ละไฟล์?

การลบข้อมูลอ้างอิงการเข้าสู่ระบบดูเหมือนจะง่ายกว่าและการลบผู้ใช้ทั้งหมดจะง่ายที่สุด

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


1
ฉันเพิ่งสังเกตเห็นว่ามันไม่ได้เกิดขึ้นสำหรับผู้ใช้ทุกคน พวกเขาทั้งหมดเป็นผู้ใช้ SQL และบางส่วนถูกปิดใช้งาน (แม้ว่าบางคนจะไม่ใช่) ความคิดใดที่จะเริ่มมองหาความแตกต่าง?
เกร็ก

คำตอบ:


9

วิธีที่ง่ายที่สุดคือไม่จัดการผู้ใช้ผ่าน ssdt (คนส่วนใหญ่ไม่ได้) ดังนั้นคุณสามารถลบออกและไม่ปรับใช้การเข้าสู่ระบบหรือผู้ใช้

มีสามวิธี:

  • ตัวเลือกใหม่เพื่อละเว้นผู้ใช้ / การเข้าสู่ระบบ
  • เขียนผู้สนับสนุนการปรับใช้เพื่อดึงพวกเขาออก
  • ใช้ผู้สนับสนุนการปรับใช้ของฉันhttp://agilesqlclub.Codeplex.com

เอ็ด


ลิงก์ของคุณที่นี่มีประโยชน์ทีเดียว: blogs.msdn.com/b/ssdt/archive/2015/02/23/…
Greg

1
คุณช่วยอธิบายรายละเอียดเกี่ยวกับ "ตัวเลือกใหม่เพื่อเพิกเฉยต่อผู้ใช้ / การเข้าสู่ระบบ" ได้หรือไม่?
Yawar Murtaza


9

ฉันมีปัญหาเดียวกันและพบลิงค์นี้

ผู้ใช้มีการอ้างอิงที่ยังไม่ได้แก้ไขกับการเข้าสู่ระบบ

หากคุณสร้างการเข้าสู่ระบบเฉพาะแอปพลิเคชัน (ซึ่งคุณควร) คุณจะได้พบกับข้อผิดพลาดนี้เมื่อพยายามสร้างโซลูชันของคุณ ในการแก้ไขข้อผิดพลาดนี้ให้เลือกรวมประเภทวัตถุ 'ไม่ได้กำหนดขอบเขตไว้ในตัวเลือก (ไอคอนรูปเฟืองที่ด้านบน) เมื่อคุณทำการเปรียบเทียบ schema (คลิกขวาที่โครงการฐานข้อมูลเพื่อค้นหา Schema Compare) จากนั้นคุณสามารถนำเข้าข้อมูลเข้าสู่โครงการปกติของคุณและการอ้างอิงจะถูกจัดเรียง หมายเหตุ: หากคุณคลิกที่แท็บประเภทวัตถุและจะปิดกล่องโต้ตอบ (ซึ่งมันทำเพื่อฉัน) แทนการใช้ปุ่มแท็บจนกว่าจะมีการเน้น Application-scoped จากนั้นกดลูกศรลงเพื่อเน้น Non-Application-scoped และกด แถบพื้นที่ ตอนนี้คุณควรจะสามารถคลิกตกลงและดูการเข้าสู่ระบบ


1
ขอบคุณสำหรับคำตอบ! คุณสามารถให้บริบทสำหรับคำแนะนำเหล่านี้ได้ไหม ตัวอย่างเช่นการเปรียบเทียบสคีมาเกี่ยวข้องกับข้อผิดพลาดนี้อย่างไร แท็บประเภทวัตถุอยู่ที่ไหน คุณกดปุ่มแท็บที่ไหน อื่น ๆ
Jake

แน่ใจ โดยทั่วไปใน VS2013 / 2558 คุณมีโครงการฐานข้อมูลซึ่งมี SQL ทั้งหมดของคุณสำหรับโซลูชันที่คุณใช้ หากคุณคลิกขวาที่โครงการ DB นั้นและคลิกที่ "Schema Compare" คุณสามารถเปรียบเทียบอะไรในโครงการของคุณกับอะไรในฐานข้อมูลของคุณ ที่ด้านบนของหน้าต่างที่ปรากฏขึ้นเป็นไอคอนฟันเฟืองสำหรับการตั้งค่า คุณไม่สามารถคลิกที่ช่องทำเครื่องหมาย "ไม่ จำกัด ขอบเขตแอปพลิเคชัน" ด้วยเมาส์ของคุณด้วยเหตุผลบางอย่างดังนั้นให้ใช้คีย์แท็บแทน กดปุ่มแท็บหนึ่งครั้งจากนั้นกดปุ่มลูกศรลงเพื่อเว้นวรรคเพื่อเลือก หวังว่าจะช่วย
SpeedOfSpin

1

เห็นได้ชัดว่าปัญหานี้ยังคงเกิดขึ้นในโครงการฐานข้อมูล VS2017 เช่นกัน

ฉันจัดการเพื่อแก้ไขมันโดยการสร้างการเข้าสู่ระบบก่อนแล้วสร้างผู้ใช้

    -- Windows Account
    CREATE LOGIN [Domain\Username]
    FROM WINDOWS WITH DEFAULT_LANGUAGE = [us_english];

    GO

    CREATE USER [Domain\Username] FOR LOGIN [Domain\Username];
    GO

    -- Sql Acccount

    CREATE LOGIN [sql_account] WITH PASSWORD = 'Ch@ngeth1spA$swurD'
    GO

    CREATE USER [sql_account]
    FROM LOGIN [sql_account]
    WITH DEFAULT_SCHEMA = dbo

    GO


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