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

时间:2012-02-29 13:31:02

标签: sql-server-2008 asp-classic

我有旧的经典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;

所以我的问题是:连接字符串对于Classic ASP集成安全性应该如何。或者可能需要额外的Web服务器配置?

2 个答案:

答案 0 :(得分:3)

请注意,假设您使用匿名身份验证,这将基于您的asp应用程序池的身份验证命中SQL。

我看到你添加了注释IIS 5的评论,设置一个站点以便在ISS5上使用Windows身份验证是可以的,方法是转到您网站的属性,选择“目录安全性”选项卡,然后单击“编辑”按钮。 “匿名访问和身份验证控制”部分。禁用匿名身份验证并勾选“集成Windows安全性”选项。

(注意:网络服务器需要能够验证凭据,因此您可能会遇到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凭据,并在连接字符串中使用它。

答案 1 :(得分:2)

遗憾的是,你对你的问题的评论没有回复我的询问,所以我将不得不给出更广泛的答案。 (尽管HeavenCore实际上已经为您提供了正确的连接字符串,SQLOLEDB就可以了。)

使用匿名访问时

当您以匿名方式运行Classic ASP网站时,执行该acript的线程所属的安全令牌属于IIS匿名用户。默认情况下,IIS5.1上的此用户是本地计算机用户。因此,除非SQL服务器也在同一个盒子上运行,否则您无法使用此用户授予对SQL Server的访问权限。

您需要在域中创建一个新用户才能充当匿名帐户。然后,您可以将应用程序的匿名用户更改为此新帐户。然后,在SQL Server中,您可以向此帐户授予适当的数据库访问权限。

如果我没记错,您可以通过打开网站属性来设置匿名用户帐户。在目录安全性选项卡中,单击身份验证和访问控制下的编辑..在出现的身份验证方法对话框中,您可以将匿名帐户更改为域成员。

使用Windows集成访问时

如果您在没有匿名访问的情况下运行经典ASP,而是使用窗口集成安全性验证连接,则每个脚本将使用经过身份验证的用户的安全令牌运行。因此,当在SQL连接中使用SSPI时,将使用与请求已到达的连接关联的用户。

要让这些用户访问SQL DB,您需要创建适当的AD组并授予这些组对数据库的访问权限。然后将用户分配到这些组。

这种方法的缺点是它从连接缓存中受益有限,但考虑到其他配置可能不是太大的问题。