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

时间:2017-07-13 19:38:47

标签: php ms-access authentication iis windows-authentication

我正在建立一个从用户获取数据并将其放入数据库的站点。我正在使用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

我尝试与所有人共享该文件夹。数据库上没有锁定。我将ODBC注册表项的权限授予IIS_IUSRS。我给每个人提供了DB Folder Permissions。通过授予特定用户权限来尝试。没用。

<?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的All访问权限。我还为个人用户提供了该文件夹的完全控制权并共享了该文件夹。那没用。仍在寻找解决方案。

EDIT2:所以我在没有存储DB文件的不同PC上用我的id测试了它。它符合我的身份。这让我相信问题可能与权限有关。我只需要弄清楚在哪里。

EDIT3:我需要添加想要对组IIS_ISURS进行更改的用户。一旦我将它们添加到组中,该站点就停止提供错误。

1 个答案:

答案 0 :(得分:0)

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