MySQLデータベースとSQLサーバーデータベース間のデータ移行を実行するSSISパッケージがあります。 Visual StudioまたはSQL Server Management Studioから手動で実行すると、正常に実行されました。しかし、SQLサーバーエージェントジョブを使用してスケジュールすると、エラーが発生します。
説明:ユーザー 'NT AUTHORITY\ANONYMOUS LOGON'のログインに失敗しました。ソース:.Net SqlClientデータプロバイダー
このエラーは何ですか?なぜこれはスケジュールされたときだけ起こるのですか?この問題を解決するにはどうすればよいですか?
DimUserが提案したように、委任/偽装の問題に対処している可能性があります。
SSISが1つのDBサーバーからデータをフェッチして他のサーバーに配信するだけの場合、ソリューションははるかに簡単で、SQL Serverエージェントプロキシをセットアップする必要があります。
Visual StudioまたはSSMSから手動でSSISパッケージを実行している場合、パッケージはWindows資格情報を使用してSQL Serverにログオンしようとします。アカウントに適切な権限がある場合、成功します。
SQL Serverエージェントジョブをセットアップしてそのパッケージを実行すると、SQL Serverエージェントを実行しているサービスアカウントがこのパッケージを実行します。彼はWindows資格情報を持っていないため、匿名ログインを使用しようとすると、このエラーメッセージが表示されます。
SQL Serverエージェントが別のアカウントを使用してパッケージを実行できるようにするには、次の3つを設定する必要があります。
資格情報の作成パッケージを実行するSQL Serverに接続します。 [セキュリティ]を右クリックし、[新しい認証情報...]を選択します。わかりやすい名前(資格情報名)を入力し、使用するWindowsアカウント(ID)を選択して、パスワードを入力します。 OKをクリックします。
最初のテストでは、独自のWindowsアカウントを使用できます。本番環境で使用する場合は、専用のADサービスアカウントを作成することをお勧めします(最小限のアクセス許可で)。
プロキシアカウントのセットアップ SQL Serverエージェントフォルダを展開します。プロキシを開き、[SSISパッケージの実行]を右クリックして[新しいプロキシ...]を選択します。わかりやすいプロキシ名を入力し、前に作成した資格情報を使用します。
プロキシアカウントを使用するようにSQL Serverエージェントステップを構成するエージェントジョブを開き、SSISパッケージを実行するステップのプロパティを選択します。これで、[別のユーザーとして実行]ドロップダウンリストでプロキシアカウントを選択できます。
追加設定:パッケージがSSISカタログに展開されている場合は、資格情報に使用したWindowsログインにSSISDBの "SSIS_Admin"ロールも付与する必要があります。
そのためには、SQL Server(パブリック)で通常のWindowsログインとしてアカウントを作成し、SSIS_Adminロールを使用してユーザーをSSISDBにマップする必要があります。