web-dev-qa-db-ja.com

SQL Server 2016:資格情報を作成し、SQL Serverエージェントプロキシを追加します

SQL Server IDの作成 をスクリプト化して、プロキシ経由でSQL Serverエージェントジョブを実行するために使用しています。

私はWindowsアカウントしか使用できないように見えます。そのため、パスワードをプレーンテキストで提供する必要があります。マジ?これを行うためのより良い方法があるはずです。私のチームメイトのマシンと私のマシンで作業するには、このスクリプトが必要です。

USE [msdb]

CREATE LOGIN [proxy_login] WITH PASSWORD=N'passw0rd', 
    DEFAULT_DATABASE=[SSISConfig], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

CREATE CREDENTIAL [my_cred] WITH IDENTITY='proxy_login', SECRET='passw0rd'

EXEC msdb.dbo.sp_add_proxy 
    @proxy_name=N'My_Proxy',
    @credential_name=N'my_cred', 
    @enabled=1

エラー

メッセージ14720、レベル16、状態1、プロシージャsp_verify_credential_identifiers、行69 [バッチ開始行0]
資格情報「@credential_name」のIDが有効なWindowsアカウントではないため、操作が失敗しました

理想的な世界では、SYSTEM_USERパスワードを入力せずに資格情報にログインします。

1
Грозный

資格情報 '@credential_name' IDは有効なWindowsアカウントではないため、操作は失敗しました

これは、WindowsアカウントではなくSQL Serverアカウントを使用したためです。あなたはただ誤解している SQL Server Agent Proxies

SQL Serverエージェントプロキシは、資格情報を使用してWindowsユーザーアカウントに関する情報を格納します。資格情報で指定されたユーザーには、SQL Serverが実行されているコンピューターでの「バッチジョブとしてログオン」権限が必要です。

SQL Serverエージェントは、プロキシのサブシステムアクセスをチェックし、ジョブステップが実行されるたびにプロキシへのアクセスを許可します。プロキシがサブシステムにアクセスできなくなった場合、ジョブステップは失敗します。それ以外の場合、SQL Serverエージェントは、プロキシで指定されたユーザーを偽装し、ジョブステップを実行します。

あなたの引用記事には、あなたが注意深く読んでいないこのフレーズがあります:

資格情報は、SQL Serverの外部のリソースに接続するために必要な認証情報を含むレコードです。

つまり、エージェントのCREDENTIALは、OS(Windows)リソースにアクセスするためのアカウントなので、Windows account、OSはSQL Serverログインについて何も知りません。 Windowsリソースへのアクセス許可はWindowsアカウントに付与され、このアカウントの1つをエージェントのプロキシとして使用できます。

2
sepupic