怎樣生產可以訪問sqlserver數據庫的windows服務

問題點:

Windows服務中用Windows身份驗證(在連接字符串中表示爲integrated security=SSPI或integrated security=true)訪問sqlserver時,外圍配置不當將無法使用。

出現異常的組合條件

  • 訪問sqlserver採用Windows身份驗證

如Data Source=(local); Initial Catalog=master;Integrated Security=SSPI;Persist Security Info=False;Connect Timeout=5;Min Pool Size=0;Connection Lifetime=600;

  • Windows服務的登錄身份採用某種集成驗證

如本地系統賬戶、LOCAL SERVICE、NETWORK SERVICE

異常表現舉例

eg1:如查詢
SELECT name FROM  master..sysdatabases WHERE name ='PRO68347412019041014284779
時,查詢結果無數據!!!此語句在sqlserver的查詢分析器中查到有數據

eg2:如查詢
select * from t_ad_DbType
時,服務直接報錯“拒絕了對' t_ad_DbType'對象 (數據庫 'master',架構 'dbo')的 SELECT 權限。”

解決方法:

方法1:改連接sqlserver的連接字符串。
將sqlserver的其中一個內置帳戶作爲訪問sqlserver的“登錄身份”帳戶,並將此帳戶添加爲具有相應數據庫權限的SQL Server實例上的登錄名

方法2:改啓動服務的登錄方式。
指定以windows本地或域帳戶登錄Windows服務,安裝程序會在安裝服務期間提示用戶輸入帳戶憑據;然後將此帳戶添加爲具有相應數據庫權限的登錄名。

方法點評:

方法1密碼由sqlserver管理,方法2密碼由windows管理,並且還符合任何所需的安全策略。
方法2將隱藏服務的交互界面,方法1可以顯示交互界面

我的選擇:

方法2


異常1:服務無法使用【本地系統帳戶】登錄方式

如此設置,服務在使用中有的會報

無法打開登錄所請求的數據庫 "XX"。登錄失敗。用戶 'NT AUTHORITY\SYSTEM' 登錄失敗。

解決辦法:

在sqlserver中授予NT AUTORITY\SYSTEM管理員權限

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章