Transact-SQL 参考

xp_sqlagent_proxy_account

为非 sysadmin 固定服务器角色成员的用户执行作业或命令时,设置或检索 SQL Server 代理程序和 xp_cmdshell 扩展存储过程使用的代理帐户信息。代理帐户是 Microsoft® Windows® 帐户,作业或命令提示符命令在此帐户的安全上下文中运行。

语法

xp_sqlagent_proxy_account

{ N'GET' |

N'SET', N'agent_domain_name', N'agent_username', N'agent_password'

                    }

参数

N'GET'

检索当前 SQL Server 代理程序的代理帐户的名称。N'GET' 的数据类型为 nvarchar,无默认设置。

N'SET'

设置 Windows 帐户以用作 SQL Server 代理程序的代理帐户。使用 agent_domain_nameagent_username agent_password 以指定 Windows 帐户用作代理帐户。如果没有指定有效的 Windows 帐户信息,例如没有指定正确的密码,则 sp_sqlagent_proxy_account 将收到错误信息。N'SET' 的数据类型为 nvarchar,无默认设置。

'agent_domain_name'

是包含 agent_username 中指定的 Windows 用户帐户的 Windows 域的名称。agent_domain_name 的数据类型为 nvarchar,无默认设置。

'agent_username'

是用作 SQL Server 代理程序的代理帐户的 Windows 帐户的名称。agent_username 的数据类型为 nvarchar,无默认设置。

'agent_password'

是在 agent_username 中指定的 Windows 帐户的密码。agent_password 的数据类型为 nvarchar,无默认设置。

说明  必须按顺序指定 xp_sqlagent_proxy_account 的参数。无法使用命名参数。

返回代码值

0(成功)或 1(失败)

当执行 xp_sqlagent_proxy_account 失败后,SQL Server 将生成包含有关错误的错误信息。

结果集

如果已经设置 SQL Server 代理程序的代理帐户,则指定 N'GET' xp_sqlagent_proxy_account 将返回带有下列信息的结果集。

数据类型 描述
domain sysname 包含用作 SQL Server 代理程序的代理帐户的 Windows 帐户的域。
username sysname 用作 SQL Server 代理程序的代理帐户的 Windows 帐户。

如果还没有设置 SQL Server 代理程序的代理帐户,或如果指定了 N'SET',则不返回任何结果集。

注释

SQL Server 代理程序的代理帐户允许不属于 sysadmin 固定服务器角色的 SQL Server 用户执行 xp_cmdshell 和自己的 SQL Server 代理程序作业。管理员可以给代理帐户指派适当的安全权限,以控制这些作业在网络中访问资源的能力。

SQL Server 用户使用 xp_cmdshell 执行命令提示符命令时,命令必须在 Windows 帐户的安全上下文中执行。如果 SQL Server 用户是 sysadmin 固定服务器角色的成员,则 SQL Server 使用 SQL Server 服务在其下运行的 Windows 帐户执行命令提示符命令。如果执行 xp_cmdshell 的 SQL Server 用户不是 sysadmin 固定服务器角色的成员,则 SQL Server 使用指定为 SQL Server 代理程序的代理帐户的 Windows 帐户执行命令。如果没有设置任何 SQL Server 代理程序的代理帐户,则用户将收到错误信息。SQL Server 代理程序作业还必须在 Windows 帐户的安全上下文中执行。如果作业为 sysadmin 固定服务器角色的成员所有,则作业使用 SQL Server 服务在其下运行的 Windows 帐户来执行。如果作业所有者不在 sysadmin 中,则作业使用 SQL Server 代理程序的代理帐户执行,并且如果没有设置任何代理帐户,则将产生错误。

xp_sqlagent_proxy_account 将为在其上执行的实例设置或检索代理帐户。该实例的 SQL Server 服务必须在 Windows 管理员帐户下运行,以读取或设置 SQL Server 代理程序的代理帐户。

权限

xp_sqlagent_proxy_account 的执行权限默认授予 sysadmin 固定服务器角色的成员。

示例
A. 检索当前指派的 SQL Server 代理程序的代理帐户

下例检索当前指派的用作 SQL Server 代理程序的代理帐户的帐户。

EXEC master.dbo.xp_sqlagent_proxy_account N'GET'

下面是结果集。

Domain               Username
------------------------------------
NETDOMAIN            john
B. 不用密码设置 SQL Server 代理程序的代理帐户

下例没有指定密码,将 SQL Server 代理程序的代理帐户设置为 LONDON\ralph。如果 LONDON/ralph 帐户实际上有密码,则下例将会接收到扩展存储过程无法登录的错误信息。

EXEC master.dbo.xp_sqlagent_proxy_account N'SET',
             N'NETDOMAIN', -- agent_domain_name
             N'ralph', -- agent_username
             N''  agent password
C. 使用密码设置 SQL Server 代理程序的代理帐户

下例将 SQL Server 代理程序的代理帐户设置为 LONDON\Ralph 并指定密码。

EXEC master.dbo.xp_sqlagent_proxy_account N'SET',
             N'NETDOMAIN', -- agent_domain_name
             N'ralph', -- agent_username
             N'RalphPwd',  agent password

请参见

SQL Server 代理程序属性(作业系统选项卡)

系统存储过程

xp_cmdshell