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

时间:2017-07-11 16:16:07

标签: 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):对象'域',数据库' tempdb',架构' blah'

我已尝试将我的服务帐户从LocalService切换为NetworkService,但它也提供相同的功能。

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

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

我还尝试为NT AUTHORITY\NETWORK SERVICE创建新的登录信息,然后是映射到该登录信息的用户NETWORK SERVICE,然后授予blah以及{{1}的权限表,但仍无法正常工作。

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

1 个答案:

答案 0 :(得分:0)

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

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