关于windows服务的权限问题

turejackon 2009-08-13 11:27:32
最近写了个win服务功能是定期向SQLserver提交数据(服务与SqlServer不在同一台电脑,但在同一局网),在本地测试一切正常,服务权限是设定为LocalSystem的,但将服务放到客户处运行,则总是提示sa登录失败(提示如下:Message:Login failed for user 'sa'. Reason: Not associated with a trusted SQL Server connection.),注:sa是绝对可以登了,因为其它程序都是用sa访问数据库的.从Sqlconnection换成OdbcConnection错误依旧,把服务改成winform运行又正常,真是狂晕,后来把程序改为在服务中启动winform来运行,以为可以了,谁知错误依旧.....更晕了...于是开始怀疑是服务的权限问题,但我已经用LocalSystem了不是已经是最大权限了吗?....于是把服务权限改为User并指定是Administrator,晕,服务正常了.......真是搞不懂啊...请哪位熟知win服务及其权限的大侠赐教......跪求啊....
...全文
402 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
lh_552 2012-02-23
  • 打赏
  • 举报
回复
我也遇到相同的问题,不知道咋办呢
wfmaguoqing 2009-11-10
  • 打赏
  • 举报
回复
?
turejackon 2009-08-13
  • 打赏
  • 举报
回复
现在怎么好像没有了贴子提前的功能的.....晕啊...
turejackon 2009-08-13
  • 打赏
  • 举报
回复
没人应我自己顶一下.
不动如岳 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 cglnet 的回复:]
你要是想验证下就装个sql的连接的界面,不用全装,很小的,用你的用户在界面上连下就知道到底有没问题。了。
[/Quote]
很牛逼啊,弱弱的问一下,怎么选择能装很小的一部分?
初学者啊...
turejackon 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 cglnet 的回复:]
在你的域服务器里新建一个用户,分给这个用户 domainuser和sysadmin和dbowner权限  sysadmin是在sqlserver里面分的,查一下应该可以找到,之后让服务用这个用户起,肯定可以连上。

跨域的应该保证不了连接。

个人理解,如果是windows验证的话就看起exe的用户有无权限连接sql,这个权限是在sqlserver里可以加的。
sa用户连接时另一种方式,只要不跨域应该不会有这种问题。
[/Quote]

你的方法应该可以,虽然我没有试,但可以肯定是用户权限的问题,所以我换为administrator来运行就没有问题了,但奇怪的是,怎么用localsystem用户的权限就不行呢,localsystem的权限应该和administrator相同的吧.所以想了解一下服务中提及的几个windows内置权限:localsystem,localservice,networkservice的具体区别....

还有一个好奇怪的问题,我刚刚也提到了."同样的一个服务文件,在两台windows2003系统中安装,一台能定时提交数据,一台去只是启动时提交一次,随后服务就停止了,不知道是什么原因(注:服务中运用了时钟,定期提交数据)...不知道是不是windows2003操作系统的问题...不解....
cglnet 2009-08-13
  • 打赏
  • 举报
回复
你要是想验证下就装个sql的连接的界面,不用全装,很小的,用你的用户在界面上连下就知道到底有没问题。了。
turejackon 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 mjp1234airen4385 的回复:]
你因为你的软件启动的时候,SQLSERVER还没有启动起来。
所以连不上数据库。
让你的软件启动后连个30次,50次的。
也许就可以了
[/Quote]

服务器是一直开始了的,并不是没有启动起来.
hai_yang_09 2009-08-13
  • 打赏
  • 举报
回复
路过
c520120 2009-08-13
  • 打赏
  • 举报
回复
我的服务连接用的就是windows验证,sql server 装完就没配什么权限 直接就可以用sa连接了啊
cglnet 2009-08-13
  • 打赏
  • 举报
回复
在你的域服务器里新建一个用户,分给这个用户 domainuser和sysadmin和dbowner权限 sysadmin是在sqlserver里面分的,查一下应该可以找到,之后让服务用这个用户起,肯定可以连上。

跨域的应该保证不了连接。

个人理解,如果是windows验证的话就看起exe的用户有无权限连接sql,这个权限是在sqlserver里可以加的。
sa用户连接时另一种方式,只要不跨域应该不会有这种问题。
c520120 2009-08-13
  • 打赏
  • 举报
回复
我的服务也是local system 没发现有问题啊
mjp1234airen4385 2009-08-13
  • 打赏
  • 举报
回复
你因为你的软件启动的时候,SQLSERVER还没有启动起来。
所以连不上数据库。
让你的软件启动后连个30次,50次的。
也许就可以了
turejackon 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 guohouchang 的回复:]
WCF能解决你的问题

在你的服务里面包装一个WCF能解决你这个问题
[/Quote]

你能不能讲明白点...或者给个资料,WCF我之前也写过一下,好像跟这个没什么关系吧.
turejackon 2009-08-13
  • 打赏
  • 举报
回复
string ConnectString = "server=" + Properties.Settings.Default.Server.Trim()
+ ";database=Master"
+ ";uid=" + Properties.Settings.Default.User.Trim()
+ ";password=" + Properties.Settings.Default.Pwd.Trim() + ";";

我的连接字符串如上,要怎么样改
guoyichao 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 turejackon 的回复:]
SqlServer登陆方式一直都是用混合模式的,不是仅仅用windows认证模式.我不知道你说的连接字符串用非windows认证模式登录,是不是指这个.

[/Quote]

那就是你连接字符串里用了windows集成身份认证,去掉就行了。
guohouchang 2009-08-13
  • 打赏
  • 举报
回复
WCF能解决你的问题

在你的服务里面包装一个WCF能解决你这个问题
turejackon 2009-08-13
  • 打赏
  • 举报
回复
现在发现了一个更奇怪的问题,同样的一个服务,在两台windows2003系统中安装,一台能定时提交数据,一台去只是启动时提交一次,随后服务就停止了,不知道是什么原因(注:服务中运用了时钟,定期提交数据)
turejackon 2009-08-13
  • 打赏
  • 举报
回复
SqlServer登陆方式一直都是用混合模式的,不是仅仅用windows认证模式.我不知道你说的连接字符串用非windows认证模式登录,是不是指这个.
guoyichao 2009-08-13
  • 打赏
  • 举报
回复
SqlServer登录认证配成非windows认证模式,连接字符串用非windows认证模式登录。
加载更多回复(1)

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧