在Windows 7pro或Windows 8.1pro上使用经典ASP,我使用连接字符串"Provider=Microsoft.Jet.OLEDB.4.0;持久安全信息=False;数据源=D:\INetPub\KN2014\Databases"连接到Microsoft Access 2003数据库。
这很好,直到我使用以下代码调用用户身份验证:
sAccount=Request.ServerVariables("LOGON_USER")'NT challenge
if sAccount="" then
Response.Status="401 Unauthorized"
Response.End
end if
在不同的页面上强制进行身份验证。如果我在同一个窗口中执行此操作,然后返回到连接到数据库的页面,则会出现80004005:未指定的错误。唯一的解决方案是关闭并重新打开窗口。如果我手动打开第二个窗口(相同的sessionID!),我会在第二个窗中遇到同样的问题。第一个保持良好的工作,即使在刷新后。
我试着用程序代码打开第二个窗口,但在第一个窗口中也出现了错误。
搜索这个网站,我已经完成了在sysWOW64/inetsrv上授予读取访问权限的技巧。此外:如果我为Windows7进行了一次干净的安装,它会在一段时间内比"发生了一些事情"(可能是安装Office的VS)好,然后旧问题再次出现。使用基本身份验证、使用Kerberos或更改身份验证协议的顺序等技巧似乎没有效果。
我是一个"老派"开发人员。我希望有人能帮助我,提供最简单的经典ASP代码,使用windows验证和对Microsoft访问数据库的读/写访问进行身份验证。
使用Access,您需要确保您的数据库在多用户模式下工作(在2010及更高版本中可用),并且您需要检测用户何时离开您的页面,以便在退出/关闭您的网站/页面时关闭与Access的连接。这是Access最早版本以来的诅咒。
或者确保打开数据库时没有锁定。在SQL服务器中,可以通过在打开SQL语句时执行以下操作来实现:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
但我不确定这在Access中是否可能,更好的选择是切换到SQL Express。