2

我有一个 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;"

这失败并显示以下消息:

“Microsoft OLE DB Provider for SQL Server 错误 '80004005' 无法打开登录请求的数据库“BRD”。登录失败。”

当我将数据库改为MASTER而不是BRDASP页面时不会出错。我只是通过打开它然后关闭它来测试连接字符串,但它似乎工作。

我查看了对象资源管理器中的安全设置MASTERBRD但没有发现差异。我也查看IIS_IUSRS了文件夹,但也没有区别 - 不确定这是否有必要。

4

2 回答 2

4

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 身份验证,则您需要为将提交其凭据的用户执行上述操作。无论哪种情况,您都应该能够继续使用您现在拥有的连接字符串。

于 2012-06-10T23:05:25.747 回答
0

尝试以下连接字符串:

strConnection = "Provider=SQLNCLI10;Server=server_name;Database=" & BD_REMOTE_INITIAL_CATALOG & ";Uid=" & BD_REMOTE_USER_ID & "; Pwd=*****;"
于 2012-06-11T17:55:07.650 回答