我为我的网络应用程序创建了一个域用户帐户,然后我将该用户添加到域(AD)组。
在我的本地SQL Server实例中,我created a login for that AD group。在sql数据库中绝对没有提到用户帐户。
然后在我的本地IIS中,我更改了该网站的应用程序池以使用我刚刚创建的帐户。
当我在浏览器中浏览本地网站时,Voila!它连接到数据库。
好的,我进入AD并从AD组中删除该用户帐户。 我做了一个iisreset。 现在我在我的浏览器中浏览我的本地网站,Voila!?它连接到数据库。
咦?怎么连接?
通过使用[Integrated Security=SSPI][2]
,应该通过应用程序池使用的帐户进行身份验证。那么,既然它不属于有权访问sql数据库的组,那么它不应该失败吗?
如何让它失败? 也许是通过其他一些Windows身份验证连接? 好的,只有我服务器实例的登录名是:
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身份验证。我不知道这是否是一个线索。
答案 0 :(得分:1)
系统存储过程xp_logininfo http://msdn.microsoft.com/en-us/library/ms190369.aspx可以告诉您帐户连接到sql server时使用的访问路径。例如,哪些组被授予访问权限以及该登录的有效权限。