摘要:今天用c#編寫一個windows 服務程序,其中要連接一個windows 2003 server上的sql server 2000 數據庫,用sql server 身份驗證。發現普通程序都能聯上,但是windows服務程序就是聯不上。 后來查了資料,找到了解決方法。共享給大家。
三步解決:
1、 在服務器上創建一個用戶,配置好sql server數據庫訪問權限。
2、 在客戶端創建一個一樣的用戶。
3、 服務程序以剛創建的那個客戶端用戶登錄。
搞定!
關鍵字:sspi, integrated security, sql server 和 windows,身份驗證,sql server不存在,或者拒絕訪問。
參考文檔:windows 身份驗證和 sql server
http://msdn.microsoft.com/library/chs/default.asp?url=/library/chs/f_and_m/html/vxconwindowsauthenticationsqlserver.asp
visual studio 示例:fitch and mather 7.0
windows 身份驗證和 sql server
fitch and mather 7.0 通過 sql server 身份驗證訪問 sql server。雖然它非常簡單并提供了易于理解的示例,但它并不是最安全的方法。fitch and mather 7.0 將連接字符串(包含數據庫憑據)存儲在兩個位置:web.config 文件和 com+ admin 目錄(在 fmstocks7.gam.7 組件的構造函數字符串中)。默認情況下,任何用戶都可以讀取這兩個位置,因此很容易無意中泄露保密信息(憑據)。
一種更好的解決方案是使用 windows 集成安全性。首先,需要 internet 信息服務 (iis) 服務器和 sql server 數據庫都能識別的 windows 標識。有兩種方法可供選擇:
· 域帳戶
如果服務器是域的一部分,并且管理員可以創建應用程序的域帳戶,那么這是最佳方法。
· 具有同步密碼的本地帳戶
如果網絡的實現不支持域帳戶,則通過在兩臺計算機上創建相同的本地帳戶(使用相同的密碼),可以安全地訪問 iis 和 sql server 數據庫。
選擇上述方法中的一種,然后創建一個名為 fmstocks_7 application 的帳戶(在域中或在兩臺計算機上),并使它僅屬于“guest”組。這樣,應用程序只需要最低程度的特權即可運行。
然后,更改連接字符串(在 web.config 和 com+ admin 目錄中),移除顯式憑據以便能夠使用集成安全性。例如,如果連接字符串如下:
data source=mydbserver; user id=fitch and mather 7.0 _login; password=*********;
initial catalog=fitch and mather 7.0 ;
然后將其更改為:
data source=mydbserver;integrated security=sspi;
initial catalog=fitch and mather 7.0 ;
這一更改意味著,可以使用線程運行所用的標識來訪問 sql server 數據庫。默認情況下,asp.net(aspnet_wp.exe 進程)在本地 aspnet 帳戶下運行,但是,應用程序代碼應在 fitch and mather 7.0 應用程序帳戶下運行。在 fitch and mather 7.0 application 帳戶下運行應用程序代碼的優點是,這是一個 windows 帳戶,并且您可以授予它適當的 sql server 權限。
下一步,需要將帳戶與 fitch and mather 7.0 應用程序關聯。
將帳戶與 fitch and mather 7.0 關聯
1. 配置 iis。
a. 在“開始”菜單上指向“程序”,然后指向“管理工具”并單擊“internet 服務管理器”。
“internet 信息服務”窗口隨即打開。
b. 在“樹”選項卡上,瀏覽目錄樹以搜索 fmstocks7 虛擬目錄。(此虛擬目錄的位置因具體的安裝而異。)找到之后,右擊“fmstocks7”并選擇“屬性”。
“fmstocks7 屬性”對話框隨即出現。
c. 在“fmstocks7 屬性”對話框中,選擇“目錄安全性”選項卡。在“匿名訪問和驗證控制”下,單擊“編輯”按鈕。
隨即出現“驗證方法”對話框。
d. 在“匿名訪問”下,單擊“編輯”按鈕。
“匿名用戶帳號”對話框隨即出現。
e. 清除“允許 iis 控制密碼”。這是必需的,因為 iis 會存儲憑據并在針對 sql server 進行身份驗證時提供這些憑據。
f. 在“用戶名”和“密碼”下,將匿名用戶帳戶替換為 fmstocks7_application,并且輸入它的密碼。
g. 最后,單擊三次“確定”以完成。
2. 通過添加以下行啟用 web.config 中的模擬:
3. <system.web>
4. <identity impersonate="true" />
....
最后一步是在 fmstocks7 和 fmstocks7_gam 數據庫中配置 sql server,以授予 fitch and mather 7.0 application 帳戶適當的權限(如果這兩個數據庫在不同的計算機上運行,則需要在每臺計算機上重復此過程):
在 fmstocks7 和 fmstocks7_gam 數據庫中配置 sql server 權限
1. 打開 sql server。
· 在“開始”菜單上指向“程序”,然后指向“microsoft sql server”并單擊“企業管理器”。
“sql server 企業管理器”窗口隨即打開。
2. 創建一個 sql 登錄。
a. 在“樹”選項卡上,瀏覽目錄樹以搜索服務器名稱下的“安全性”文件夾,然后展開該文件夾。
b. 右擊“登錄”文件夾并選擇“新建登錄”。
“sql server 登錄屬性 – 新建登錄”對話框隨即出現。
c. 在“名稱”框中,輸入“fmstocks7 application”。
d. 在“身份驗證”下,找到“域”框,并選擇本地計算機名(如 mydbserver)或您的域,具體取決于創建 fitch and mather 7.0 application 帳戶的位置。
e. 將“安全性訪問”設置為“允許訪問”。
f. 在“默認值”下,將“數據庫”設置為 fmstocks7。
g. 選擇“數據庫訪問”選項卡,并確保在各自的“允許”字段中選中 fmstocks7 和/或 fmstocsk7_gam。
h. 在 fmstocks7 和/或 fmstocks7_gam 的數據庫角色下,選擇 db_denydatareader 和 db_denydatawriter 權限,以防止該帳戶直接訪問表。
3. 刪除 fmstocks7_login,因為不再使用它。
. 仍然是在“sql server 企業管理器”窗口中的“目錄樹”選項卡上,雙擊“安全性”文件夾下的“登錄”。
各個登錄顯示在“sql server 企業管理器”窗口的右窗格中。
a. 找到 fmstocks7_login 的項,并右擊該項然后選擇“刪除”將其刪除。
出現“fmstocks7_login”對話框。選擇“是”確認刪除。
4. 給所有存儲過程授予“執行”權限。
. 仍然是在“sql server 企業級管理器”窗口的“樹”選項卡上,瀏覽目錄樹以搜索位于“數據庫”文件夾中服務器名下的 fmstocks7 數據庫。
a. 在 fmstocks 數據庫文件夾中找到并打開“存儲過程”,然后對非系統存儲過程執行以下操作:
雙擊該存儲過程(例如 account_add 項)。
“存儲過程屬性”對話框隨即出現。
單擊“權限”按鈕。
“對象屬性 - fmstocks
在“權限”表中,找到“exec”列,并選擇相應的框,向 fmstocks7 application 帳戶授予“exec”權限。
若要驗證 sql server 權限配置得是否正確,請運行應用程序并使用 sql 分析器驗證所使用的帳戶是否為 fitch and mather 7.0 application。
對于每一個請求,現在將發生以下情況:
1. 傳入一個匿名請求,iis 模擬您為匿名用戶指定的帳戶(fitch and mather 7.0 application),并將該請求傳遞給 aspnet_wp.exe。請注意,雖然 fitch and mather 使用 forms 身份驗證,但在 iis 中,所有請求都是匿名的。
2. 由于您已將應用程序配置為使用模擬(通過更改 web.config),asp.net 在當前線程中模擬 iis 標識 (fitch and mather 7.0 application)。
3. 應用程序打開 sql 連接時,它在 fitch and mather 7.0 application 登錄下,使用集成 windows 身份驗證來執行存儲過程。
分布式方案
運行分布式方案時,請注意以下內容:
遠程 bll
上述所有對 web 服務器的更改需要在應用程序層(運行 bll 的位置)中完成。
遠程 gam(.net 遠程處理)
上述所有對 web 服務器的更改也需要在應用程序層(運行 gam 的位置)中完成。
遠程 gam (dcom)
上述更改只需要在 web 服務器中進行。另外,在運行 gam 的計算機(gam com+ 服務器應用程序駐留的計算機)上完成以下操作:
設置 gam
1. 打開“組件服務”,然后修改 fmstocks7.gam com+ 組件的帳戶。
a. 在“開始”菜單上指向“程序”,然后指向“管理工具”并單擊“組件服務”。
“組件服務”窗口打開。
b. 在“樹”選項卡上,瀏覽目錄樹以搜索“組件服務”->“計算機”->“我的電腦”->“com+ 應用程序”下的“fmstocks7.gam”文件夾。
c. 右擊 fmstocks7.gam 項并選擇“屬性”。
“fmstocks7.gam 屬性”對話框出現。
d. 選擇“標識”選項卡,選擇“本用戶”,然后在“用戶”和“密碼”框中提供 fmstocks7 應用程序的 windows 憑據。單擊“確定”接受更改。
2. 更改 fmstocks7.gam.7 構造函數字符串。
a. 在“組件服務”窗口中“fmstocks7.gam 應用程序”的“組件”文件夾下(參見上面的第 1 步),右擊“fmstocks7.gam
“fmstocks7.gam.7 屬性”對話框出現。
b. 選擇“激活”選項卡。在“對象結構”下,找到“建立者字符串”,將字符串更改為:
provider=sqloledb;data source= mydbserver;integrated security=sspi;initial catalog=fitch and mather 7.0 _gam;
新聞熱點
疑難解答