你的位置:首页 > 软件开发 > 数据库 > SQL Server代理(10/12):使用代理账号运行作业

SQL Server代理(10/12):使用代理账号运行作业

发布时间:2016-02-23 09:00:16
SQL Server代理是所有实时数据库的核心。代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的。这系列文章会通俗介绍它的很多用法。在这一系列的上一篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色。这些角色包括SQLAgentUser ...

SQL Server代理(10/12):使用代理账号运行作业

SQL Server代理是所有实时数据库的核心。代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的。这系列文章会通俗介绍它的很多用法。


在这一系列的上一篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色。这些角色包括SQLAgentUserRole、SQLAgentReaderRole和 SQLAgentOperatorRole。每个角色授予用户一定的权限来使用SQL Server代理,而不必是sysadmin服务器角色的成员。为完全管理控制SQL Server代理,你仍然需要sysadmin角色的成员。此外,你回顾了SQL Server代理服务帐户的安全影响和选择。在这一篇,你将学习SQL Server代理的代理帐户的概念。代理帐户允许作业步骤来模拟一个特定的Windows安全帐户为作业步骤执行操作。这通常是在作业所有者的安全凭据不 适用执行操作时应用。

代理帐户是什么

正如上面提到的,一个代理帐户是一组存储在Windows的安全凭据。这些凭据可以作为作业的安全上下文。代理帐户可由一个或多个符合条件的子系统使用。

可用代理帐户的子系统

并不是所有的子系统都可以使用代理帐户。可以使用代理帐户的子系统包括:

  • ActiveX 脚本
  • 操作系统(CmdExec)
  • 复制系列任务
  • SQL Server Analysis Services 命令(
  • SQL Server Analysis Services 查询(MDX)
  • SQL Server Integration Services 包
  • PowerShell

上面没有Transact-SQL脚本(T-SQL)子系统。T-SQL作业步骤通常运行于作业所有者的安全上下文,而且SSMS中不能改变。你可以手动配 置作业步骤,使用sp_add_jobstep系统存储过程,通过database_user_name参数来模拟一个数据库用户,当然你需要安全权限来 模拟数据库用户这样做。

你也会注意到复制子系统组合为一体,即使有几个不同的子系统处理复制。理论上你可以使用代理帐户,但那超出这系列范围的高级配置。插图1:为作业步骤选择代理帐户

代理帐户的安全考虑

为了一个代理帐户的正确运行,该帐户必须具有“作为批处理作业登录”(seBatchLogonRight)权限,通过Windows管理员分配给它(在本地安全策略->本地策略->用户权限分配)。没有特权的SQL Server代理服务将无法模拟帐户来运行作业步骤。还需要注意的是,代理账户不是自动能访问你的SQL Server。例如,你想使用一个CmdExec或PowerShell的作业步骤重新登录到SQL Server,代理帐户必须被显式授予登录回你的SQL Server(或者继承访问Windows组)。

创建代理帐户

你可以使用Transact-SQL或SSMS创建一个代理帐户。使用Transact-SQL,使用系统存储过程sp_add_proxy。

1 EXEC sp_add_proxy2   [ @proxy_name = ] 'proxy_name' ,3   [ @enabled = ] is_enabled ,4   [ @description = ] 'description' ,5     [ @credential_name = ] 'credential_name' ,6   [ @credential_id = ] credential_id ,7   [ @proxy_id = ] id OUTPUT
插图2: SSMS下未分配的代理帐户插图3: SSMS下创建凭据插图4:SSMS下创建代理帐户

原标题:SQL Server代理(10/12):使用代理账号运行作业

关键词:sql

sql
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。