我有一个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;"
这种失败,出现以下消息:
“微软的OLE DB提供程序SQL Server错误‘80004005’无法打开数据库‘BRD’由登录请求。登录失败。”
当我改变数据库MASTER
,而不是BRD
的ASP页面不报错了。 我只要打开它,然后关闭它测试连接字符串,但它似乎工作。
我看过的安全设置MASTER
和BRD
在对象资源管理器,但一直没有注意到有什么差别。 我也看了IIS_IUSRS
的文件夹,但没有任何区别-不知道这是必要的反正。
SQL服务器在服务器级别认证登录。 然后,它会尝试打开你要求连接到数据库。 在这一点上,你需要一个数据库级别的用户映射到服务器级别的登录,或使用本身具有足够的权限来使用数据库服务器级别的登录。
一个简单的(但不是安全)的方式来证明这一点使用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;密码=巴;”
您还可以映射任何登录您正在使用的数据库用户简单地做:
USE BRD;
GO
CREATE USER [YourDomain\IIS_IUSRwhatever]
FROM LOGIN [YourDomain\IIS_IUSRwhatever];
GO
这将授予他们对数据库的访问,但是这将是由你来决定哪些权限授予。 这是假设您允许到Web服务器的匿名访问; 如果IIS是具有挑战性的,并接受Windows身份验证,你需要做以上对将提交他们的凭据中的用户(一个或多个)。 在这两种情况下,你应该能够继续使用你现在所拥有的连接字符串。
试试下面的连接字符串:
strConnection = "Provider=SQLNCLI10;Server=server_name;Database=" & BD_REMOTE_INITIAL_CATALOG & ";Uid=" & BD_REMOTE_USER_ID & "; Pwd=*****;"