我有一个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
和BRD
的安全设置,但未发现差异。我也查看了文件夹的IIS_IUSRS
,但也没有区别 - 不确定是否有必要。
答案 0 :(得分: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 =“Provider = SQLNCLI; Data Source = XPSI7 \ SQLEXPRESS; Initial Catalog = BRD; User ID = foo; Password = bar;”
您还可以将您正在使用的任何登录信息映射到数据库用户:
USE BRD;
GO
CREATE USER [YourDomain\IIS_IUSRwhatever]
FROM LOGIN [YourDomain\IIS_IUSRwhatever];
GO
这将授予他们访问数据库的权限,但由您决定授予哪些权限。这假设您允许匿名访问Web服务器;如果IIS具有挑战性且接受Windows身份验证,则您需要为将要提交其凭据的用户执行上述操作。在任何一种情况下,您都应该能够继续使用现在的连接字符串。
答案 1 :(得分:0)
尝试以下连接字符串:
strConnection = "Provider=SQLNCLI10;Server=server_name;Database=" & BD_REMOTE_INITIAL_CATALOG & ";Uid=" & BD_REMOTE_USER_ID & "; Pwd=*****;"