问题点:
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管理员权限