使用代理账号运行作业

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

代理帐户是什么

正如上面提到的,一个代理帐户是一组存储在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参数来模拟一个数据库用户,当然你需要安全权限来 模拟数据库用户这样做。

你也会注意到复制子系统组合为一体,即使有几个不同的子系统处理复制。理论上你可以使用代理帐户,但那超出这系列范围的高级配置。
当 你创建一个作业步骤,如图1所示(打开作业选择步骤页面,然后点击新建…按钮,选择一个支持代理帐户的子系统如PowerShell。你会看到一个 可以模拟支持作业步骤的账户列表。如果你没有创建任何代理帐户凭据,列表看起来应该插图1所示,仅有SQL Server代理安全帐户。


插图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_proxy
2     [ @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
复制代码

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

复制代码
1 USE MSDB;
2 GO
3 CREATE CREDENTIAL [PC201602202041\ProxyDemo] with IDENTITY = 'PC201602202041\ProxyDemo'
4 , SECRET = 'Password1';
5 
6 Declare @rc int=0;
7 
8 EXEC sp_add_proxy [PC201602202041\ProxyDemo],1,'This is an example proxy account',
9 [PC201602202041\ProxyDemo], NULL,@rc;
复制代码

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


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


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


插图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文档查到https://msdn.microsoft.com/zh-cn/library/ms186760.aspx

授权代理凭据

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

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

使用代理帐户

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

插图6:使用代理帐户更新作业步骤
现在再次运行作业,这样就是使用代理帐户而不是SQL Server服务帐户来执行作业步骤的。记住你的代理帐户必须能登录到你的数据库实例,因此确保你已经为代理帐户创建了一个数据库登录名。

修改和删除代理

使用SSMS来修改或删除代理是直观的(打开代理帐户对话框更改),但为了完整对应的Transact-SQL语句是:

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

下篇预告




本文转自Woodytu博客园博客,原文链接:http://www.cnblogs.com/woodytu/p/5194262.html,如需转载请自行联系原作者
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
11月前
|
数据安全/隐私保护
自动以管理员身份运行批处理(bat)文件
自动以管理员身份运行批处理(bat)文件
434 0
|
1月前
|
JSON 分布式计算 DataWorks
DataWorks常见问题之依赖的自动节点修改为统一调度节点失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
1月前
|
分布式计算 DataWorks 调度
DataWorks常见问题之设置好调度时间的任务运行后查看运行日志报错如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
42 0
|
2月前
|
DataWorks 关系型数据库 大数据
dataworks问题之执行TELNET命令失败如何解决
DataWorks数据集是指在阿里云DataWorks平台内创建、管理的数据集合;本合集将介绍DataWorks数据集的创建和使用方法,以及常见的配置问题和解决方法。
23 2
|
4月前
|
分布式计算 网络安全 MaxCompute
请问为什么maxcompute的授权操作会有几分钟的滞后时间,不会立即生效呢?但是我对2个账户分别打开命令行,其中一个主账号操作完,另一个账号要过几分钟才能生效,这个是有延迟么?
请问为什么maxcompute的授权操作会有几分钟的滞后时间,不会立即生效呢?但是我对2个账户分别打开命令行,其中一个主账号操作完,另一个账号要过几分钟才能生效,这个是有延迟么?
48 1
|
8月前
|
专有云
专有云数据集成自定义资源组服务器的初始化脚本
专有云数据集成自定义资源组服务器的初始化脚本
112 1
|
开发者
控制台提交和管理作业 | 学习笔记
快速学习控制台提交和管理作业
79 0
控制台提交和管理作业 | 学习笔记
|
Cloud Native 分布式数据库
用户指南—实例管理—重启实例
当PolarDB-X实例出现连接数满或性能问题时,您可以在控制台上手动重启实例。本文将介绍如何重启实例。
|
存储 数据采集 开发框架
ModStartCMS v5.1.0 数据采集接口,登录自动注册
ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议,免费且不限制商业使用。
87 0
|
消息中间件 弹性计算 分布式计算
DataWorks使用Shell节点调用自定义资源组执行脚本
本文主要介绍DataWorks使用Shell节点调度自定义资源组执行Shell脚本,且使用该功能需要用户的DataWorks版本为企业版。文中主要内容包括配置自定义资源组,以及设置ECS的amdin用户权限,脚本模式使用MaxCompute客户端,并配置手动业务流程执行对应的Shell脚本在开发环境运行,检测其脚本执行的命令是否正确。该功能对于用户调度用户ECS上的的程序提供了便利,使其他的任务能和DataWorks的调度结合起来。
2882 0
DataWorks使用Shell节点调用自定义资源组执行脚本