PHP/MS ACCESS 本地用户可以写入数据库,但远程用户不能

PHP/MS ACCESS Local User can write to DB but remote users cannot

我正在建立一个从用户那里获取数据并将其放入数据库的站点。我正在使用 MS Access,因为它只会被 20-30 位同事使用。该站点使用 IIS 7.5 在 localhost:92 上部署,防火墙规则已启用以允许在端口 80-95 上进行连接(因为端口上有站点并且某些端口用于测试站点)。

对于身份验证,我已启用 Windows 仅身份验证并通过授权规则限制用户。

它位于 运行 的桌面上,网站和访问文件(Access 2010 accdb 文件存储在我的文档中。我已授予 IIS_IUSRS 的访问权限)

所以当我打开网站并输入数据时,它成功地进入了数据库。但是当任何同事尝试使用他们的 PC 时,它会给出错误:

Fatal error: Uncaught exception 'PDOException' with message 
'SQLSTATE[HY000]: General error: -3035 [Microsoft][ODBC Microsoft Access 
Driver] Operation must use an updateable query. (SQLExecute[-3035] at 
ext\pdo_odbc\odbc_stmt.c:254)' in 
C:\Users\username\Documents\Website\website\index.html:139 
(file:///C:/Users/username/Documents/Website/website/index.html:139) Stack 
trace: #0 C:\Users\username\Documents\Website\website\index.html(139) 
(file:///C:/Users/username/Documents/Website/website/index.html(139)): PDO-
>query('INSERT INTO Tab...') #1 {main} thrown in 
C:\Users\username\Documents\Website\website\index.html 
(file:///C:/Users/username/Documents/Website/website/index.html) on line 139

我尝试与 everyone.There 共享文件夹,但未锁定数据库。我将 ODBC 注册表项的权限授予 IIS_IUSRS。我给了每个人数据库文件夹权限。也尝试通过授予特定用户权限。没用。

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
$conn = 
    'odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};' .
    'Dbq=C:\Users\username\Documents\Website\Database\Change.accdb;;ReadOnly=0';

$dbh = new PDO($conn);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if ($_SERVER["REQUEST_METHOD"] == "POST") {
$Change=$_POST["change"];
$Name=$_POST["name1"];
$Inc=$_POST["inc"];
$Waiver=$_POST["waiver"];
$Support=$_POST["support"];
$Environment=$_POST["environment"];
$Attachment=$_POST["attach"];
$SapID=$_POST["sapid"];
$Schedule=$_POST["schedule"];
$ChangeType=$_POST["type"];
$AffectedCI=$_POST["affect"];
$Risk=$_POST["risk"];
$Ref=$_POST["ref"];
$Priority=$_POST["priority"];
}

$sql = "SELECT * FROM Table2 WHERE UserID LIKE '".$Name."' AND SapID LIKE 
'".$SapID."'";
$result = $dbh->query($sql);
$row = $result->fetch();
if($row == null){
if ($_SERVER["REQUEST_METHOD"] == "POST") {
   echo "<div id='label-text'>Please check your UserID and SapID. If correct 
  mail/ping Anti21</div>";
  }
} 
else {

$sql1 = 
    "INSERT INTO Table1 (Change,WaiverID,Support,Reviewer,INC_RITM,Attachment,SapID,Schedule,ChangeType,AffectedCI,Risk,Ref,Priority,Environment) " .
    "VALUES ('" .$Change. "','" .$Waiver. "','" .$Support. "','" .$Name. "','" .$Inc. "','" .$Attachment. "','" .$SapID. "','" .$Schedule. "','" .$ChangeType. "','" .$AffectedCI. "','" .$Risk. "','" .$Ref. "','" .$Priority. "','" .$Environment. "')";


$dbh->query($sql1);
echo "Done.\r\n";
}
}
?>

编辑:所以我禁用了 Windows 身份验证并切换到匿名身份验证,它开始工作了。因此,问题似乎在于 Windows 身份验证。我已在保存网站和数据库的文件夹上授予对 IIS_IUSR 的所有访问权限。我还给了个人用户对该文件夹的完全控制权限并共享了该文件夹。那没有用。仍在寻找解决方案。

EDIT2:所以我在另一台未存储数据库文件的 PC 上使用我的 ID 对其进行了测试。它与我的身份证一起工作。这让我相信问题可能出在权限上。我只需要弄清楚在哪里。

EDIT3:我需要添加想要更改组的用户IIS_ISURS。一旦我将它们添加到组中,该站点就不再出现错误。

已解决。需要将要将数据插入数据库的用户添加到组 IIS_ISURS。一旦我将它们添加到组中,该站点就不再出现错误。