web-dev-qa-db-ja.com

SQL Serverエージェントサーバーログインアカウント

SQL Serverエージェントは、データベースインスタンスへのログインにどのSQL Serverログインを使用しますか?

SQLサーバーエージェントを組み込みのローカルシステムアカウントとして実行しています。

1つのステップを持つSQLエージェントジョブを作成しました。このステップでは、SYSTEM_USERの値をテーブルに挿入します。

ジョブを実行し、ジョブが完了したときにテーブルから選択すると、SYSTEM_USERの値がDOMAIN\SERVERNAME$であることがわかります。そのため、エージェントがインスタンスにログインしているようです。

では、SQLログインではないときに、エージェントがDOMAIN\SERVERNAME$としてログインできるのはなぜですか?

このアカウントにはどのような特権がありますか?

1
SEarle1986

SERVERNAME$は、Active Directoryのサーバーに割り当てられたマシンアカウントです。そのアカウントはNT AUTHORITY\Systemとしてローカルにマッピングされます。 SQL Serverのセキュリティには、通常NT AUTHORITY\Systemという名前のアカウントがリストされています。これは、SQL Serverエージェントがローカルシステムとして実行するように構成されている場合にアクセスする方法です。

Microsoft Docs には、SQL Serverエージェントのサービスアカウントを構成する方法を選択するのに役立つ一連の詳細があります。それは次のように述べています:

ローカルシステムアカウント。このアカウントの名前はNT AUTHORITY\Systemです。これは、すべてのローカルシステムリソースに無制限にアクセスできる強力なアカウントです。ローカルコンピューターのWindows Administratorsグループのメンバーであるため、SQL Server sysadmin固定サーバーロールのメンバーである

3
Max Vernon

SQLエージェントは、Windowsサービスのログインとして割り当てられているものを使用します。
Windowsサービスにアクセスして表示するには、スタートメニューをクリックして「サービス」と入力します。

SQLエージェントを見つけて、プロパティを表示します。
アカウントがローカルシステムの場合、実際にはマシンの資格情報を使用しています。 DOMAIN\SERVERNAME$が返されました。

(これは、それがホストされているマシンのアカウントです。すべてのPCにはローカルシステムアカウントがあり、SQLのインストール時に追加されます。システムアカウントはsysadmin特権を継承しているため、そのままにしたくないと思います。デフォルト。 NT AUTHORITY\SYSTEM SSMSのログインにどのように追加されるかと思います。)

別のアクセス許可を割り当てる必要がある場合は、別のログイン(通常はサービスアカウントまたはマスターサービスアカウント)を使用できます。

または、権限を持つアカウントに割り当てられたSQLサーバーに資格情報を作成します。次に、SQLエージェントでプロキシを作成し、それを使用してジョブを実行できます。

MSのベストプラクティスによると、SQL構成マネージャーを使用して、サービスアカウントのログイン資格情報を常に割り当てることです。他の方法で問題が発生したことは一度もありませんが、MSがそう言っていれば、それはおそらく正しいでしょう。

4
Shooter McGavin

上記の優れた回答に加えて、ジョブがTSQLタイプの場合、[詳細設定]-> [ユーザーとして実行]フィールドで特定のデータベースユーザーとして実行するように明示的に選択されていない限り、ジョブはジョブの所有者として実行されます。

1
SEarle1986