本篇文章是SQL Server代理系列的第十篇,详细内容请参考原文


在这一系列的上一篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色。这些角色包括SQLAgentUserRole、SQLAgentReaderRole和SQLAgentOperatorRole。每个角色授予用户一定的权限来使用SQL Server代理,而不必是sysadmin服务器角色的成员。为完全管理控制SQL Server代理,你仍然需要sysadmin角色的成员。此外,你回顾了SQL Server代理服务帐户的安全影响和选择。在这一篇,你将学习SQL Server代理的代理帐户的概念。代理帐户允许作业步骤来模拟一个特定的Windows安全帐户为作业步骤执行操作。这通常是在作业所有者的安全凭据不适用执行操作时应用。
代理帐户是什么
正如上面提到的,一个代理帐户是一组存储在Windows的安全凭据。这些凭据可以作为作业的安全上下文。代理帐户可由一个或多个符合条件的子系统使用。
可用代理帐户的子系统
并不是所有的子系统都可以使用代理帐户。可以使用代理帐户的子系统包括:
->ActiveX 脚本
->操作系统(CmdExec)
->复制系列任务
->SQL Server Analysis Services 命令(XML/A)
->SQL Server Analysis Services 查询(MDX)
->SQL Server Integration Services 包
->PowerShell
上面没有Transact-SQL脚本(T-SQL)子系统。T-SQL作业步骤通常运行于作业所有者的安全上下文,而且SSMS中不能改变。你可以手动配置作业步骤,使用sp_add_jobstep系统存储过程,通过database_user_name参数来模拟一个数据库用户,当然你需要安全权限来模拟数据库用户这样做。
你也会注意到复制子系统组合为一体,即使有几个不同的子系统处理复制。理论上你可以使用代理帐户,但那超出这系列范围的高级配置。
当你创建一个作业步骤,如图10.1所示(打开作业选择步骤页面,然后点击新建…按钮,选择一个支持代理帐户的子系统如PowerShell。你会看到一个可以模拟支持作业步骤的账户列表。如果你没有创建任何代理帐户凭据,列表看起来应该如图10.1所示,仅有SQL Server代理安全帐户。

图10.1 为作业步骤选择代理帐户
代理帐户的安全考虑

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

EXEC sp_add_proxy
[ @proxy_name = ] 'proxy_name' ,
[ @enabled = ] is_enabled ,
[ @description = ] 'description' ,
[ @credential_name = ] 'credential_name' ,
[ @credential_id = ] credential_id ,
[ @proxy_id = ] id OUTPUT

保留proxy_name空白,保证代理与凭据相同的名字。凭据名称应该来自安全凭据(使用CREATE CREDENTIAL数据库定义语句创建)。
例如,创建一个[Proxy1]代理帐户,密码“Password1”(即一个帐户在你的本地SQL Server机器创建),你可以运行代码10.1,替换成你的环境中有效的域、身份和密码。

USE MSDB;
GO
CREATE CREDENTIAL [Cred1] WITH IDENTITY = N'USER-67NP5R8LGK\ClearFile', SECRET = N'' Declare @rc int=0;
EXEC sp_add_proxy [Proxy1],1,'This is an example proxy account',[Cred1], NULL,@rc;

代码10.1 创建凭据和代理帐户
值得注意的是,目前你已经创建一个代理帐户,但它不与任何特定的子系统关联。如果你展开代理->未分配的代理,你会看到刚刚创建的代理帐户,如图10.2所示。

图10.2 SSMS下未分配的代理帐户
请注意,这里使用SSMS创建更容易,但仍然有两步过程。你必须先创建一个凭据(安全性->凭据,新建凭据,打开新建凭据对话框)。在这个例子中,使用Cred1作为帐号,用相同的密码,如图10.3所示。

图10.3 SSMS下创建凭据
单击“确定”,然后导航到代理文件夹,并右键单击任何代理子系统(或代理文件夹本身),新建代理。弹出新建代理帐户,键入Proxy1名称,选择相匹配的凭据,输入一个描述,如果需要选择一个作业子系统(如图10.4所示)。如果没有选择子系统,代理帐户将出现在未分配的代理下(类似用语句创建的代理)。

图10.4 SSMS下创建代理帐户
最后一步是将代理帐户和子系统关联,它是通过系统存储过程sp_grant_proxy_to_subsystem实现的。在前面的例子,为了将代理帐户[Proxy1]分配给PowerShell子系统,你可以运行下面代码:

EXEC sp_grant_proxy_to_subsystem @proxy_name=N'Proxy1', @subsystem_id=12

子系统的subsystem_id可以在MSDN文档查到http://msdn.microsoft.com/en-us/library/ms186760.aspx
授权代理凭据
你可能已经注意到,在新建代理帐户对话框有一个主体页签。默认情况下,sysadmin服务器角色的成员有代理资格,但这不适用于其他人。如果你想有一个非管理员用户访问代理凭据(这是很有可能的,否则为什么要创造它们),那么你需要授予明确的访问给每一个你想使用代理的登录。
你可以使用系统存储过程sp_grant_login_to_proxy 来实现,或者SSMS。打开PowerShell代理文件夹下的Proxy1代理帐户,转到主体页签。点击添加(如图10.5),你就可以关联一个或多个安全主体(登录)和你的代理帐户。一旦这样操作后,任何主体拥有的作业可以使用这个代理帐户。注意还有第三个页签,引用,这里会显示出哪个作业步骤使用了这个代理帐户,你可以直接修改或删除代理。

图10.5 关联代理帐户和安全主体(SQL登录)
使用代理帐户

现在就可以修改作业步骤来使用代理帐户。如果你是遵循本系列的文章,你应该有一个叫做ShellOut的作业,它的第二步s2是PowerShell子系统。打开这个作业步骤,更改运行身份为Proxy1(如图10.6所示)。如果你没有这个作业步骤,你应该创建一个这样的步骤。

图10.6 使用代理帐户更新作业步骤
现在再次运行作业,这样就是使用代理帐户而不是SQL Server服务帐户来执行作业步骤的。记住你的代理帐户必须能登录到你的数据库实例,因此确保你已经为代理帐户创建了一个数据库登录名。
修改和删除代理
使用SSMS来修改或删除代理是直观的(打开代理帐户对话框更改),但为了完整对应的Transact-SQL语句是:

exec msdb.dbo.sp_delete_proxy @proxy_name = 'proxy1'

凭据的理解可参考:在SQL Server Agent中应用凭据
下一篇
SQL Server代理的代理帐户允许非sysadmin用户模拟其他Windows安全凭据有特权执行关键任务的能力。当结合子系统如CmdExec和PowerShell,他们允许比sysadmin低特权级被授予SQL代理作业的所有者。
在我们的下一篇,我们将看看维护计划作业,以及他们与你自己创建的作业的区别。

第十篇 SQL Server代理使用代理帐户的更多相关文章

  1. 【译】第十篇 SQL Server代理使用代理帐户

    本篇文章是SQL Server代理系列的第十篇,详细内容请参考原文 在这一系列的上一篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole ...

  2. 第九篇 SQL Server代理了解作业和安全

    本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ...

  3. 第八篇 SQL Server代理使用外部程序

    本篇文章是SQL Server代理系列的第八篇,详细内容请参考原文 在这一系列的上一篇,学习了如何用SQL Server代理作业活动监视器监控作业活动和查看作业历史记录.在实时监控和管理SQL Ser ...

  4. 第六篇 SQL Server代理深入作业步骤工作流

    本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术 ...

  5. 【译】第九篇 SQL Server代理了解作业和安全

    本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ...

  6. 【译】第八篇 SQL Server代理使用外部程序

    本篇文章是SQL Server代理系列的第八篇,详细内容请参考原文 在这一系列的上一篇,学习了如何用SQL Server代理作业活动监视器监控作业活动和查看作业历史记录.在实时监控和管理SQL Ser ...

  7. 【译】第六篇 SQL Server代理深入作业步骤工作流

    本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术 ...

  8. 第五篇 SQL Server代理理解代理错误日志

    本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...

  9. 【译】第五篇 SQL Server代理理解代理错误日志

    本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...

随机推荐

  1. centos7防火墙那些事

    转发设置 firewall-cmd --permanent  --add-forward-port=port=80:proto=tcp:toport=8080 firewall-cmd --perma ...

  2. mac电脑如何不生成.DS_STORE文件

    执行这个命令,然后重启 defaults write com.apple.desktopservices DSDontWriteNetworkStores true

  3. 通过apt-get安装nvidia驱动

    标签:NVIDIA Driver apt 早前安装的NVIDIA显卡驱动在启动X Server的时候提示版本太新了,要求必须使用340.96的,而新的驱动都到了367 https://wiki.deb ...

  4. Becoming a Data Scientist – Curriculum via Metromap

    From: http://nirvacana.com/thoughts/becoming-a-data-scientist/ Data Science, Machine Learning, Big D ...

  5. VC++ 学习笔记(三):摩登之路——C++/CLI简介

    在Windows上,除非我们必须得用C++来写界面,否则我会选择避免,避免学习和使用MFC.替代的方案是用C#来做界面,然后用C++/CLI来连接C#和Native C++.那么问题来了,C++/CL ...

  6. 关于移动App的五个提问

    1.你的移动App利用了手机的哪些特性? 2.你们是否有用移动的角度和思维来考虑产品形态?还是简单的把Web照搬到手机上? 3.用户有什么特殊的动力去安装你们的App? 4.用户是否能很好的上手和使用 ...

  7. python use dom to write xml file

    #encoding:utf-8 ''' write xml in dom style ''' from xml.dom.minidom import Document doc = Document() ...

  8. 804 pretest 解题

    Answers with Explanations 1. c) s1 and s2 not equal s1 and s3 equal JVM sets a constant pool in whic ...

  9. [原创]Android Handler使用Message的一个注意事项

    最近发现了一个莫名其妙的问题,在使用Handler.post(Runnable)这个接口时,Runnable有时候没有运行,非常奇怪,后来发现是因为调用Handler.removeMessage()时 ...

  10. 专访Linux嵌入式开发韦东山操作系统图书作者--转

    CSDN学院讲师韦东山:悦己之作,方能悦人 发表于2015-04-28 08:09| 6669次阅读| 来源CSDN| 24 条评论| 作者夏梦竹 专访Linux嵌入式开发韦东山操作系统图书作者 摘要 ...