Score:0

ไม่สามารถเชื่อมต่อ SQL Server จาก PHP โดยใช้ Windows Authentication

ธง cn

ฉันกำลังพยายามเชื่อมต่อกับ MS-SQL Server จาก PHP-8.0 (โฮสต์บน IIS-10 localhost) โดยใช้ SQL Server Driver สำหรับ PHP เช่น SQLSRV-5.9 ขณะเชื่อมต่อจากหน้า PHP ถ้าฉันใช้ SQL Server Authentication จะทำการเชื่อมต่อทันที แต่ในขณะที่ใช้ Windows Authentication มันแสดงข้อผิดพลาดในเบราว์เซอร์ว่า:

ไม่สามารถสร้างการเชื่อมต่อได้
อาร์เรย์ ( [0] => อาร์เรย์ ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 17 for SQL Server][ SQL Server]การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'NT AUTHORITY\IUSR' [ข้อความ] => [Microsoft][ไดรเวอร์ ODBC 17 สำหรับ SQL Server][SQL Server]การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'NT AUTHORITY\IUSR') [1] => อาร์เรย์ ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL เซิร์ฟเวอร์]การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'NT AUTHORITY\IUSR' [ข้อความ] => [Microsoft][ไดรเวอร์ ODBC 17 สำหรับ SQL Server][SQL Server]การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'NT AUTHORITY\IUSR' ) )

สภาพแวดล้อมของฉันคือ Windows 10 Pro เวอร์ชัน 21H2 64 บิต ใน SQL Server ของฉัน มีการเปิดใช้งานทั้ง Windows Authentication และ SQL Server Authentication และฉันสามารถเชื่อมต่อกับเซิร์ฟเวอร์โดยใช้ทั้งสองเซิร์ฟเวอร์ผ่าน SQL Server Management Studio แล้วอะไรที่ทำให้โค้ด PHP ของฉันหยุดเชื่อมต่อกับเซิร์ฟเวอร์โดยใช้ Windows Authentication ทั้ง PHP และ SQL Sever อยู่บนพีซีเครื่องเดียวกัน ผมทำอะไรผิดหรือเปล่า? เนื่องจากฉันใหม่ใน PHP คุณช่วยอธิบายด้วยตัวอย่างง่ายๆ ได้ไหม

รหัส connect-db.php ของฉันดังต่อไปนี้ สังเกตว่าฉันใช้สตริงการเชื่อมต่อสำหรับทั้งการรับรองความถูกต้องของ Windows และ SQL Server อย่างไร

?php
    $serverName = "(ในเครื่อง)"; // เลือกใช้หมายเลขพอร์ต (1433 ตามค่าเริ่มต้น)
    $connectionString = array("ฐานข้อมูล"=>"TestDB"); // สตริงการเชื่อมต่อการรับรองความถูกต้องของ Windows
    // $connectionString = array("UID"=>"sa","PWD"=>"sa","Database"=>"TestDB"); // สตริงการเชื่อมต่อการรับรองความถูกต้องของเซิร์ฟเวอร์ SQL
    $conn = sqlsrv_connect($serverName, $connectionString); // เชื่อมต่อกับเซิร์ฟเวอร์

    ถ้า ($ conn === เท็จ) {
        echo "ไม่สามารถเชื่อมต่อได้<br/>";
        ตาย (print_r (sqlsrv_errors (), จริง));
    } อื่น {
        echo "สร้างการเชื่อมต่อสำเร็จ<br/>";
    }

    sqlsrv_close($conn); // ปิดทรัพยากรการเชื่อมต่อ
?>

ขอบคุณและขอแสดงความนับถือ!

Score:0
ธง cn

ปัญหาเกิดขึ้นกับ NT AUTHORITY\IUSR ที่ไม่มีการเข้าสู่ระบบใน SQL Server IIS ไม่ได้ใช้การเข้าสู่ระบบ Windows Authenticated เริ่มต้นที่มาพร้อมกับการติดตั้ง SQL Server ซึ่งแตกต่างจากแอป .Net มันใช้ NT AUTHORITY\IUSR ซึ่งฉันไม่รู้ แต่ NT AUTHORITY\IUSR ไม่มีการเข้าสู่ระบบเริ่มต้นหรือผู้ใช้ DB ที่สร้างขึ้นใน SQL Server คุณต้องสร้างมันอย่างชัดเจน การสร้างและให้สิทธิ์ตามลำดับสำหรับฐานข้อมูลของคุณช่วยแก้ปัญหาได้ ตอนนี้ฉันสามารถเข้าสู่ระบบจาก PHP โดยใช้การรับรองความถูกต้องของเซิร์ฟเวอร์ SQL หวังว่าสิ่งนี้จะช่วยผู้ชมในอนาคต

โพสต์คำตอบ

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