Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server always encrypted database insert在使用用户帐户登录时有效,但在通过代理用户运行时无效_Sql Server_Ssis_Always Encrypted - Fatal编程技术网

Sql server SQL Server always encrypted database insert在使用用户帐户登录时有效,但在通过代理用户运行时无效

Sql server SQL Server always encrypted database insert在使用用户帐户登录时有效,但在通过代理用户运行时无效,sql-server,ssis,always-encrypted,Sql Server,Ssis,Always Encrypted,我们有一个SSIS包,它访问使用Always encrypted加密的数据库列 当使用代理用户通过SQL作业触发SSIS包时,这不起作用 无法使用密钥存储提供程序“mssql\u证书\u存储”解密列加密密钥 我们已尝试以域用户身份登录服务器并手动触发SSIS包,但未收到此错误。因此,当代理用户激活ssis包时,访问证书似乎存在一些问题 代理用户的设置代码: CREATE CREDENTIAL [SSIS Credential] WITH IDENTITY = N'DOMAIN\serv

我们有一个SSIS包,它访问使用Always encrypted加密的数据库列

当使用代理用户通过SQL作业触发SSIS包时,这不起作用

无法使用密钥存储提供程序“mssql\u证书\u存储”解密列加密密钥

我们已尝试以域用户身份登录服务器并手动触发SSIS包,但未收到此错误。因此,当代理用户激活ssis包时,访问证书似乎存在一些问题

代理用户的设置代码:

CREATE CREDENTIAL [SSIS Credential] 
    WITH IDENTITY = N'DOMAIN\service_ssis_user', SECRET = N'DomainPassword'

IF NOT EXISTS (SELECT name FROM sysproxies WHERE name = 'SSIS Package')
BEGIN
    EXEC msdb.dbo.sp_add_proxy 
              @proxy_name = N'SSIS Package',
              @credential_name = N'SSIS Credential', @enabled = 1

    EXEC msdb.dbo.sp_grant_proxy_to_subsystem 
              @proxy_name = N'SSIS Package', @subsystem_id = 11

    EXEC msdb.dbo.sp_grant_login_to_proxy 
              @proxy_name = N'SSIS Package', 
              @login_name = N'DOMAIN\service_ssis_user'
END
GO
目的是让SSIS包作为域用户运行,并能够访问与此用户关联的证书

更新:


代理用户不作为我为其创建凭据的用户“登录”,它只是使用用户的安全上下文来运行命令。因此,它不会加载他们的windows用户配置文件,这在以域用户身份直接登录时会发生。因此,通过代理运行时无法访问证书。但是,我不知道如何解决这个问题。

使用代理帐户时,不会加载Windows用户配置文件。因此,当通过代理运行时,无法访问与用户关联的证书。

我猜,如果您以SSIS代理帐户身份向SQL Server进行身份验证并尝试运行包,会发生相同的错误吗?当您通过SQL执行包9(我假定它在SSIDB中)时,包将使用启动包的人的凭据运行,而不是SQL Server服务帐户或代理。代理帐户是否有权访问加密密钥?应该这样吗?如果我理解正确,我将代理用户设置为作为域用户帐户运行,如果我们作为域用户进行身份验证,它将正常工作,并且不会出现错误。我不确定我们将如何作为实际代理登录。只有当域用户的凭据通过代理使用时,我们才会得到错误。我不知道如何验证代理是否有权访问密钥,但我再次了解,包将作为域用户使用我创建的凭据执行,该域用户确实有权访问密钥。那么,您如何执行包?你能在你的帖子中加入SQL吗?据我回忆,
executeas
在从SSIDB执行包时不起作用;你不能使用模拟。如果要测试它是否作为代理帐户工作,可以使用该用户凭据启动SSM。按住Shift键并右键单击SSMS的快捷方式(Windows 10的“开始”菜单中默认禁用此功能,因此请使用桌面快捷方式)并选择“以其他用户身份运行”。然后以代理帐户身份登录,查看该程序包是否工作。我怀疑,在您最近的评论之后,它会工作。它是通过sql作业执行的,步骤为““运行方式”选项设置为我设置的sql凭据(SSIS凭据)。已通过调度该作业以及手动运行该作业来运行。不幸的是,我无法以用户身份运行SSMS,因为这需要提升权限。我想我的误解是:代理不“登录”作为该用户,它只是使用用户的安全上下文来运行命令。因此它不会加载他们的配置文件。因此,证书并没有被加载,本质上,执行与你提到的不同,我不能执行。