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

SQL Server 2016: create credential and add SQL Server Agent proxy for it

我正在尝试编写 creation of SQL Server identity 脚本,然后用于通过代理执行 SQL 服务器代理作业。

看来我只能使用 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, Line 69 [Batch Start Line 0]
The operation failed because credential '@credential_name' identity is not a valid Windows account

在理想情况下,我想使用 SYSTEM_USER 登录凭据而无需提供密码。

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

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

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

SQL 运行 通过 Proxy 需要 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"