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 権限が付与されます。
ありがとう!