繁体   English   中英

数据库权限与Windows服务的工作方式不同吗?

[英]Database permissions work differently from a windows service?

我有一个控制台应用程序,它也可以作为Windows服务运行(请参阅: .NET控制台应用程序作为Windows服务

它运行可在我的本地数据库上运行的存储proc,但是在网络上它只能作为控制台应用程序使用,该服务给出“ SqlException(0x80131904):找不到对象或您没有权限”。

该用户帐户具有数据库所有者权限。

SP要做的第一件事是禁用表上的触发器,现在它说要么不存在,要么我没有访问权限。

我是Windows服务的新手,是否缺少某些东西? 他们在这方面的工作是否有所不同?

它是本地网络上另一台开发机上的sqlserver 2012实例。

连接字符串:

 <add name="XYZ_ConnectionString" connectionString="Data Source=PCNAME\sql2012;Initial Catalog=DB_Name;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>

编辑:我注意到服务的较早部分从数据库表上进行选择的工作正常,这表明连接正在工作?

谢谢

您正在使用Windows身份验证(连接字符串的一部分,该消息读取Integrated Security=SSPI; ),因此,当您将其作为控制台应用程序运行时,它将使用登录的Windows ID进行身份验证。

可以将SQL Server配置为使用Windows身份验证或“混合模式”,该模式支持文本用户名和密码( 详细信息 )。 请注意,默认设置是仅使用Windows身份验证。

如果您能够将混合模式身份验证添加到SQL Server(或已经启用),则请数据库管理员创建一个新用户并替换Integrated Security=SSPI; 连接字符串的一部分,如下所示:

;User ID=*****;Password=*****;

如果您不能在SQL Server上使用混合模式身份验证(某些DBA会拒绝这样做),则需要将Windows服务配置为以Windows域帐户开头-请注意,它必须是域帐户,而不是您的PC上的本地Windows帐户,因为SQL Server需要访问域控制器以对凭据进行身份验证。

可以在此处找到有关配置服务凭据的信息,但与在“服务管理器”窗口中打开服务,转到“登录”选项卡,然后选择服务应以其运行的帐户相比,它要复杂得多。

如果选择查询运行正常,这似乎是执行操作的用户在SQL Server上的权限问题。

假设您要删除的触发器确实需要执行select语句所需的一组不同的权限。 我建议您确保正在运行的用户能够正确访问服务,我将在运行应用程序后立即使用SQL Server Profiler将所有查询和事件记录到数据库中。 在这里,我将看到失败的查询,并且可以更好地了解错误的根源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM