我安装了 SQL Server 2012 Express,其中有一个名为BRD
我创造的。我还创建了一个测试表(tempDemo
)和一个测试存储过程(getStList
) 在里面BRD
数据库。当我在查询窗口中运行存储过程时,它会起作用,因此我相信表和存储过程是合法的。 SQL Server 设置为“SQL Server 和 Windows 身份验证模式”。
然后,我尝试创建一个经典 ASP 页面,然后使用以下连接字符串连接到 SQL Server:
objConn.ConnectionString="Provider=SQLOLEDB;Server=XPSI7\SQLEXPRESS;Database=BRD;Integrated Security=SSPI;"
此操作失败并显示以下消息:
“适用于 SQL Server 的 Microsoft OLE DB 提供程序错误‘80004005’
无法打开登录请求的数据库“BRD”。登录失败。”
当我将数据库更改为MASTER
代替BRD
ASP 页面不会出错。我只是通过打开然后关闭它来测试连接字符串,但它似乎有效。
我查看了安全设置MASTER
and BRD
在对象资源管理器中,但没有注意到差异。我也看过IIS_IUSRS
对于文件夹,但也没有区别 - 不确定这是否有必要。
SQL Server 在服务器级别验证您的登录。然后它会尝试打开您要求连接的数据库。此时,您需要将数据库级用户映射到服务器级登录名,或者使用本身具有足够权限来使用数据库的服务器级登录名。
使用 SQL Server 身份验证来演示这一点的简单(但不安全)方法:
USE master;
GO
CREATE LOGIN foo
WITH PASSWORD = 'bar', CHECK_POLICY = OFF;
GO
USE BRD;
GO
CREATE USER foo FROM LOGIN foo;
GO
EXEC sp_addrolemember N'db_owner', N'foo';
GO
现在,在 ASP 连接字符串中,使用:
objConn.ConnectionString = "提供程序=SQLNCLI;数据源=XPSI7\SQLEXPRESS;初始目录=BRD;用户 ID=foo;密码=bar;"
您还可以将您使用的任何登录映射到数据库用户,只需执行以下操作:
USE BRD;
GO
CREATE USER [YourDomain\IIS_IUSRwhatever]
FROM LOGIN [YourDomain\IIS_IUSRwhatever];
GO
这将授予他们访问数据库的权限,但由您决定授予哪些权限。这假设您允许匿名访问 Web 服务器;如果 IIS 挑战并接受 Windows 身份验证,您需要为将提交其凭据的用户执行上述操作。无论哪种情况,您都应该能够继续使用现在拥有的连接字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)