問題點:
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管理員權限