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



我正在建立一个从用户那里获取数据并将其放入数据库的网站。我正在使用MS Access,因为这只能由20-30名同事使用。站点是在本地主机上使用 IIS 7.5 部署的: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 
extpdo_odbcodbc_stmt.c:254)' in 
C:UsersusernameDocumentsWebsitewebsiteindex.html:139 
(file:///C:/Users/username/Documents/Website/website/index.html:139) Stack 
trace: #0 C:UsersusernameDocumentsWebsitewebsiteindex.html(139) 
(file:///C:/Users/username/Documents/Website/website/index.html(139)): PDO-
>query('INSERT INTO Tab...') #1 {main} thrown in 
C:UsersusernameDocumentsWebsitewebsiteindex.html 
(file:///C:/Users/username/Documents/Website/website/index.html) on line 139

我尝试与所有人共享文件夹。数据库上没有锁。我向IIS_IUSRS授予了 ODBC 注册表项的权限。我向所有人授予了数据库文件夹权限。也尝试通过向特定用户授予权限来尝试。没用。

<?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.rn";
}
}
?>

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

编辑2:所以我在另一台没有存储数据库文件的PC上用我的ID测试了它。它适用于我的 ID。这让我相信问题可能出在权限上。我只需要弄清楚在哪里。

编辑3:我需要添加想要对组IIS_ISURS进行更改的用户。一旦我将它们添加到组中,该网站就停止给出错误。

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

最新更新