Điểm:0

Không thể kết nối SQL Server từ PHP bằng Xác thực Windows

lá cờ cn

Tôi đang cố kết nối với Máy chủ MS-SQL từ PHP-8.0 (lưu trữ trên máy chủ cục bộ IIS-10) bằng Trình điều khiển máy chủ SQL cho PHP, tức là SQLSRV-5.9. Trong khi kết nối từ một trang PHP, nếu tôi sử dụng Xác thực máy chủ SQL, nó sẽ được kết nối ngay lập tức. Nhưng trong khi sử dụng Xác thực Windows, trình duyệt sẽ báo lỗi:

Không thể thiết lập kết nối.
Mảng ( [0] => Mảng ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 17 cho SQL Server][ Máy chủ SQL]Đăng nhập không thành công đối với người dùng 'NT AUTHORITY\IUSR'. [nội dung] => [Microsoft][Trình điều khiển ODBC 17 cho SQL Server][SQL Server]Đăng nhập không thành công đối với người dùng 'NT AUTHORITY\IUSR'.) [1] => Mảng ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Máy chủ]Đăng nhập không thành công cho người dùng 'NT AUTHORITY\IUSR'. [nội dung] => [Microsoft][ODBC Driver 17 cho SQL Server][SQL Server]Đăng nhập không thành công cho người dùng 'NT AUTHORITY\IUSR'. ) )

Môi trường của tôi là Windows 10 Pro, Phiên bản 21H2, 64-bit. Trong Máy chủ SQL của tôi, cả Xác thực Windows và Xác thực máy chủ SQL đều được bật và tôi có thể kết nối với máy chủ bằng cả hai thông qua SQL Server Management Studio. Vậy điều gì đang ngăn mã PHP của tôi kết nối với máy chủ bằng Xác thực Windows? Cả PHP và SQL Sever đều nằm trên cùng một PC. Tôi đang làm gì sai? Vì tôi là người mới sử dụng PHP, bạn có thể vui lòng làm rõ nó bằng một ví dụ đơn giản không?

Mã connect-db.php của tôi theo sau. Lưu ý cách tôi đã sử dụng chuỗi kết nối cho cả Xác thực máy chủ Windows và SQL.

?php
    $serverName = "(cục bộ)"; // Tùy chọn sử dụng số cổng (1433 theo mặc định).
    $connectionString = array("Database"=>"TestDB"); // Chuỗi kết nối Windows Authentication.
    // $connectionString = array("UID"=>"sa","PWD"=>"sa","Database"=>"TestDB"); // Chuỗi kết nối Xác thực Máy chủ SQL.
    $conn = sqlsrv_connect($serverName, $connectionString); // Kết nối với máy chủ.

    if($conn===false) {
        echo "Không thể thiết lập kết nối.<br/>";
        chết(print_r(sqlsrv_errors(), true));
    } khác {
        echo "Kết nối thiết lập thành công.<br/>";
    }

    sqlsrv_close($conn); // Đóng tài nguyên kết nối.
?>

Cảm ơn và Trân trọng!

Điểm:0
lá cờ cn

Sự cố xảy ra với NT AUTHORITY\IUSR không có bất kỳ thông tin đăng nhập nào trong Máy chủ SQL. Không giống như các ứng dụng .Net, IIS không sử dụng thông tin đăng nhập Windows Authenticated mặc định đi kèm với quá trình cài đặt SQL Server. Nó sử dụng NT AUTHORITY\IUSR mà tôi không biết. Nhưng NT AUTHORITY\IUSR không có bất kỳ thông tin đăng nhập mặc định hoặc người dùng DB nào được tạo cho nó trong SQL Server. Bạn cần tạo chúng một cách rõ ràng. Tạo chúng và cấp cho chúng các đặc quyền tương ứng cho cơ sở dữ liệu của bạn đã giải quyết được vấn đề. Bây giờ tôi có thể đăng nhập từ PHP bằng Xác thực máy chủ SQL. Hy vọng điều này sẽ giúp người xem trong hậu thế.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.