การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'IIS APPPOOL \ ASP.NET v4.0'


432

ฉันมีโครงการเว็บ (C # Asp.Net, EF 4, MS SQL 2008 และ IIS 7) และฉันจำเป็นต้องโยกย้ายไปยัง IIS 7 ในเครื่อง (ในขณะนี้ทำงานได้ดีกับ CASSINI)

ใน IIS ฉันมีของฉันDefault Web Siteด้วยการปรับใช้ของฉัน ทั้งการปรับใช้ของฉันและDefault Web Siteอยู่ในพูล ASP.NET v4.0 (มองหาการตั้งค่า) เป้าหมายพูล 4 Framework เป็นโครงการเว็บของฉัน การตั้งค่าสระว่ายน้ำ เมื่อเยี่ยมชมเว็บไซต์เบราว์เซอร์จะไม่แสดงหน้าดังกล่าวและอนุญาตให้เบราว์เซอร์ดาวน์โหลดหน้าแทน

ฉันมีโครงการอื่นที่ทำงานบน IIS ในเครื่องและทำงานได้โดยไม่มีปัญหา (แต่พวกเขาไม่ได้ใช้ Entity Framework)

การใช้ตัวบันทึกเหตุการณ์ฉันเห็นข้อผิดพลาดดังต่อไปนี้:

Exception information: 
    Exception type: EntityException 
    Exception message: The underlying provider failed on Open.
   at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)


    Login failed for user 'IIS APPPOOL\ASP.NET v4.0'.
       at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
       at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
       at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
       at System.Data.SqlClient.SqlConnection.Open()
       at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)

คำถามที่เกี่ยวข้อง

ปรับปรุง: คุณสามารถอ่านในทรัพยากรในคำถามนี้ว่าต้องได้รับอนุญาตใน MS SQL 2008 ด้วยตนเองตามที่อธิบายในคำตอบของเขา การใช้ IIS 7.5 และ MS SQL 2008 R2 ไม่จำเป็นต้องตั้งค่าการอนุญาตด้วยตนเอง


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

ฉันไม่แน่ใจคุณช่วยบอกฉันหน่อยได้ไหมว่าต้องทำยังไง?
GibboK


ที่จริงแล้ว adrift บอกว่านี่อาจเป็นปัญหาด้านความปลอดภัยของ sql คุณควรตั้งค่าบัญชีผู้ใช้ NT ให้กับ AppPool จากนั้นให้สิทธิ์แก่โฟลเดอร์เว็บไซต์และตารางที่เหมาะสมใน SQL
Christian

1
@GibboK: ฉันขอแนะนำให้คุณอ่านคำตอบที่ยอมรับได้ที่นี่และเลือกคำตอบที่เหมาะสมกว่านี้ คำตอบที่ได้รับการยอมรับนั้นทำให้หลายคนกลายเป็นหลุมดำที่ปลอดภัย ใช่มันใช้งานได้ ไม่มันไม่ใช่ความคิดที่ดี ดูความคิดเห็นของฉันด้านล่าง
อะไรต่อมิอะไร

คำตอบ:


596

ดูเหมือนว่าล้มเหลวในการพยายามเปิดการเชื่อมต่อกับ SQL Server

คุณต้องเพิ่มการเข้าสู่ระบบ SQL Server IIS APPPOOL\ASP.NET v4.0และให้สิทธิ์แก่ฐานข้อมูล

ใน SSMS ภายใต้เซิร์ฟเวอร์ขยายการรักษาความปลอดภัยจากนั้นคลิกขวาเข้าสู่ระบบและเลือก "เข้าสู่ระบบใหม่ ... "

ในช่องโต้ตอบเข้าสู่ระบบใหม่ให้ป้อนแอพพลิเคชั่นเป็นชื่อล็อกอินและคลิก "ตกลง"

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

จากนั้นคุณสามารถคลิกขวาที่เข้าสู่ระบบสำหรับกลุ่มแอพเลือก Properties และเลือก "User Mapping" ตรวจสอบฐานข้อมูลที่เหมาะสมและบทบาทที่เหมาะสม ผมคิดว่าคุณก็สามารถเลือกdb_datareaderและdb_datawriterแต่ฉันคิดว่าคุณยังจะต้องให้สิทธิ์ในการดำเนินการขั้นตอนการเก็บถ้าคุณทำอย่างนั้นผ่าน EF คุณสามารถตรวจสอบรายละเอียดของบทบาทที่นี่


8
ขอบคุณฉันทำสิ่งที่คุณเศร้าตอนนี้ฉันได้รับข้อผิดพลาดนี้: ไม่สามารถเปิดฐานข้อมูล "SiteNameExtension" ที่ร้องขอโดยการเข้าสู่ระบบ การเข้าสู่ระบบล้มเหลว การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'IIS APPPOOL \ DefaultAppPool'
GibboK

76
สิ่งสำคัญมาก: อย่าคลิกค้นหาเพื่อยืนยันการเข้าสู่ระบบ! มันจำไม่ได้ แต่ใช้งานได้ เพียงพิมพ์เป็น IIS APPPOOL \ SimonsAppPoolName ดูstackoverflow.com/questions/1933134
Simon_Weaver

6
ควรเปลี่ยน 'Identity' เป็น 'LocalSystem' จาก IIS แทนดังที่อธิบายไว้ในคำตอบถัดไป
Altaf Patel

สามารถทำงานได้เมื่ออินสแตนซ์เซิร์ฟเวอร์ SQL ของคุณอยู่ในเครื่องโฮสต์อื่นจากนั้นเครื่องโฮสต์ IIS ของคุณหรือไม่ เพราะฉันต้องการแก้ไขปัญหาเดียวกัน แต่ SQL และ IIS ไม่ได้อยู่ในเครื่องเดียวกัน ดังนั้นการใช้ Windows Authentication สำหรับผู้ใช้ใหม่นั้นจะไม่ทำงาน
Segers-Ian

5
สำหรับฉันที่ผู้ใช้เพิ่มคือ 'IIS APPPOOL \ DefaultAppPool' จากนั้นก็ใช้งานได้
คลื่น

343

คุณสามารถเปลี่ยน ApplicationPoolIdentity จาก IIS7 -> Application Pools -> การตั้งค่าขั้นสูง ตั้งค่าขั้นสูง

ภายใต้ ApplicationPoolIdentity คุณจะพบระบบภายในเครื่อง นี่จะทำให้แอปพลิเคชันของคุณทำงานภายใต้NT AUTHORITY\SYSTEMซึ่งเป็นล็อกอินที่มีอยู่สำหรับฐานข้อมูลโดยค่าเริ่มต้น

แก้ไข: ก่อนที่จะใช้คำแนะนำนี้คุณควรทราบและเข้าใจถึงผลกระทบด้านความปลอดภัย


51
@GibboK หากคุณกังวลเกี่ยวกับความปลอดภัยอย่าทำเช่นนี้ ดูtechnet.microsoft.com/en-us/library/dd378907(v=WS.10).aspx
Jeff Ogata

4
นอกเหนือจากการเรียกใช้แอพพลิเคชั่นในฐานะ LocalSystem แล้วฉันยังต้องแมปบทบาทผู้ใช้ "NT AUTHORITY \ SYSTEM" กับฐานข้อมูล
Phil

31
สิ่งนี้มีกลิ่นเหม็น การให้สิทธิ์ระบบแก่แอปพลิเคชันบนเว็บเป็นสูตรสำหรับภัยพิบัติและช่วยให้ผู้ที่ทำผิดพลาดทุกประเภทมีโอกาสที่จะสร้างความเลวร้ายไม่เพียง แต่แอปพลิเคชันบนเว็บของคุณเท่านั้น เพียงเพราะฐานข้อมูลยอมรับการเข้าสู่ระบบจากระบบไม่ได้หมายความว่าคุณควรเรียกใช้แอปพลิเคชันเว็บเป็นระบบ เดสก์ท็อป windows จะไม่ยอมให้คุณทำงานเป็น SYSTEM (โดยไม่ต้องผ่านห่วง) การใช้งานเว็บแอพด้วยสิทธิ์นี้เป็นความคิดที่โง่จริงๆ คุณควรทำให้ DB ยอมรับข้อมูลประจำตัวของ apppool ปัจจุบัน ฉันต้องการ -100 ถ้าทำได้ -1
อะไรต่อมิอะไร

8
ระบบมีสิทธิ์สูงกว่าผู้ดูแลระบบมากขึ้น คุณไม่ควรเรียกใช้เว็บเซิร์ฟเวอร์ของคุณด้วยสิ่งใดก็ตามที่เข้าใกล้ระดับนั้น
slugster

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

29

ให้แน่ใจว่าคุณมี ...

Trusted_Connection=false;

ในสตริงการเชื่อมต่อของคุณ


7
การมี Trusted_Connection = true ในสตริงการเชื่อมต่อจะแทนที่ค่าการรับรองความถูกต้องของ SQL ด้วยโปรไฟล์ผู้ใช้ IIS Identity
Jeff the Bear

2
ในกรณีของฉันลบ: Integrated Security = True จากสตริงการเชื่อมต่อแก้ไข
Carlos R Balebona

ทำงานให้ฉัน บันทึกวันที่ @JefftheBear
D_Edet

26

ฉันแก้ไขปัญหานี้โดยใช้ sql เป็นภาพต่อไปนี้

คลิกขวาที่ db-> properties -> permission -> View Server permission -> จากนั้นเลือกIIS APPPOOL\ASP.NET v4.0และให้สิทธิ์

ฐานข้อมูล


กระบวนการ (และรูปภาพ) ข้างต้นเป็นสิ่งที่คุณกำลังอธิบายถึงระดับสิทธิ์ของเซิร์ฟเวอร์ระดับ GRANTing ใน Application Pool Identity หรือไม่ ดูเหมือนจะไม่เป็นความคิดที่ดี
Chris Walsh

2
ผู้ใช้รายนี้สมควรได้รับเหรียญ! ไม่มีอะไรช่วย แต่นี่!
Khateeb321

2
@ Khateeb321 ขอบคุณ DevT มากสำหรับคำตอบของคุณ
Azxdreuwa

22

เรียกใช้สคริปต์ sql นี้

IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool')
BEGIN
    CREATE LOGIN [IIS APPPOOL\DefaultAppPool] 
      FROM WINDOWS WITH DEFAULT_DATABASE=[master], 
      DEFAULT_LANGUAGE=[us_english]
END
GO
CREATE USER [WebDatabaseUser] 
  FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GO
EXEC sp_addrolemember 'db_owner', 'WebDatabaseUser'
GO

ขอบคุณวิธีที่ง่ายที่สุด;) +1
Zolfaghari

11

หากในสตริงการเชื่อมต่อที่คุณระบุ:

User ID=xxx;Password=yyy

แต่ในสตริงการเชื่อมต่อมี:

Trusted_Connection=true;

SQL Server จะใช้ Windows Authentication ดังนั้นค่าการเชื่อมต่อของคุณจะถูกละเว้นและแทนที่ (IIS จะใช้บัญชี Windows ที่ระบุในโปรไฟล์ผู้ใช้ Identity) ข้อมูลเพิ่มเติมที่นี่

เช่นเดียวกันถ้าในสตริงการเชื่อมต่อมี:

 Integrated Security = true;

หรือ

 Integrated Security = SSPI;

เพราะ Windows Authentication จะใช้เชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูล ข้อมูลเพิ่มเติมที่นี่


10

ไปที่ iis -> กลุ่มแอปพลิเคชัน -> ค้นหากลุ่มแอปพลิเคชันของคุณที่ใช้ในแอปพลิเคชัน

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

เลือกกลุ่มแอปพลิเคชันของคุณที่ใช้สำหรับแอปพลิเคชันคลิกขวาเลือกการตั้งค่าขั้นสูง

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

เลือกข้อมูลประจำตัวกลุ่มแอปพลิเคชัน ป้อนคำอธิบายรูปภาพที่นี่

เลือกบิวด์อินเป็น Local System แล้วคลิกตกลง


7

ฉันเกลียด ApplicationPoolIdentity ฉันตั้งค่าบัญชีผู้ใช้ Windows เป็นบัญชีใน AppPools เสมอ

ดังที่ adrift บอกว่ามันฟังดูเหมือนปัญหาความปลอดภัยของฐานข้อมูล ดังนั้นสร้างบัญชีผู้ใช้ NT กำหนดให้แอป ASP.NET v4.0 AppPool จากนั้นให้อนุญาตบนโฟลเดอร์เว็บไซต์และตารางที่เกี่ยวข้องใน SQL


ขออภัยไม่รู้ว่าจะทำอย่างไรคุณช่วยชี้ให้ฉันดูบทเรียนได้ไหม? ขอบคุณสำหรับความช่วยเหลือของคุณในเรื่องนี้
GibboK

2
อย่าทำเช่นนี้มีสาเหตุที่ IIS เปลี่ยนข้อมูลประจำตัวของแอพLearn.iis.net/page.aspx/624/application-pool-identities
Julien Lebot

@ LeSnip3R ลิงก์เสีย
Adaptabi

6

อย่าใช้การรักษาความปลอดภัยแบบรวม ใช้User Id=yourUser; pwd=yourPwd;

วิธีนี้จะช่วยแก้ปัญหา


4

ฉันมีปัญหานี้และมันเกิดจากความแตกต่าง - ฉันมีผู้ใช้ 'IIS APPPOOL \ ASP.NET v4.0' ในฐานข้อมูลของฉัน แต่มันก็ยังไม่ทำงาน

ฉันเพิ่งอัพเกรดการติดตั้งเซิร์ฟเวอร์ SQL ของฉันและในกระบวนการผู้ใช้ถูกตัดการเชื่อมต่อจากการเข้าสู่ระบบ - ดังนั้นจึงมี 'IIS APPPOOL \ ASP.NET v4.0' ภายใต้ฐานข้อมูล -> ความปลอดภัย -> ผู้ใช้ แต่ไม่มีผู้ใช้ภายใต้ความปลอดภัย -> เข้าสู่ระบบ

เพิ่มเข้าสู่ระบบ 'IIS APPPOOL \ ASP.NET v4.0' เพื่อความปลอดภัย -> เข้าสู่ระบบ, SQL Server แมปโดยอัตโนมัติไปยังผู้ใช้ในฐานข้อมูล (นี้เคยต้องทำด้วยตนเอง) และแก้ไขปัญหา


1
เพียงเพิ่ม ... ที่ด้านซ้ายมือภายใต้สิทธิ์ ... ทำเครื่องหมาย db_writer และ db_reader; และเลือกฐานข้อมูลที่จะใช้สิทธิ์เหล่านั้น
benjieb

4

สิ่งแรกที่คุณต้องล้างหากคุณใช้การรับรองความถูกต้องของ windows และคุณไม่ได้กล่าวถึงรหัสผ่านชื่อผู้ใช้ใด ๆ ในสตริงการเชื่อมต่อของคุณ:

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

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

ดังนั้นหากคุณใช้การรับรองความถูกต้องของ windows เพื่อเชื่อมต่อฐานข้อมูลของคุณคุณเพียงแค่เปลี่ยนการตั้งค่า IIS Application pool คุณต้องเปลี่ยนข้อมูลประจำตัวของพูลโปรแกรมประยุกต์ IIS เป็นระบบภายในเครื่อง

ด้านล่างนี้เป็นขั้นตอนสำหรับการรับรองความถูกต้องของ windows WCF:

1) เปิด IIS (windows + R (เรียกใช้) จากนั้นพิมพ์ inetmgr จากนั้นคลิกตกลง)

2) ดับเบิลคลิกที่ชื่อพีซีของคุณภายใต้การเชื่อมต่อ

3) คลิก Application Pools

4) เลือกกลุ่มแอปของคุณ (DefaultAppPool)

5) จากนั้นภายใต้การกระทำบนคลิกขวาการตั้งค่าขั้นสูง:

6) ไปที่ส่วนโมเดลกระบวนการและ

7) คลิกที่ตัวตน

8) เลือก LocalSystem

ตอนนี้เปิดสตูดิโอจัดการเซิร์ฟเวอร์ sql ของคุณ: เปิด run-> จากนั้นพิมพ์ ssms -> จากนั้นกดตกลงใน ssms เข้าสู่ระบบโดยใช้บัญชีการรับรองความถูกต้อง windows ของคุณ เปิดแท็บความปลอดภัยขยายแท็บการเข้าสู่ระบบจากนั้นคุณจะสามารถดูบัญชีของคุณได้

ตอนนี้เปิดคุณสมบัติของบัญชีของคุณไปที่ userMapping จากนั้นเลือกฐานข้อมูลที่คุณต้องการเชื่อมต่อจากนั้นตรวจสอบบริการสมาชิกบทบาทที่คุณต้องการใช้สำหรับฐานข้อมูลที่เลือก คลิกตกลง

(สำหรับบริการเครือข่ายเช่นผู้ใช้อินทราเน็ตคุณต้องกำหนดการตั้งค่าข้างต้นสำหรับผู้ใช้ NT AUTHORITY \ SYSTEM ด้วย)

เพิ่ม Trusted_Connection = True; คุณสมบัติในสตริงการเชื่อมต่อของคุณ บันทึกและปรับใช้บริการเว็บ รีสตาร์ทกลุ่มแอป

คุณจะสามารถเชื่อมต่อฐานข้อมูลได้ทันที


ที่สมบูรณ์แบบ! LocalSystem แก้ไขปัญหานี้ให้ฉัน :)
เผด็จการ

3

ฉันมีข้อความนี้และฉันใช้ Windows Authentication บนเว็บเซิร์ฟเวอร์

ฉันต้องการให้ผู้ใช้เว็บที่ได้รับการรับรองความถูกต้องในปัจจุบันได้รับการรับรองความถูกต้องกับฐานข้อมูลมากกว่าที่จะใช้ผู้ใช้ IIS APPPOOL \ ASP.NET v4 ที่ระบุใน App Pool

ฉันพบโดยป้อนสิ่งต่อไปนี้ใน web.config แก้ไขสิ่งนี้ให้ฉัน:

<system.web>
  <identity impersonate="true" />
</system.web>

https://msdn.microsoft.com/en-us/library/bsz5788z.aspx

ฉันเห็นคำตอบอื่น ๆ เกี่ยวกับการสร้างชื่อผู้ใช้ AppPool ใน SQL DB หรือเพียงแค่ใช้ SQL Auth ทั้งคู่จะถูกต้องหากคุณไม่ต้องการจับภาพหรือรักษาความปลอดภัยให้กับผู้ใช้ Windows แต่ละคนใน SQL

ทอม


วิธีนี้แก้ไขได้สำหรับเราและเราไม่แน่ใจว่าทำไม IIS / AppPool เพียงแค่จี้สตริงการเชื่อมต่อที่ระบุว่า "Integrated Security = true" อย่างชัดเจนหรือไม่ ทำไม??
Guy

3

1_in SqlServer Security => เข้าสู่ระบบ => NT AUTHORITY \ SYSTEM => RightClick => คุณสมบัติ => UserMaping => เลือก YourDatabse => สาธารณะ && เจ้าของเลือก => ตกลง 2_In IIs แอพพลิเคชั่นพูล DefaultAppPool => การตั้งค่าล่วงหน้า => LocalSystem => Ok



2

Cassini เรียกใช้เว็บไซต์ของคุณเป็นข้อมูลประจำตัวของผู้ใช้เมื่อคุณเริ่มต้นแอปพลิเคชัน Visual Studio IIS เรียกใช้เว็บไซต์ของคุณเป็นรหัสประจำตัวของแอพ หากไม่มี App Pool Identity ให้สิทธิ์การเข้าถึงฐานข้อมูลคุณจะได้รับข้อผิดพลาด

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

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

ดำเนินการต่อเพื่อใช้ Windows Integrated Security ใน Connection Strings ทั้งหมด ใน SQL Server ให้เพิ่มผู้ใช้โดเมนเป็นข้อมูลเข้าสู่ระบบและให้สิทธิ์ในฐานข้อมูลตาราง SP ฯลฯ ในแต่ละเว็บไซต์ เช่น DB1 ที่ Website1 ใช้มีการเข้าสู่ระบบสำหรับ User1 เนื่องจาก Website1 ทำงานบน App Pool ในฐานะ User1

ความท้าทายอย่างหนึ่งในการปรับใช้จากฐานข้อมูลในตัวของ Visual Studio (เช่น LocalDB) และเว็บเซิร์ฟเวอร์ในตัวกับสภาพแวดล้อมการผลิตนั้นมาจากข้อเท็จจริงที่ว่าผู้ใช้ SID และ ACL ของผู้พัฒนาไม่ได้ถูกใช้ในสภาพแวดล้อมการผลิตที่ปลอดภัย Microsoft มีเครื่องมือสำหรับการปรับใช้ แต่น่าเสียดายที่นักพัฒนาที่ไม่ดีซึ่งคุ้นเคยกับทุกอย่างที่เพิ่งทำไปในกล่อง VS IDE แบบใหม่ง่าย ๆ กับ localDB และ localWebServer เพราะเครื่องมือเหล่านี้จะใช้งานยากสำหรับนักพัฒนานั้นโดยเฉพาะอย่างยิ่งสำหรับนักพัฒนาที่ขาด SysAdmin และ DBAdmin หรือ ความรู้เฉพาะของพวกเขา อย่างไรก็ตามการปรับใช้กับ Azure นั้นง่ายกว่าสถานการณ์เครือข่ายองค์กรที่กล่าวถึงข้างต้น


2

หากคุณเพิ่มสตริงการเชื่อมต่อใน web.config ตรวจสอบให้แน่ใจว่า "Integrated Security = false;" ดังนั้นมันจะใช้รหัสและรหัสผ่านที่ระบุใน web.config

<connectionStrings>
    <add providerName="System.Data.SqlClient" name="MyDbContext" connectionString="Data Source=localhost,1433;Initial Catalog=MyDatabase;user id=MyUserName;Password=MyPassword;Trusted_Connection=true;Integrated Security=false;" />
</connectionStrings>

2

ตามที่ระบุไว้ อย่าใช้การพิสูจน์ตัวจริงของ Windows ใช้การพิสูจน์ตัวจริงของเซิร์ฟเวอร์ SQL

นอกจากนี้หากคุณสร้างการเชื่อมต่อโดยใช้กล่องโต้ตอบ "การเชื่อมต่อเซิร์ฟเวอร์" ให้ตรวจสอบการเชื่อมต่อใน web.config มีโอกาสที่คุณจะสร้าง / แก้ไขการเชื่อมต่อและถูกเก็บไว้เป็นการเชื่อมต่อที่เชื่อถือได้ใน web.config เพียงใช้การรับรองความถูกต้องนี้

<add name="MyDBConnectionString" connectionString="Data Source=localhost;Initial Catalog=Finantial;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient"/>

ซึ่งควรแก้ไขข้อผิดพลาด


2

อีกวิธีในการให้สิทธิ์แก่ฐานข้อมูลสำหรับผู้ใช้IIS APPPOOL\ASP.NET v4.0มีดังนี้
ป้อนคำอธิบายรูปภาพที่นี่


  1. เพิ่มผู้ใช้ใหม่ด้วยชื่อผู้ใช้และชื่อเข้าสู่ระบบเช่นเดียวIIS APPPOOL\ASP.NET v4.0กับสคีมาเริ่มต้นของคุณ
  2. ไปที่เจ้าของสคีมาและการเป็นสมาชิกตรวจสอบ db_datareader, db_datawriter

1

คิดว่าฉันโพสต์สิ่งนี้เป็นคำตอบเนื่องจากเกี่ยวข้องกับคำถามและสามารถตอบได้ในบางกรณี

ข้อความเดียวกันนั้นจะปรากฏขึ้นหากไม่มีฐานข้อมูล!

ตรวจสอบให้แน่ใจว่าสตริงการเชื่อมต่อของคุณไม่มีการสะกดผิดชี้ไปที่อินสแตนซ์ของเซิร์ฟเวอร์ที่ถูกต้องเป็นต้น


1

ฉันมีปัญหาเดียวกันฉันจะแก้ไขมันได้โดยการเปลี่ยนIntegrated Security=Trueการเท็จ ในขณะนี้การทำงานของตน


1

สิ่งที่คล้ายกันเกิดขึ้นกับฉันสิ่งที่ใช้งานได้สำหรับฉันคือการเปลี่ยนคุณสมบัติการรักษาความปลอดภัยแบบรวม = จริงเป็นแบบบูรณาการความปลอดภัย = เท็จใน web.config ของเว็บไซต์


ใช้งานได้! ฉันเพิ่งลบความปลอดภัยแบบรวม
Charles Xavier

0

คุณได้ทำสิ่งที่@Teddyแนะนำและคุณยังได้รับข้อผิดพลาดเดียวกันหรือไม่?

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


0

ใน DefaultAppPool ตั้ง NetworkService ในคุณสมบัติ Identity และใน SQL Server เพิ่ม User Network Service และให้สิทธิ์ที่เหมาะสมแก่ฐานข้อมูลของคุณซึ่งทำงานได้ดีมากสำหรับฉันฉันทดสอบในเครื่องแล้ว แต่ฉันคิดว่านี่เป็นการกำหนดค่าที่ดีที่สุดสำหรับการเชื่อมต่อจากใด ๆ คอมพิวเตอร์เครื่องอื่นในเครือข่าย เมื่อคุณตั้งค่า LocalSystem ใน Identity ใน IIS ที่ทำงานได้ดีและไม่จำเป็นต้องสร้างผู้ใช้อื่นใน SQL Server แต่ฉันคิดว่ามันจะไม่ทำงานในสภาพแวดล้อมเครือข่าย


0

ฉันพบปัญหาเดียวกันในการทดสอบ ASP.NET Web API

เว็บที่พัฒนาแล้วโฮสต์ใน Visual Studio 2013 Express Database ที่สร้างใน SQL Server 2012 Express ดำเนินการทดสอบโดยใช้งานใน IIS Express (ทำงาน) แก้ไขเพื่อใช้ IIS Local (จากหน้าคุณสมบัติ - ตัวเลือกเว็บ) เรียกใช้ทดสอบด้วย Fiddler ได้รับข้อผิดพลาด - ไม่สามารถเปิดฐานข้อมูล สำหรับผู้ให้บริการ .... อ้างถึง 'APPPOOL \ DefaultAppPool'

ทางออกที่ได้ผล

ใน IIS

คลิกที่กลุ่มแอพพลิเคชั่น 'DefaultAppPool' Set Identify = 'ApplicationPoolIdentity' Set .NET framework = v4.0 (แม้ว่าแอปของฉันจะเป็น 4.5)

ใน Studio จัดการเซิร์ฟเวอร์ SQL

คลิกขวาที่โฟลเดอร์ Security (ภายใต้โปรแกรม SQL Server เพื่อนำไปใช้กับตารางทั้งหมด) คลิกขวาที่ผู้ใช้และเพิ่ม 'IIS APPPOOL \ DefaultAppPool' ใน securables ในคอลัมน์ 'Grant' ตรวจสอบตัวเลือกที่คุณต้องการให้ เกี่ยวกับข้างต้นถ้าคุณเป็น DBA คุณอาจรู้และต้องการควบคุมตัวเลือกเหล่านั้น หากคุณเป็นเหมือนฉันนักพัฒนาเพียงแค่ต้องการทดสอบบริการ WEB API ของคุณซึ่งเกิดขึ้นกับการเข้าถึง SQL Server ผ่าน EF 6 ในรูปแบบ MVC จากนั้นตรวจสอบทุกอย่าง :) ใช่ฉันรู้ แต่ใช้งานได้


0

ในกรณีที่คุณเพิ่มการเข้าสู่ระบบใหม่ตรวจสอบให้แน่ใจว่าภายใต้คุณสมบัติเซิร์ฟเวอร์ (คลิกขวา -> คุณสมบัติ) / ความปลอดภัยโหมดการรับรองความถูกต้องถูกตั้งค่าเป็น sqlserver และ windows ไม่เพียง windows


0

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


เราตั้งค่าการอนุญาตตามความต้องการของเราส่วนการรับรองความถูกต้องได้รับการจัดการและเราตรวจสอบการอนุญาตผ่านรหัสเพื่ออนุญาตการเข้าถึง อย่าลังเลที่จะแก้ไขฉันหากคุณรู้สึกว่ามีความคลุมเครือใด ๆ ขอบคุณ
avinava basu

0

สำหรับเร็กคอร์ดถ้าคุณพบข้อผิดพลาดนี้หลังจากเปลี่ยนจากLocalDBเป็นSQLEXPRESSตรวจสอบให้แน่ใจว่าฐานข้อมูลมีอยู่แล้วSQLEXPRESSให้แน่ใจว่าฐานข้อมูลที่มีอยู่แล้วในคุณสามารถตรวจสอบได้ใน Management Studio

ฉันมีปัญหาเดียวกันเมื่อใช้Entity Frameworkหลังจากเปลี่ยนไปSQLEXPRESS from LocalDBใช้ ฉันต้องเรียกใช้Update-Databaseคำสั่ง ฉันสามารถเชื่อมต่อได้สำเร็จหลังจากนั้น


0

ฉันทำตามที่ @JeffOgata พูด แต่ฉันได้รับข้อผิดพลาด:

Windows NT user or group 'IIS APPPOOL\ASP.NET v4.0' not found. Check the name again. (Microsoft SQL Server, Error: 15401)

ฉันดูข้อความแสดงข้อผิดพลาดอีกครั้งและมันก็บอกว่า Login failed for user 'IIS APPPOOL\DefaultAppPool'.

หลังจากเพิ่มผู้ใช้ชื่อIIS APPPOOL\DefaultAppPoolทุกอย่างทำงาน


0

ฉันใช้ SQL Server Profiler (มีให้ใน SSMS => เมนูเครื่องมือ) และเห็นที่นั่น (เมื่อ IIS พยายามเชื่อมต่อกับฐานข้อมูล) ว่าผู้ใช้ IIS ของฉันเป็นเพราะเหตุผลบางประการ NT AUTHORITY \ IUSR ไม่ว่าจะแนะนำขั้นตอนใดในการตอบคำถามนี้ . ดังนั้นฉันจึงเพิ่มผู้ใช้นั้นไปยัง SQL Server และทำงานได้ ...


0

ใน Asp.net เว็บฟอร์ม

แก้ไขข้อผิดพลาดนี้เมื่อติดตั้ง asp.net จาก:

ผู้จัดการเซิร์ฟเวอร์> จัดการ> เพิ่มบทบาทและคุณสมบัติ> บทบาทเซิร์ฟเวอร์> เว็บเซิร์ฟเวอร์ (IIS)> เว็บเซิร์ฟเวอร์> การพัฒนาแอปพลิเคชัน> ASP.NET 3.5 / 4.6

ปัญหาของฉันได้รับการแก้ไข

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