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 命令(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

 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机器创建),你可以运行代码1,替换成你的环境中有效的域、身份和密码。

 USE MSDB;
GO
CREATE CREDENTIAL [PC201602202041\ProxyDemo] with IDENTITY = 'PC201602202041\ProxyDemo'
, SECRET = 'Password1'; Declare @rc int=0; EXEC sp_add_proxy [PC201602202041\ProxyDemo],1,'This is an example proxy account',
[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'

下篇预告

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

原文地址:http://www.sqlservercentral.com/articles/Stairway+Series/72461/

参考文章:http://www.cnblogs.com/Uest/p/4562219.html

SQL Server代理(10/12):使用代理账号运行作业的更多相关文章

  1. SQL Server代理(3/12):代理警报和操作员

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

  2. SQL Server: Top 10 Secrets of a SQL Server Expert

    转载自:http://technet.microsoft.com/en-us/magazine/gg299551.aspx Many companies have downsized their IT ...

  3. 数据库SQL Server 2014 设置自动备份(维护计划和作业)

    前言     1.SQL Server数据库自动备份可以有两种操作          第一种是在SQL控制台下的服务器名称展开,展开“管理”--选择“维护计划”,右键“新建维护计划”即可.       ...

  4. SQL Server 数据库备份策略,第一周运行失败的原因

    一般生产库,采用 每10分钟备份Log,每天备份Diff,每周备份Full的策略. 同时存在异地备份.异地备份可使用SQL Server本身的cmdshell存储过程,调用系统命令. 在为新数据库,建 ...

  5. 在SQL Server Express版本中没有代理功能如何自动备份数据库

    因为是免费的且单个数据库可以支持到10GB,对于一般企业完全足够了,也就将就使用了,备份将分为两步: 1.创建备份脚本 2.创建系统的计划任务进行每天的备份 详细做法如下: 1.创建备份脚本 打开SS ...

  6. SQL Server 对表的 12 种一般性操作

    01. 创建 create table Strings(ID int);    go 02. 为表添加列 alter table Strings    add String nvarchar(32); ...

  7. sql server top 10 IO性能查询

    use master go ), ((case qs.statement_end_offset then datalength(qt.text) else qs.statement_end_offse ...

  8. SQL 计算两个时间之差 分类: SQL Server 2014-07-04 10:57 119人阅读 评论(0) 收藏

    SQL语句: A,B为两个字段,A为开始时间,B为结束时间,ss为秒. SELECT datediff(ss,A,B)  FROM Table 详细:http://www.w3school.com.c ...

  9. sql server varchar(10)和 nvarchar(10)存储数据长度

    ) 存储10个字母,英文标点符号等,5个汉字以及中文标点等. )存储10汉字.字母等,不区分中英文.

随机推荐

  1. xml笔记

    <?xml version="1.0" encoding="UTF-8"?> ----------------------------------- ...

  2. Attic 0.8.1 发布,备份程序

    Attic 0.8.1 修复了昨天刚发布的 Attic 0.8 的一个段错误. Attic 是一个可以保证文件不重复的备份程序.Attic 的主要目标是提供一个高效和安全的方法来备份数据.重复数据删除 ...

  3. 消息智能路由组件SmartRoute

    消息传递在软件开发过程中是一件很常见的事情,而在不同的场景所使用消息传递方式也有所不同,在对象之间制定相关接口方法和对象结构,对于进程之间可能使用内存共享或一些通讯产品,在不同服务器之的消息通讯则使用 ...

  4. [Asp.net 开发系列之SignalR篇]专题三:使用SignalR实现聊天室的功能

    一.引言 在前一篇文章中,我向大家介绍了如何实现实现端对端聊天的功能的,在这一篇文章中将像大家如何使用SignalR实现群聊这样的功能. 二.实现思路 要想实现群聊的功能,首先我们需要创建一个房间,然 ...

  5. Linux1:Linux概述

    为什么服务器尤其大型服务器都使用Linux系统 服务器尤其是大型服务器一般都使用Linux系统,有以下几点原因: 1.成本低,Linux操作系统是免费的 2.安全性好,Linux采取了许多的安全措施, ...

  6. 返本求源——DOM元素的特性与属性

    抛砖引玉 很多前端类库(比如dojo与JQuery)在涉及dom操作时都会见到两个模块:attr.prop.某天代码复查时,见到一段为某节点设置文本的代码: attr.set(node, 'inner ...

  7. C#可扩展编程之MEF学习笔记(三):导出类的方法和属性

    前面说完了导入和导出的几种方法,如果大家细心的话会注意到前面我们导出的都是类,那么方法和属性能不能导出呢???答案是肯定的,下面就来说下MEF是如何导出方法和属性的. 还是前面的代码,第二篇中已经提供 ...

  8. mac命令

    mac下卸载nodesudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*}xc ...

  9. MySQL服务器安装配置-非安装版、windows版

    文档以5.6.30版本为例子说明 1. 下载MySQL http://dev.mysql.com/downloads/mysql/5.6.html#downloads 我们可以选择自己所需要的版本.环 ...

  10. PDO事务处理

    PDO事务处理 2014-9-3 10:44:19 By jiancaigege==================================== 概要:将多条sql操作(增删改)作为一个操作单 ...