我正在尝试编写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
登录来获取凭据,而无需提供密码。
答案 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"