是的 - 你讀得對!我想讓我的網絡應用程序不連接到本地SQL Server Express(2008R)數據庫!使用SSPI,如何讓我的webapp不連接到本地SQL Express?
我爲我的網絡應用程序創建了一個域用戶帳戶,並將該用戶添加到域(AD)組中。
在我的本地SQL Server實例中,I created a login for that AD group。用戶帳戶在sql數據庫中絕對沒有提及。
然後在我的本地IIS中,我更改了該網站的應用程序池以使用我剛剛創建的帳戶。
當我在瀏覽器中瀏覽本地網站時,瞧!它連接到數據庫。
好吧,所以我進入AD並從AD組中刪除該用戶帳戶。 我做一個iisreset。 現在我在我的瀏覽器中瀏覽本地網站,Voila!?它連接到數據庫。
咦?它如何連接? 通過使用[Integrated Security=SSPI][2]
,認證應該通過應用程序池使用的帳戶進行。那麼,因爲它不屬於可以訪問sql數據庫的組,那麼它不應該失敗嗎?
我該如何讓它失敗? 也許它是通過一些其他的Windows身份驗證連接? 好吧,只有登錄了我的服務器的實例是:
- mydomaingroup(沒有我的應用程序池的用戶帳戶)
- 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身份驗證。我不知道這是否是線索。
感謝您的線索。讓我試試看看我能找到什麼。 – bgmCoder 2013-04-28 17:12:13