SQL Server 2016:创建凭据并为其添加SQL Server代理代理

时间:2017-11-01 20:59:53

标签: sql-server ssis sql-server-agent

我正在尝试编写creation of SQL Server identity脚本,然后通过代理执行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

错误

  

Msg 14720,Level 16,State 1,Procedure sp_verify_credential_identifiers,第69行[Batch Start Line 0]
  操作失败,因为凭据“@credential_name”标识不是有效的Windows帐户

在理想世界中,我想使用SYSTEM_USER登录来获取凭据,而无需提供密码。

2 个答案:

答案 0 :(得分:1)

是的,您的假设是正确的,无法为SQL Server登录创建凭据,它只能是域用户(从SQL Server可见),是的,您必须在创建凭据时传递密码。

创建凭据后,一个或多个代理可以使用它们。

通常,SQL Server中的代理用于促进跨域进程。在运行时在DomainA \ ServerA上执行(可能是SSIS作业等)的进程将访问DomainB \ ServerB上的数据库,在DomainA \ ServerA上运行作业的用户帐户必须能够访问DomainB \ ServerB。现在,在这种情况下,DomainA \ ServerA上的代理可以与用户的凭据一起使用,假设来自DomainB的UserB可以访问ServerB等。到达DomainB时运行时的代理将为UserB和进程提供凭据可以继续运行。

答案 1 :(得分:1)

通过Proxy运行的SQL Server代理作业需要Credentials。这些凭据通常接受Windows用户名密码。

更好的方式:

如果您关注安全方面,我建议您创建一个Powershell utility,它会提示输入Windows用户名,密码(星标)并直接在凭据中设置并创建代理通过SQL查询执行。

示例(.ps1文件):

# read from user input
$Winpwd = read-host "Enter windows Password for ""$(whoami)""" -AsSecureString ; 
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Winpwd)
$Winpwd = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)

#execute sql 
Add-Content main.sql "CREATE CREDENTIAL SSISAdmin WITH IDENTITY = '$(whoami)', SECRET = '$Winpwd';"
Add-Content main.sql "GO"