การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ "DOMAIN \ MACHINENAME $"


120

ฉันรู้ว่านี่เกือบจะซ้ำกัน: ข้อผิดพลาด "เข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'NT AUTHORITY \ IUSR'" ใน ASP.NET และ SQL Server 2008และการเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'username' - System.Data.SqlClient.SqlException กับ LINQ ใน ไลบรารีโปรเจ็กต์ / คลาสภายนอกแต่บางอย่างไม่เพิ่มขึ้นเมื่อเทียบกับแอปพลิเคชันอื่น ๆ บนเซิร์ฟเวอร์ของฉันและฉันไม่แน่ใจว่าทำไม

กล่องที่ใช้:

กล่อง ทดสอบ SQL กล่องเว็บกล่อง
SQL

ใบสมัครของฉัน:

ฉันมี ASP.NET Web Application ซึ่งอ้างอิงถึงไลบรารีคลาสที่ใช้ LINQ-to-SQL ตั้งค่าสตริงการเชื่อมต่ออย่างถูกต้องในไลบรารีคลาส ตามการเข้าสู่ระบบล้มเหลวสำหรับ 'ชื่อผู้ใช้' ของผู้ใช้ - System.Data.SqlClient.SqlException กับ LINQ ในไลบรารีโปรเจ็กต์ / คลาสภายนอกฉันยังเพิ่มสตริงการเชื่อมต่อนี้ไปยังแอปพลิเคชันบนเว็บ

สตริงการเชื่อมต่อใช้ข้อมูลประจำตัว SQL ตามนั้น (ทั้งในเว็บแอปและไลบรารีคลาส):

 <add name="Namespace.My.MySettings.ConnectionStringProduction"
        connectionString="Data Source=(SQL Test Box);Initial Catalog=(db name);Persist Security Info=True;User ID=ID;Password=Password"
        providerName="System.Data.SqlClient" />

การเชื่อมต่อนี้ได้รับการยืนยันว่าใช้งานได้โดยเพิ่มไปยัง Server Explorer นี่คือสตริงการเชื่อมต่อที่ไฟล์. dbml ของฉันใช้

ปัญหา:

ฉันได้รับข้อผิดพลาดต่อไปนี้:

System.Data.SqlClient.SqlException: Login failed for user 'DOMAIN\MACHINENAME$'.

กำลังอ้างถึงสิ่งนี้ข้อผิดพลาด "การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'NT AUTHORITY \ IUSR'" ใน ASP.NET และ SQL Server 2008บอกว่านั่นเป็นบริการเครือข่ายท้องถิ่นจริงๆและการใช้ชื่ออื่นที่ไม่ใช่โดเมนจะไม่ทำงาน

แต่ฉันสับสนเพราะฉันได้ตรวจสอบทั้ง SQL Box และ SQL Test Box SQL Management Studio แล้วและทั้งสองมีNT AUTHORITY/NETWORK SERVICEภายใต้ความปลอดภัย -> การเข้าสู่ระบบที่ระดับฐานข้อมูลซึ่งไม่ได้อยู่ในรายการความปลอดภัย -> ผู้ใช้ แต่อยู่ที่ระดับความปลอดภัยของฐานข้อมูล -> ผู้ใช้ที่ฉันให้ผู้ใช้แสดงในสตริงการเชื่อมต่อ

ที่ระดับ NTFS บนเว็บเซิร์ฟเวอร์สิทธิ์ที่มี NETWORK SERVICE มีการควบคุมทั้งหมด

สาเหตุที่ฉันสับสนเพราะฉันมีเว็บแอปพลิเคชั่นอื่น ๆ มากมายบนเว็บเซิร์ฟเวอร์ของฉันฐานข้อมูลนั้นอ้างอิงทั้งในกล่อง SQL และกล่องทดสอบ SQL และทั้งหมดนี้ใช้งานได้ แต่ฉันไม่พบความแตกต่างระหว่างพวกเขากับแอปพลิเคชันปัจจุบันของฉันนอกจากฉันกำลังใช้ไลบรารีชั้นเรียน จะเรื่องนั้นไหม การตรวจสอบสิทธิ์ NTFS การตั้งค่า Security Logins ที่ระดับเซิร์ฟเวอร์และฐานข้อมูลสตริงการเชื่อมต่อและวิธีการเชื่อมต่อ (ข้อมูลประจำตัวของ SQL Server) และพูลแอปพลิเคชัน IIS และตัวเลือกโฟลเดอร์อื่น ๆ จะเหมือนกันทั้งหมด

เหตุใดแอปพลิเคชันเหล่านี้จึงทำงานได้โดยไม่ต้องเพิ่มชื่อเครื่องจักร $ ลงในสิทธิ์ของกล่อง SQL ของฉัน แต่นั่นคือสิ่งที่ลิงค์เดียวบอกให้ฉันทำเพื่อแก้ไขปัญหานี้


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

ในสตริงการเชื่อมต่อฉันใช้ผู้ใช้ฐานข้อมูลซึ่งฉันสร้างขึ้นในพื้นที่ความปลอดภัย -> การเข้าสู่ระบบเพิ่มเข้าไปในผู้ใช้ความปลอดภัย -> ของฐานข้อมูลและให้สิทธิ์ dbo ซึ่งเป็นวิธีที่ฉันใช้แอปอื่น ๆ ทั้งหมดด้วย
SventoryMang

นี่คือคำอธิบายที่ชัดเจนจาก MSDN โดยใช้ชื่อเครื่องเริ่มต้นโดยทั่วไปคุณเพียงแค่เพิ่มโดเมน / เครื่อง $ ลงใน sql โดยไม่ต้องกดปุ่มค้นหา blogs.msdn.microsoft.com/ericparvin/2015/04/14/…
Brett Maiwald

คำตอบ:


156

NETWORK SERVICE และ LocalSystem จะตรวจสอบตัวเองเสมอว่าเป็นบัญชีที่ตอบสนองในเครื่อง (บริการเครือข่ายในตัวและระบบในตัว) แต่ทั้งสองจะตรวจสอบสิทธิ์เป็นบัญชีเครื่องจากระยะไกล

หากคุณเห็นความล้มเหลวเช่นLogin failed for user 'DOMAIN\MACHINENAME$'นี้หมายความว่ากระบวนการที่ทำงานเป็น NETWORK SERVICE หรือเนื่องจาก LocalSystem ได้เข้าถึงทรัพยากรระยะไกลได้ตรวจสอบตัวเองเป็นบัญชีเครื่องและถูกปฏิเสธการให้สิทธิ์

ตัวอย่างทั่วไปจะเป็นแอปพลิเคชัน ASP ที่ทำงานในพูลแอปที่ตั้งค่าให้ใช้ข้อมูลประจำตัว NETWORK SERVICE และเชื่อมต่อกับ SQL Server ระยะไกล: พูลแอปจะตรวจสอบสิทธิ์ขณะที่เครื่องกำลังเรียกใช้แอปพูลและเป็นบัญชีเครื่องนี้ที่ต้องได้รับสิทธิ์การเข้าถึง .

เมื่อการเข้าถึงถูกปฏิเสธไปยังบัญชีเครื่องจะต้องให้สิทธิ์การเข้าถึงบัญชีเครื่อง หากเซิร์ฟเวอร์ปฏิเสธที่จะเข้าสู่ระบบ 'DOMAIN \ MACHINE $' คุณต้องให้สิทธิ์การเข้าสู่ระบบ 'DOMAIN \ MACHINE $' ไม่ให้บริการเครือข่าย การให้สิทธิ์การเข้าถึง NETWORK SERVICE จะทำให้กระบวนการภายในที่รันเป็น NETWORK SERVICE สามารถเชื่อมต่อได้ไม่ใช่การเชื่อมต่อจากระยะไกลเนื่องจากรีโมตจะตรวจสอบสิทธิ์ตามที่คุณคาดเดา DOMAIN \ MACHINE $

หากคุณคาดว่าแอปพลิเคชัน asp จะเชื่อมต่อกับ SQL Server ระยะไกลเป็นล็อกอิน SQL และคุณได้รับข้อยกเว้นเกี่ยวกับ DOMAIN \ MACHINE $ หมายความว่าคุณใช้ Integrated Security ในสตริงการเชื่อมต่อ หากสิ่งนี้ไม่คาดคิดแสดงว่าคุณได้ขันสายการเชื่อมต่อที่คุณใช้


2
ถูกต้องว่าฉันรวบรวมอะไรมาขอบคุณสำหรับคำอธิบาย อย่างไรก็ตามคำถามยังคงอยู่แอปทั้งหมดของฉันโฮสต์บนเว็บเซิร์ฟเวอร์ของฉัน แต่เข้าถึงฐานข้อมูลบนกล่องทดสอบ SQL หรือ SQL ซึ่งจะเป็นการเข้าถึงระยะไกลใช่หรือไม่ ยังใช้งานได้ ... แต่กล่อง SQL ของฉันไม่ได้ให้สิทธิ์การเข้าถึง DOMAIN \ MACHINENAME $
SventoryMang

1
โอ้นอกจากนี้ฉันคาดว่าจะเชื่อมต่อกับเซิร์ฟเวอร์ SQL เป็น SQL เข้าสู่ระบบ แต่ฉันได้โพสต์สตริงการเชื่อมต่อของฉันฉันไม่ได้ใช้ตัวเลือก Integrated Security = True แล้วมันจะเป็นอะไรอีก ??
SventoryMang

2
มีคำอธิบายที่เป็นไปได้สามประการ: 1) พวกเขาใช้การตรวจสอบสิทธิ์ SQL แทนการตรวจสอบสิทธิ์แบบรวม (ซึ่งดูเหมือนจะเป็นไปได้มากที่สุดเนื่องจากตัวอย่างของคุณมีรหัสผู้ใช้และรหัสผ่านในสตริงการเชื่อมต่อ) 2) พวกเขาใช้การตรวจสอบสิทธิ์แบบรวมและทำงานในแบบสำรวจแอป ที่ใช้ข้อมูลประจำตัวที่แตกต่างกันหรือ 3) พวกเขาใช้แบบบูรณาการรับรองความถูกต้อง แต่แอบอ้างเป็นแอป ASP โทรจึงเรียกคณะผู้แทน จำกัด : technet.microsoft.com/en-us/library/cc739587%28WS.10%29.aspx
Remus Rusanu

2
โครงการเว็บแอปของคุณควรอ้างอิงโครงการไลบรารีคลาสไม่ใช่ dll เพิ่มโปรเจ็กต์ไลบรารีคลาสลงในโซลูชันเว็บแอพจากนั้นลบการอ้างอิงไปยัง dll และเพิ่มการอ้างอิงไปยังโปรเจ็กต์ วิธีนี้เมื่อปรับใช้หรือทดสอบเว็บแอปขายปลีกจะอ้างอิง dll คลาสขายปลีกและการดีบักจะอ้างอิงการดีบักโดยอัตโนมัติ
Remus Rusanu

1
แม้ว่าทั้งหมดนี้จะดีและดี แต่คุณจะเพิ่มการเข้าสู่ระบบลงใน SQL ได้อย่างไร? - ทั้งคู่อยู่บนโดเมนเดียวกันและฉันต้องการใช้การรักษาความปลอดภัยแบบรวม แต่เพียงแค่เพิ่มบัญชีชื่อ "Domain \ MachineName $" ก็ล้มเหลวโดยสิ้นเชิง (เช่นไม่มีอยู่จริงและ object explorer chokes และไม่พบอะไรเช่นนั้น)
BrainSlugs83

33

ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณกำหนดค่าแอปพลิเคชันของคุณด้วย IIS และ IIS จะไปที่ SQL Server และพยายามเข้าสู่ระบบด้วยข้อมูลประจำตัวที่ไม่มีสิทธิ์ที่เหมาะสม ข้อผิดพลาดนี้อาจเกิดขึ้นได้เมื่อตั้งค่าการจำลองแบบหรือการมิเรอร์ ฉันจะอธิบายวิธีแก้ปัญหาที่ใช้งานได้เสมอและง่ายมาก ไปที่ SQL Server >> Security >> Logins แล้วคลิกขวาที่ NT AUTHORITY \ NETWORK SERVICE แล้วเลือก Properties

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


7
นี่เป็นวิธีแก้ปัญหาสำหรับฉันเนื่องจากเว็บแอปพลิเคชันและฐานข้อมูลอยู่ในเครื่องเดียวกัน ฉันยังคงได้รับข้อผิดพลาด "การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้" DOMAIN \ MACHINENAME $ "แต่การเพิ่มเครื่องในการเข้าสู่ระบบ SQL ไม่ได้ช่วย แต่การเพิ่ม" NT AUTHORITY \ NETWORK SERVICE "ทำได้ แม้ว่าคุณไม่ควรใช้บทบาท db_owner เว้นแต่จะจำเป็น แต่ db_datareader และ db_datawriter ก็เพียงพอแล้ว
JimiSweden

18

ในกรณีของฉันฉันมีIdentity="ApplicationPoolIdentity"สำหรับ IIS Application Pool

หลังจากที่ฉันเพิ่มIIS APPPOOL\ApplicationNameผู้ใช้ลงใน SQL Server มันใช้งานได้


5
ฉันเชื่อว่าสิ่งนี้จะใช้ได้ก็ต่อเมื่อ IIS และเซิร์ฟเวอร์ SQL อยู่ในเครื่องเดียวกัน
Rob Davis

1
สิ่งนี้ได้ผลสำหรับฉัน! ฉันมีการตั้งค่าเซิร์ฟเวอร์ IIS-SQL ในเครื่อง
Vin Shahrdar

1
ขอบคุณมาก. ปัญหานี้เริ่มต้นสำหรับฉันหลังจากอัปเกรดสภาพแวดล้อม dev ภายในเครื่องของฉันจาก SQL Server 2014 เป็น 2017 ข้อเสนอแนะของคุณคือสัญลักษณ์แสดงหัวข้อย่อยสีเงินในสถานการณ์นี้
MFry

ขอบคุณทำงานให้ฉันด้วย สิ่งที่ฉันอยากจะเน้นก็คือข้อความแสดงข้อผิดพลาดยังคงเป็น 'การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้' DOMAIN \ MACHINENAME $ 'แม้ว่ากลุ่มแอปพลิเคชันจะถูกตั้งค่าให้ทำงานภายใต้ข้อมูลประจำตัวของพูลและการเข้าสู่ระบบจะล้มเหลวแม้ว่า' DOMAIN \ MACHINENAME $ 'จริง ได้รับสิทธิ์ในการเชื่อมต่อ ดูเหมือนข้อความแสดงข้อผิดพลาดที่ทำให้ฉันเข้าใจผิด
mivra

16

โดยพื้นฐานแล้วในการแก้ไขปัญหานี้เราจำเป็นต้องตั้งค่าบางอย่างเช่น

  • เว็บแอปที่ทำงานภายใต้ ApplicationPoolIdentity
  • Web Application ที่เชื่อมต่อกับฐานข้อมูลผ่าน ADO.Net โดยใช้ Windows Authentication ในสตริงการเชื่อมต่อ

สตริงการเชื่อมต่อที่ใช้กับการรับรองความถูกต้องของ Windows ประกอบด้วยTrusted_Connection=Yesแอตทริบิวต์หรือแอตทริบิวต์ที่เทียบเท่าIntegrated Security=SSPIในWeb.configไฟล์

การเชื่อมต่อฐานข้อมูลของฉันอยู่ในโหมด Windows Authentication ดังนั้นฉันจึงแก้ไขได้โดยเพียงแค่เปลี่ยนApplication Pools Identity จากApplicationPoolIdentityเป็นบันทึกโดเมนของฉันในข้อมูลประจำตัวDomainName \ MyloginId

ขั้นตอน:

  1. คลิกที่Application Pools
  2. เลือกชื่อแอปพลิเคชันของคุณ

  3. ไปที่การตั้งค่าขั้นสูง

  4. ขยายรูปแบบกระบวนการและคลิกเอกลักษณ์ คลิกสามจุดทางด้านขวาสุด
  5. คลิกปุ่มSet ...และระบุข้อมูลรับรองการเข้าสู่ระบบโดเมนของคุณ

สำหรับฉันมันได้รับการแก้ไขแล้ว

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


สำหรับคำถามข้างต้นนี่ควรเป็นคำตอบที่ยอมรับได้
makil

14

เคล็ดลับที่ได้ผลสำหรับฉันคือการลบออกIntegrated Securityจากสตริงการเชื่อมต่อของฉันและเพิ่มUser ID=userName; Password=passwordสตริงการเชื่อมต่อของคุณตามปกติในเดือนApp.configกุมภาพันธ์ของคุณอาจไม่ได้ใช้การรักษาความปลอดภัยแบบรวม แต่สิ่งที่สร้างขึ้นWeb.configคือ!


3
ขอขอบคุณคุณเป็นพันล้าน ความช่วยเหลือมากมายมหาศาล ขอบคุณขอบคุณขอบคุณ. นี่คือฉันแน่ใจว่าชัดเจนมาก แต่สำหรับคนในอนาคตมันคือ User Id = something; รหัสผ่าน = บางสิ่งบางอย่าง;
shubniggurath

2
ฉันได้รับข้อผิดพลาดเดียวกันในชื่อโพสต์ ฉันพบว่า 'User Id = yourUserid Password = yourPassword' ถูกละเว้นเมื่อ "'trust connection = true'" อยู่ในสตริงการเชื่อมต่อฐานข้อมูล ฉันลบ "'การเชื่อมต่อที่เชื่อถือได้ = true'" ออกจากสตริงของฉันและนั่นช่วยแก้ปัญหาของฉันได้ สิ่งนี้ไม่เกิดขึ้นจนกว่าฉันจะย้ายแอปพลิเคชันจากการดีบักใน VS 2012 เป็น iis 8
T3.0

12

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

เราใช้ Application Pool ที่กำหนดเองพร้อม Identity เฉพาะเพื่อตอบสนองความต้องการของเรา

ในตัวจัดการ IIS ในพื้นที่ของเขา -> ไซต์ -> เว็บไซต์เริ่มต้น -> ชื่อเว็บแอปของเรา -> การตั้งค่าพื้นฐาน ... กลุ่มแอปพลิเคชันคือ "DefaultAppPool" แทนกลุ่มแอปพลิเคชันที่กำหนดเองของเรา

การตั้งค่าพูลแอปพลิเคชันที่ถูกต้องช่วยแก้ปัญหาได้


11

ฉันเพิ่มลง<identity impersonate="true" />ใน web.config ของฉันแล้วและมันก็ใช้งานได้ดี


7
เพียงแค่เข้าใจว่าสิ่งนี้จะเปลี่ยนบริบทที่แอปพลิเคชัน ASP.NET ทำงานภายใต้อย่างครบถ้วน แทนที่จะทำงานภายใต้บริบท 'NETWORK SERVICE' เริ่มต้นตอนนี้จะทำงานภายใต้บริบทของผู้ใช้ที่ใช้แอปพลิเคชัน (เช่น Domain \ someUser) บางครั้งก็ใช้ได้ แต่เข้าใจว่าการเปลี่ยนแปลงนี้ไม่ได้เป็นเพียงการแก้ไข OP อย่างรวดเร็วและมีผลกระทบต่อเนื่องอื่น ๆ ที่อาจ / ไม่ต้องการ
atconway


6

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

การตั้งค่าสามารถทำได้ใน Internet Information Server (IIS 7+)> Application Pools> Advanded Settings> Process Model> Identity



3

เราได้รับข้อความแสดงข้อผิดพลาดที่คล้ายกันขณะประมวลผลฐานข้อมูล Analysis Services ปรากฎว่าชื่อผู้ใช้ซึ่งใช้ในการเรียกใช้อินสแตนซ์ Analysis Services ไม่ได้ถูกเพิ่มลงในล็อกอินความปลอดภัยของ SQL Server

ใน SQL Server 2012 บริการ SQL Server และ Analysis ถูกกำหนดค่าให้ทำงานเป็นผู้ใช้ที่แตกต่างกันตามค่าเริ่มต้น หากคุณใช้ค่าเริ่มต้นให้แน่ใจเสมอว่าผู้ใช้ AS สามารถเข้าถึงแหล่งข้อมูลของคุณได้!


1
ผมมีปัญหาเหมือนกัน. ข้อผิดพลาดจาก SSAS เหมือนกัน แต่บัญชีไม่ใช่ Network Service บัญชีนี้เป็นจริง: NT Service \ MSOLAP $ INSTANCENAME
cdonner


2

ฉันยังมีข้อผิดพลาดนี้กับผู้ใช้ที่รับรองความถูกต้องของ SQL Server

ฉันลองแก้ไขแล้ว แต่ก็ไม่ได้ผล

วิธีแก้ปัญหาในกรณีของฉันคือกำหนดค่า "Server Authentication Mode" เพื่ออนุญาตการรับรองความถูกต้องของ SQL Server ภายใต้ Management Studio: Properties / Security


1

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


0

ฉันใช้เวลาสองสามชั่วโมงในการพยายามแก้ไขปัญหาและในที่สุดก็ทำได้ - เบราว์เซอร์เซิร์ฟเวอร์ SQL ถูก "หยุด" วิธีแก้ไขคือเปลี่ยนเป็นโหมด "อัตโนมัติ":

หากปิดใช้งานให้ไปที่ Control Panel-> Administrative Tools-> Services แล้วมองหา SQL Server Agent คลิกขวาและเลือก "Properties" จากเมนูแบบเลื่อนลง "Startup Type" ให้เปลี่ยนจาก "Disabled" เป็น "Automatic"

อ้างจากที่นี่


0

ฉันมีปัญหาเดียวกันก่อนหน้านี้การลบออกPersist Security Info=Trueจาก connectionstring ใช้ได้ผลสำหรับฉัน


0

ฉันพบปัญหานี้เมื่อไคลเอนต์เปลี่ยนชื่อเป็น SQL Server บริการรายงาน SQL ได้รับการกำหนดค่าให้เชื่อมต่อกับชื่อเซิร์ฟเวอร์เก่าซึ่งพวกเขาได้สร้างนามแฝงสำหรับการเปลี่ยนเส้นทางไปยัง IP ของชื่อเซิร์ฟเวอร์ใหม่

แอป IIS เก่าทั้งหมดใช้งานได้โดยเปลี่ยนเส้นทางไปยังชื่อเซิร์ฟเวอร์ใหม่ผ่านนามแฝง ฉันตรวจสอบว่าพวกเขาใช้ SSRS อยู่หรือไม่ การพยายามเชื่อมต่อกับไซต์ SSRS ทำให้เกิดข้อผิดพลาด:

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

กำลังทำงานบนเซิร์ฟเวอร์ แต่ไม่สามารถเชื่อมต่อได้เนื่องจากใช้นามแฝงสำหรับชื่อเซิร์ฟเวอร์เก่า การกำหนดค่า SSRS ใหม่เพื่อใช้ชื่อเซิร์ฟเวอร์ใหม่แทนชื่อเดิม / นามแฝงที่แก้ไข


0
  1. เปลี่ยน App Pool Identity เป็น Local System
  2. บน SQL Mgmt> Security> Logins
    1. ค้นหา NT AUTHORITY \ SYSTEM ดับเบิลคลิก
    2. การแมปผู้ใช้> ตรวจสอบฐานข้อมูลของคุณและให้บทบาทด้านล่าง
    3. อย่าลืมสร้างฐานข้อมูลผู้ใช้ o การเข้าสู่ระบบความปลอดภัยด้วยรหัสผ่านที่ถูกต้อง

0

ฉันได้รับข้อผิดพลาดนี้ขณะพยายามทดสอบวิธีแก้ปัญหาโดยใช้สิ่งต่อไปนี้

string cn = "Data Source=[servername];Integrated Security=true;Initial Catalog=[dbname];";

วิธีที่ฉันแก้ไขคือ: ฉันต้องเปิด Visual Studio และเรียกใช้ภายใต้บัญชีอื่นเนื่องจากบัญชีที่ฉันใช้เปิดไม่ใช่บัญชีผู้ดูแลระบบของฉัน

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


0

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

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

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

ปัญหาคือ; ด้วยเหตุผลที่ไม่ชัดเจน บริการเครือข่ายได้เปลี่ยนไปใช้สิทธิ์การเข้าสู่ระบบ 'ปฏิเสธ' ในฐานข้อมูล

เพื่อแก้ไข:

  1. เปิด SSMS> ความปลอดภัย> การเข้าสู่ระบบ
  2. คลิกขวาที่ 'NT AUTHORITY \ NETWORK SERVICE' และคลิก Properties
  3. ไปที่แท็บ "สถานะ" และตั้งค่าเป็นPermission to Connect To Database Engine"ให้"

อนุญาตให้บริการเครือข่าย


0

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

ฉันทำงานใน IIS โดยตั้งค่า AppPools เป็นไฟล์ ApplicationPoolIdentityข้อมูลประจำตัว

ชื่อผู้ใช้ความปลอดภัย SQL ของฉันพร้อมการเข้าถึงถูกเรียก IIS APPPOOL\DefaultAppPoolและทำงานได้ดีกับแอปพลิเคชัน ASP.NET Full Framework .net

เมื่อเปิดแอปพลิเคชัน ASP.NET Core ของฉันแอปพลิเคชันจะสร้าง AppPool ใหม่ด้วยชื่อแอปพลิเคชัน แต่ไม่มีเวอร์ชัน CLR และยังคงใช้ApplicationPoolIdentityข้อมูลประจำตัวเดิม

แต่หลังจากดูชื่อผู้ใช้ที่ใช้ผ่านSystem.Security.Principal.WindowsIdentity.GetCurrent().Nameฉันพบว่ามันไม่ได้ใช้ DefaultAppPool แต่เป็นชื่อพูลแอปใหม่ ดังนั้นฉันจึงต้องเพิ่มผู้ใช้ใหม่ที่เรียกว่าIIS APPPOOL\ApplicationNameในแท็บความปลอดภัยของ SQL ไม่ใช่ค่าเริ่มต้น

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