3

私が作成した 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

非常に単純なテーブル.. SELECTWindows サービス経由で試してみると、次のようになります。

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 SERVICEblahdomains

PS: 通常の実行可能ファイルとして実行した場合、同じコードがテーブルにアクセスできましたが、Service.

4

1 に答える 1

0

コメントでいくつかのアプローチについて説明しましたが、最善の策は次のとおりだと思います。

  • Windows アカウントを作成する (または既存のアカウントを使用する)
  • その Windows アカウントで実行するようにサービスを構成する
  • Windows アカウントを SQL ログインとして追加する
  • その SQL ログインに必要な権限を付与します
于 2017-07-11T17:14:40.710 に答える