经典ASP集成安全连接字符串

5

我有一个老的经典ASP应用程序(不是asp.net),我需要配置它以使用Microsoft SQL Server 2008。它可以使用以下配置字符串正常工作:

SERVER=myServer;DRIVER=SQL SERVER;DATABASE=myDatabase;UID=sa;PWD=somepass

但我需要使用集成安全。但在我尝试的任何声明类型中都会出现错误。类似这样的很多变量都不起作用:

SERVER=myServer;DRIVER=SQL SERVER;DATABASE=myDatabase;Integrated Security=SSPI;

所以我的问题是:经典ASP集成安全性应该如何连接字符串。或者可能需要其他网页服务器配置?

您是否也正在使用集成安全性来验证网站用户,或者该网站是否在匿名用户帐户下运行? - AnthonyWJones
我有一个问题:我正在本地IIS上进行测试,我认为它使用的是不允许访问数据库的ASP.NET帐户。你能告诉我如何配置我的IIS或虚拟目录以使用我的自己的帐户(我用于登录Windows)吗?本地IIS没有应用程序池,我不知道如何设置用于数据库访问的用户。 - Roman
我的 IIS 版本是 5.1(Win XP Pro)。 - Roman
嗨Roman,我已经调整了我的答案,包括关于IIS5的信息 - 希望有所帮助。 - HeavenCore
2个回答

4
请注意,这将基于您的ASP应用程序池身份验证命中SQL,假设您正在使用匿名身份验证。
我看到您添加了一条注释指出IIS 5,在IIS 5上设置站点使用Windows身份验证是可能的。方法是转到站点的属性,选择“目录安全性”选项卡,然后在“匿名访问和身份验证控制”部分单击“编辑”按钮。禁用匿名身份验证并选中“集成的Windows安全性”选项。
(注意:Web服务器需要能够验证凭据,因此根据您的域配置,您可能会遇到NTLM和Kerberos问题-请小心!)
这将以已验证的用户身份执行ASP文件,此时您的连接字符串将能够使用受信任的连接。
这里有几种选择,取决于您可用的提供程序。
例如,使用SQL Native Client 9.0 OLE DB提供程序,您可以使用:
Provider=SQLNCLI;Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;

Native Client 10 稍有不同:

Provider=SQLNCLI10;Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;

我更喜欢使用SQLOLEDB提供程序(过去在使用SQL SERVER驱动程序和VARCHAR(MAX)时遇到了麻烦):

Provider=SQLOLEDB;Data Source=Your_Server_Name;Initial Catalog=myDataBase;Integrated Security=SSPI;

注意:突然更改身份验证可能会破坏其他内容 - 我建议在SQL服务器上添加一个SQL凭据,并在连接字符串中使用它,而不是直接更改身份验证。


2
很遗憾您没有回复我在您的问题评论中的询问,所以我将不得不给出更广泛的答案。(虽然 HeavenCore 实际上已经给出了正确的连接字符串 SQLOLEDB)。
在使用匿名访问时,当您在匿名访问下运行经典 ASP 网站时,执行脚本的线程所属的安全令牌是 IIS 匿名用户。默认情况下,在 IIS5.1 上,此用户是本地机器用户。因此,除非 SQL Server 也在同一台计算机上运行,否则您无法使用此用户授予对 SQL Server 的访问权限。
您需要创建一个新用户来充当匿名帐户。然后,您需要将应用程序的匿名用户更改为此新帐户。在 SQL Server 中,您可以授予此帐户适当的数据库访问权限。
如果我记得正确,您可以通过打开站点属性来设置匿名用户帐户。在目录安全性选项卡中,单击身份验证和访问控制下的编辑。在出现的身份验证方法对话框中,您可以将匿名帐户更改为域成员之一。
在使用 Windows 集成访问时,如果您在不使用匿名访问的情况下运行经典 ASP,而是使用窗口集成安全性进行连接身份验证,则每个脚本都将使用已认证用户的安全令牌运行。因此,在 SQL 连接中使用 SSPI 时,将使用与请求到达的连接相关联的用户。
为了让这些用户访问 SQL DB,您需要创建适当的 AD 组,并授予这些组访问权限。然后将用户分配到这些组中。
这种方法的缺点是它从连接缓存中获得的好处有限,但考虑到您的其余配置,这可能不是太重要的问题。

谢谢您的回答。但我仍然无法使用集成安全运行它。我们在本地网络上有数据库。我的域帐户MYDOMAIN \ MyAccount具有访问DB的权限。当我使用Visual Studio中的Inegrated Security运行我的asp.net应用程序时,它运行良好。我想我需要强制IIS使用此帐户。我按照HeavenCore所说的做了(禁用匿名身份验证并勾选“集成Windows安全”选项),但仍然得到相同的结果。无法建立DB连接。 - Roman
2
@Roman 请仔细阅读我的答案,如果有任何不理解的地方,请先询问澄清。简而言之,您需要按照“使用匿名访问”下的第三段指示将匿名用户更改为帐户MYDOMAIN\Myaccount - AnthonyWJones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接