怎样生产可以访问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管理员权限

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