使用SSPI,如何使我的webapp不连接到本地SQL Express?

时间:2013-04-20 00:47:56

标签: sql-server iis-7

是的 - 你看对了!我想让我的网络应用程序不连接到本地SQL Server Express(2008R)数据库!

我为我的网络应用程序创建了一个域用户帐户,然后我将该用户添加到域(AD)组。

在我的本地SQL Server实例中,我created a login for that AD group。在sql数据库中绝对没有提到用户帐户。

然后在我的本地IIS中,我更改了该网站的应用程序池以使用我刚刚创建的帐户。

当我在浏览器中浏览本地网站时,Voila!它连接到数据库。

好的,我进入AD并从AD组中删除该用户帐户。 我做了一个iisreset。 现在我在我的浏览器中浏览我的本地网站,Voila!?它连接到数据库。

咦?怎么连接? 通过使用[Integrated Security=SSPI][2],应该通过应用程序池使用的帐户进行身份验证。那么,既然它不属于有权访问sql数据库的组,那么它不应该失败吗?

如何让它失败? 也许是通过其他一些Windows身份验证连接? 好的,只有我服务器实例的登录名是:

  • mydomaingroup(没有我的app-pool的用户帐户)
  • mydomainadminaccount
  • SA
  • NT AUTHORITY \ NETWORK SERVICE(所有内容都必需,even the sql log viewer

AND - 我可以确认,除了特殊域组之外,这些登录中没有用户映射到我的数据库允许的用户。

啊,情况更糟。如果连接字符串使用SSPI,那么它应该接受并使用用户名和密码(如果存在)。因此,如果我指定我现在离开AD组的帐户的用户名和密码,那么应用程序池是否应该尝试使用错误的凭据登录? - 你会这么认为,但是,再一次,瞧!它连接!

因此,这两个连接字符串都连接到一个域用户帐户,该帐户似乎在sql server实例中没有凭据:

    <add name="development" connectionString="server=mycomputer\sqlexpress;database=shoppe;Persist Security Info=False;Integrated Security=SSPI; user id=myuser; password=mypassword; Pooling=True" providerName="System.Data.SqlClient"/>

    <add name="development" connectionString="server=mycomputer\sqlexpress;database=shoppe;Persist Security Info=False;Integrated Security=SSPI; Pooling=True" providerName="System.Data.SqlClient"/>

我甚至尝试添加Trusted_Connection=False;,但它仍然可以连接!

那么,它在哪里可以访问连接?有没有办法告诉哪个帐户用于连接?

另一方面,如果我从连接字符串中删除Integrated Security=SSPI;,那么我根本无法连接Windows身份验证。我不知道这是否是一个线索。

1 个答案:

答案 0 :(得分:1)

系统存储过程xp_logininfo http://msdn.microsoft.com/en-us/library/ms190369.aspx可以告诉您帐户连接到sql server时使用的访问路径。例如,哪些组被授予访问权限以及该登录的有效权限。