У нас есть привилегия локального администратора для наших пользователей VPN, и мы создали пакеты SSIS, но не можем запускать их через службы агента SQL-сервера, так как это не позволяет запускать ошибку, не являющуюся администратором.
ОШИБКА:
Не удалось расшифровать защищенный узел XML «DTS: Пароль» с ошибкой 0x8009000B «Ключ недействителен для использования в указанном состоянии.». Возможно, у вас нет прав доступа к этой информации. Эта ошибка возникает, когда есть криптографическая ошибка. Убедитесь, что доступен правильный ключ.
пожалуйста помоги!!.
Первое, что я сделаю, это проверим, правильный ли у вас пароль указан, как говорится в сообщении.
Если это не так, я бы, как правило, создал прокси для запуска любых пакетов изнутри sql-сервера.
убедитесь, что нужные разрешения также предоставлены в любых папках / файлах / базах данных / серверах, к которым пакет должен получить доступ / прочитать / изменить
У меня есть пример того, как создать учетную запись прокси для запуска пакета изнутри sql-сервера.
есть комментарии к сценарию, которые могут вам помочь.
-- script for creating a proxy in order to run a SSIS package
-- marcelo miorelli
-- 15-aug-2014
--==============================================================================================
-- server is REPLON1.dev.mycompany.local
PRINT @@SERVERNAME
--==============================================================================================
-- grant the db_ssisoperator role to the user - otherwise it cannot find the package later on
USE MSDB
GO
EXEC sp_addrolemember N'db_ssisoperator', N'DEV\QSNRestrictionUser'
GO
--Script #1 - Creating a credential to be used by proxy
USE MASTER
GO
--Drop the credential if it is already existing
IF EXISTS (SELECT 1 FROM sys.credentials WHERE name = N'QSNRestrictionCredentials')
BEGIN
DROP CREDENTIAL [QSNRestrictionCredentials]
END
GO
CREATE CREDENTIAL [QSNRestrictionCredentials]
WITH IDENTITY = N'DEV\QSNRestrictionUser',
SECRET = N'1House?'
GO
--Script #2 - Creating a proxy account
USE msdb
GO
--Drop the proxy if it is already existing
IF EXISTS (SELECT 1 FROM msdb.dbo.sysproxies WHERE name = N'QSNRestrictionProxy')
BEGIN
EXEC dbo.sp_delete_proxy
@proxy_name = N'QSNRestrictionProxy'
END
GO
--Create a proxy and use the same credential as created above
EXEC msdb.dbo.sp_add_proxy
@proxy_name = N'QSNRestrictionProxy',
@credential_name=N'QSNRestrictionCredentials',
@enabled=1
GO
--To enable or disable you can use this command
EXEC msdb.dbo.sp_update_proxy
@proxy_name = N'QSNRestrictionProxy',
@enabled = 1 --@enabled = 0
GO
--Script #3 - Granting proxy account to SQL Server Agent Sub-systems
USE msdb
GO
--You can view all the sub systems of SQL Server Agent with this command
--You can notice for SSIS Subsystem id is 11
EXEC sp_enum_sqlagent_subsystems
GO
--Grant created proxy to SQL Agent subsystem
--You can grant created proxy to as many as available subsystems
EXEC msdb.dbo.sp_grant_proxy_to_subsystem
@proxy_name=N'QSNRestrictionProxy',
@subsystem_id=11 --subsystem 11 is for SSIS as you can see in the above image
GO
--View all the proxies granted to all the subsystems
EXEC dbo.sp_enum_proxy_for_subsystem
--Script #4 - Granting proxy access to security principals
USE msdb
GO
--Grant proxy account access to security principals that could be
--either login name or fixed server role or msdb role
--Please note, Members of sysadmin server role are allowed to use any proxy
EXEC msdb.dbo.sp_grant_login_to_proxy
@proxy_name=N'QSNRestrictionProxy'
,@login_name=N'DEV\QSNRestrictionUser'
--,@fixed_server_role=N''
--,@msdb_role=N''
GO
--View logins provided access to proxies
EXEC dbo.sp_enum_login_for_proxy
GO
после того, как это будет выполнено на сервере sql, вам необходимо указать запуск от имени вашего прокси.
как вы можете видеть на примере ниже:
-- change job to be run under the proxy account
-- marcelo miorelli
-- 15-08-2014
USE [msdb]
GO
EXEC msdb.dbo.sp_update_jobstep @job_name=N'run package QSN_Removals ever 2 hours', @step_id=1 ,
@proxy_name=N'QSNRestrictionProxy'
GO
EXEC msdb.dbo.sp_update_job @job_name=N'run package QSN_Removals ever 2 hours',
@owner_login_name=N'DEV\QSNRestrictionUser'
GO