0

SQL SMO を使用してすべての SQL Server、データベース、ジョブ、およびジョブの結果を検索するアプリケーションを作成しました。このアプリケーションは、ローカル サービス アカウントを使用してスケジュールされたタスクを通じて実行されます。このサービス アカウントは、アプリケーション サーバーに対してのみローカルであり、検査対象の SQL Server には存在しません。システム テーブルに対する dbReader 権限を持つユーザーを使用してサーバーに接続すると、ジョブとジョブの結果に関する情報を取得できません。サーバー上でユーザーを sysadmin に設定すると、すべて正常に動作します。

私の質問は次のとおりです。ローカル SQL Server ユーザーがサーバーに接続し、SQL SMO API を使用してジョブ/ジョブの結果を検査するために必要な最小限の特権は何ですか?

次のようにして、各 SQL Server に接続します。

var conn = new ServerConnection
      {
       LoginSecure = false,
       ApplicationName = "SQL Inspector",
       ServerInstance = serverInstanceName,
       ConnectAsUser = false,
       Login = user,
       Password = password
      };
var smoServer = new Server (conn);

smoServer.JobServer.Jobs を読み取ってジョブを読み取り、これらの各ジョブの JobSteps プロパティを読み取ります。

変数serverの型はMicrosoft.SqlServer.Management.Smo.Serverです。user/password は、検査対象の各 SQL Server で見つかったユーザーのものです。

「ユーザー」が検査対象の SQL Server の SysAdmin である場合、すべて正常に動作します。また、ConnectAsUser を true に設定し、自分の資格情報を使用してスケジュールされたタスクを実行すると、Active Directory メンバーシップごとに SQL Server の SysAdmin 権限が付与されます。

ありがとう!

4

1 に答える 1

1

これを自分で経験しただけです。SQL Books Online から、これが私が見つけたものです...

ジョブ オブジェクトのプロパティを取得または設定するには、ユーザーは MSDB データベースの SQLAgentUserRole データベース ロールのメンバーであるか、ジョブの所有者であるか、sysadmin 固定サーバー ロールのメンバーである必要があります。

ジョブを作成するには、ユーザーは MSDB データベースの SQLAgentUserRole、SQLAgentReaderRole、および SQLAgentOperatorRole データベース ロールのメンバーであるか、sysadmin 固定サーバー ロールのメンバーである必要があります。

ジョブを削除するには、ユーザーは MSDB データベースの SQLAgentUserRole データベース ロールのメンバーであるか、ジョブの所有者であるか、sysadmin 固定サーバー ロールのメンバーである必要があります。

于 2010-06-09T03:13:29.580 に答える