次の方法で共有


SQL Server エージェントのセキュリティを実装する

適用対象:SQL ServerAzure SQL Managed Instance

大事な

Azure SQL Managed Instance では、SQL Server エージェントのほとんどの機能が現在サポートされているわけではありません。 詳細については、Azure SQL Managed Instance の T-SQL と SQL Server の違いの を参照してください。

SQL Server エージェントを使用すると、データベース管理者は、SQL Server エージェント プロキシによって決定される、そのジョブ ステップの実行に必要なアクセス許可のみを持つセキュリティ コンテキストで各ジョブ ステップを実行できます。 特定のジョブ ステップのアクセス許可を設定するには、必要なアクセス許可を持つプロキシを作成し、そのプロキシをジョブ ステップに割り当てます。 プロキシは、複数のジョブ ステップに対して指定できます。 同じアクセス許可を必要とするジョブ ステップでは、同じプロキシを使用します。

次のセクションでは、SQL Server エージェントを使用してジョブを作成または実行できるように、ユーザーに付与する必要があるデータベース ロールについて説明します。

SQL Server エージェントへのアクセスの許可

SQL Server エージェントを使用するには、ユーザーが次の固定データベース ロールの 1 つ以上のメンバーである必要があります。

  • SQLAgentUserRole

  • SQLAgentReaderRole

  • SQLAgentOperatorRole

これらのロールは、msdb データベースに格納されます。 既定では、これらのデータベース ロールのメンバーであるユーザーはいません。 これらのロールのメンバーシップは、明示的に付与する必要があります。 sysadmin 固定サーバー ロールのメンバーであるユーザーは、SQL Server エージェントへのフル アクセス権を持ち、SQL Server エージェントを使用するためにこれらの固定データベース ロールのメンバーである必要はありません。 ユーザーがこれらのデータベース ロールの 1 つ、または sysadmin ロールのメンバーでない場合は、SQL Server Management Studio を使用して SQL Server に接続するときに、SQL Server エージェント ノードを使用できません。

これらのデータベース ロールのメンバーは、所有するジョブを表示および実行し、既存のプロキシ アカウントとして実行されるジョブ ステップを作成できます。 これらの各ロールに関連付けられている特定のアクセス許可の詳細については、「SQL Server エージェント固定データベース ロール 」を参照してください。

sysadmin 固定サーバー ロールのメンバーには、プロキシ アカウントを作成、変更、削除するためのアクセス許可があります。 sysadmin ロールのメンバーには、プロキシを指定せずに SQL Server エージェント サービス アカウント (SQL Server エージェントの起動に使用されるアカウント) として実行するジョブ ステップを作成するアクセス許可があります。

ガイドライン

次のガイドラインに従って、SQL Server エージェントの実装のセキュリティを強化します。

  • プロキシ専用のユーザー アカウントを作成し、これらのプロキシ ユーザー アカウントのみを使用してジョブ ステップを実行します。

  • プロキシ ユーザー アカウントに必要なアクセス許可のみを付与します。 特定のプロキシ アカウントに割り当てられているジョブ ステップを実行するために必要なアクセス許可のみを付与します。

  • Windows Administrators グループのメンバーである Microsoft Windows アカウントで SQL Server エージェント サービスを実行しないでください。

  • プロキシは、SQL Server 資格情報ストアと同じくらい安全です。

  • ユーザーの書き込み操作で NT イベント ログに書き込むことができる場合は、SQL Server エージェントを使用してアラートを生成できます。

  • NT 管理者アカウントをサービス アカウントまたはプロキシ アカウントとして指定しないでください。

  • SQL Server と SQL Server エージェントは、互いの資産にアクセスできます。 2 つのサービスは 1 つのプロセス領域を共有し、SQL Server エージェントは SQL Server サービスの sysadmin です。

  • TSX (ターゲット サーバー) が MSX (マスター サーバー) に参加する 場合、MSX のシステム管理者は SQL Server の TSX インスタンスを完全に管理します。

  • ACE は拡張機能であり、それ自体を呼び出すことはできません。 Chainer ScenarioEngine.exe (Microsoft.SqlServer.Chainer.Setup.exeとも呼ばれます) は ACE を呼び出すことができます。 他のホスト プロセスでも ACE を呼び出すことができます。

  • ACE は SSDP が所有する次の構成 DLL に依存します。これは、DLL の API が ACE によって呼び出されるためです。

    • SCO - Microsoft.SqlServer.Configuration.Sco.dll(仮想アカウントの新しい SCO 検証を含む)

    • クラスター - Microsoft.SqlServer.Configuration.Cluster.dll

    • SFC - Microsoft.SqlServer.Configuration.SqlConfigBase.dll

    • 拡張機能 - Microsoft.SqlServer.Configuration.ConfigExtension.dll

リンクド サーバー

Azure SQL Managed Instanceなど、リンク サーバーを介してリモート サーバーで Transact-SQL (T-SQL) クエリを実行する SQL エージェント ジョブを実行する場合など、ローカル ログインをリモート サーバー上のログインにマップする必要があります。

sp_addlinkedsrvlogin を使用して、ローカル サーバー上のログインと、T-SQL クエリを実行するために必要なアクセス許可を持つリモート サーバー上のログインとの間のマッピングを作成します。 SQL エージェント ジョブは、リンク サーバーを介してリモート サーバーに接続すると、リモート ログインのコンテキストで T-SQL クエリを実行します。

次の表では、Azure SQL Managed Instance の SQL エージェント ジョブ所有者に基づいてログインをマップする方法について説明します。

SQL エージェント ジョブの所有者 ログインをマップする方法
sysadminで されていないユーザー SQL エージェント ジョブを所有する ローカル ユーザー をリモート ログインにマップします。
の sysadmin @locallogin パラメーターを NULLに設定し、すべてのローカルユーザー をリモートログイン にマップします。

手記

ローカル サーバーが Azure SQL Managed Instance の場合は、SQL エージェント ジョブのリモート サーバーでログインを作成する必要があります。 ユーザーを正しくマップできないと、次の例のようなエラーが発生する可能性があります。

  • Windows logins are not supported in this version of SQL Server
  • Linked servers cannot be used under impersonation without a mapping for the impersonated login