c# - 如何授予对 NETWORK SERVICE 帐户的 SQL 访问权限?

标签 c# sql-server windows-services network-service

我正在尝试创建可由我编写的 Windows 服务访问的架构和表,但我的服务无法访问它...

USE [tempdb]
GO

CREATE SCHEMA [blah]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [blah].[domains](
    [id] [int] NOT NULL,
    [name] [varchar](256) NOT NULL,
 CONSTRAINT [PK_domains] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

一个非常简单的表.. 当我尝试通过我的 Windows 服务 SELECT 它时,我得到:

System.Data.SqlClient.SqlException (0x80131904): 对对象“domains”、数据库“tempdb”、架构“blah”的 SELECT 权限被拒绝。

我已经尝试将我的服务帐户从 LocalService 切换到 NetworkService 但它给出了同样的结果。

我用于服务的连接字符串:

connectionString="Data Source=.\SQLEXPRESS;Database=tempdb;Integrated Security=True;MultipleActiveResultSets=True"

我还尝试为 NT AUTHORITY\NETWORK SERVICE 创建一个新的登录名,然后将用户 NETWORK SERVICE 映射到该登录名,然后授予对 blah 以及 domains 表,但仍然无法正常工作。

PS:当我将它作为普通可执行文件运行时,相同的代码能够访问该表,但当它作为服务运行时则不能。

最佳答案

我们在评论中讨论了一些方法,但我认为最好的选择是:

  • 创建 Windows 帐户(或使用现有帐户)
  • 将您的服务配置为以该 Windows 帐户运行
  • 将 Windows 帐户添加为 SQL 登录名
  • 授予该 SQL 登录所需的权限

关于c# - 如何授予对 NETWORK SERVICE 帐户的 SQL 访问权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45039786/

相关文章:

c# - filesystemwatcher 作为 Windows 服务?

delphi - 为什么我的 Delphi Service App 没有启动?

c#-4.0 - 在 VS 2010 中向 Windows 服务添加 System.Threading.Timer

c# - 在显示另一个之前隐藏所有可见的 Metro 对话框

c# - 如何计算 linq to sql 查询中列值的总和?

c# - PredicateBuilder 的问题

c# - 启用复选框时在 Canvas 上存储两个鼠标单击位置

sql - 可以将更新命令合并为一个命令吗?

sql - 查看或用户定义的函数?

sql-server - 从 SQL Native 存储过程 (Hekaton) 中的表进行更新