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


在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序。你可以使用过时的ActiveX系统,运行批处理命令脚本,甚至自己的程序。你最好的选择是使用PowerShell的子系统运行PowerShell脚本。PowerShell脚本将允许你处理几乎所有方面的Windows和SQL Server问题。在这一篇,你会深入到SQL Server代理安全。
安全是个令人困惑的话题,它值得一些明确的考虑。这系列有两个不同方面的安全:安全运行SQL Server代理作业;安全帐户用作代理帐户来运行作业步骤。在本系列的下一篇将讨论代理帐户,本篇的重点是运行SQL Server代理和SQL Server代理作业的安全权限。
SQL Server代理服务帐户的安全要求
第一篇讲述过选择SQL Server代理服务帐户,但你将会重新回顾这部分内容基于你深入理解SQL Server代理如何操作。如果你计划把作业只连接到本地SQL Server实例,SQL Server代理服务帐户只需要最小的权限。在这种情况下,NetworkService是一个很好的选择。在Windows Server 2008 R2和SQL Server 2008 R2,提供一个非常安全的帐户,可以很容易地被授予SQL Server权利。
如果你打算使用SQL Server代理的一些更先进的功能,如使用CmdExec子系统或PowerShell子系统,或者你想连接到远程SQL Server实例或网络共享,你可能会想要一个定制的服务帐户(Windows域用户帐户)。你可以创建专门为SQL Server代理的帐户,给所有SQL Server代理使用一个共同的帐户,或每个实例下的SQL Server代理使用一个独特的帐户。
当为SQL Server代理服务选择一个账户时,你的帐户需要以下安全权限:
->在所有的Windows版本,作为服务登录权限(SeServiceLogonRight)
->在Windows服务器,SQL Server代理服务代理帐户需要下面权限:
  绕过遍历检查(SeChangeNotifyPrivilege)
  替换进程级令牌(SeAssignPrimaryTokenPrivilege)
  为进程调整内存配额(SeIncreaseQuotaPrivilege)
  作为批处理作业登录(SeBatchLogonRight)
这个列表来自SQL Server联机丛书http://msdn.microsoft.com/en-us/library/ms191543.aspx。此外,任何你选择的帐户必须是相关数据库实例中sysadmin服务器角色的成员。下一篇你将使用代理帐户,所以这些特权是必不可少的。
更改服务帐户
如果你要更改服务帐户,你可以使用安装程序或SQL Server配置管理器来修改。这些程序将正确授予所有需要的权限和安全权利来启用新的服务帐户。你不应该直接用Windows更改服务帐户。图9.1显示使用SQL Server配置管理器更改服务帐户。请注意,你需要Windows管理员权限来使用这个程序。

图9.1 更改SQL Server代理服务帐户
SQL Server代理安全角色
SQL Server代理有三个安全角色用于控制安全。这些角色是在SQL Server 2005引入的,这些角色有:
->SQLAgentUserRole
->SQLAgentReaderRole
->SQLAgentOperatorRole
Sysadmin服务器角色的成员自动拥有SQL Server代理所有控制权限,正如他们对SQL Server的完全控制。这些角色让非管理员用户有访问和/或控制SQL Server代理的权利。这些是msdb数据库(SQL Server中保存所有SQL Server代理元数据)中的一个角色。
这些角色如何工作:SQLAgentUserRole具有最少的权限。然而,SQLAgentReaderRole和SQLAgentOperatorRole是SQLAgentUserRole的成员,所以你授予给UserRole的权限将自动被其他两个角色继承。此外,SQLAgentOperatorRole是SQLAgentReaderRole的成员,所以同样——任何授予给ReaderRoler的权限自动扩展给OperatorRole。现在你可以详细研究每个子系统。
SQLAgentUserRole
SQLAgentUserRole成员具有非常有限的权限。他们可以查看他们拥有的操作员、本地作业、作业调度。他们还可以创建作业。
当你是msdb中的SQLAgentUserRole数据库角色的成员时,你有查看SQL Server代理某些部分的能力(图9.2)。你只可以查看你自己创建的作业,以及查看和使用作业活动监视器(仅限你创建的作业)。

图9.2 SQLAgentUserRole成员连接对象资源管理器
SQLAgentReaderRole
msdb的SQLAgentReaderRole数据库角色的成员继承SQLAgentUserRole的权限,同时还有使用多服务器作业的能力(第十二篇会讲)。你还可以查看服务器上所有的作业,而不只是你自己的作业。然而,你只能查看那些不是你创建的作业(你可以控制你创建的作业)。
图9.3,作为SQLAgentReaderRole的成员,你依然可以看到作业节点,作业活动监视器,但是现在你可以看到系统上的所有作业,而不仅仅是你创建的。

图9.3 SQLAgentReaderRole成员连接对象资源管理器
SQLAgentOperatorRole
msdb中的SQLAgentOperatorRole数据库角色赋予用户在SQL Server代理特权。它包括另两个SQLAgent数据库角色的所有权限,再加上查看操作员和代理的属性,并允许你查看和SQL Server代理相关的所有警告。
SQLAgentOperatorRole角色成员可以停止、启动、或运行本地作业,并可以删除本地作业的历史记录。角色成员可以启用/禁用作业,以及启用/禁用作业调度。但是有一个注意,他们不能使用GUI来启用/禁用工作或计划,他们必须使用系统存储过程(或直接sp_update_job或sp_update_schedule)。
SQLAgentOperatorRole角色成员看到的图形界面与图9.4类似,几乎完全访问SQL Server代理。

图9.4 SQLAgentOperatorRole成员连接对象资源管理器
下一篇
SQL Server代理需要特定的Windows和SQL Server权限用于SQL Server代理服务帐户。msdb数据库有三种数据库角色,允许非sysadmin服务器角色成员的用户有访问SQL Server代理的权限,根据他们的访问级别的需求。你可以使用这些角色,而不是被迫提升为sysadmin服务器角色的成员使用或管理SQL Server代理作业。
在我们的下一篇,我们将开始在作业步骤中使用SQL Server代理服务帐户控制安全权权。每一个作业子系统具有不同的安全考虑,代理账户正是针对这种安全。

第九篇 SQL Server代理了解作业和安全的更多相关文章

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

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

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

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

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

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

  4. 第二篇 SQL Server代理作业步骤和子系统

    本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...

  5. 【译】第二篇 SQL Server代理作业步骤和子系统

    本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...

  6. 第十篇 SQL Server代理使用代理帐户

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

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

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

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

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

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

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

随机推荐

  1. POI 设置EXCEL单元格格式(日期数字文本等)

    HSSFCellStyle style0 = workbook2003.createCellStyle(); style0.setBorderBottom(HSSFCellStyle.BORDER_T ...

  2. (转)数字格式化函数:Highcharts.numberFormat()

    一.函数说明 该函数用于图表中数值的格式化,常见用途有数值精度控制.小数点符.千位符显示控制等.   二.函数使用   1.函数构造及参数 Highcharts.numberFormat (Numbe ...

  3. sruts2:单个文件上传,多个文件上传(属性驱动)

    文件上传功能在Struts2中得到了很好的封装,主要使用fileUpload上传组件. 1. 单个文件上传 1.1 创建上传单个文件的JSP页面.显示提交结果的JSP页面 uploadTest1.js ...

  4. Hadoop2.x源码-编译剖析

    1.概述 最近,有小伙伴涉及到源码编译.然而,在编译期间也是遇到各种坑,在求助于搜索引擎,技术博客,也是难以解决自身所遇到的问题.笔者在被询问多次的情况下,今天打算为大家来写一篇文章来剖析下编译的细节 ...

  5. 通过PowerShell获取域名whois信息

    Whois 简单来说,就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人.域名注册商.域名注册日期和过期日期等).通过域名Whois服务器查询,可以查询域名归属者联系方式 ...

  6. Python Flask UnicodeDecodeError 编码错误解决

    折腾Python做快速Web开发.最后定下来用Flask,相对教程全面. utf8编码上遇到问题,所有文件已经是utf8编码保存,加载css.js等静态文件,如果用GBK编码就正常:用utf8就报Un ...

  7. 算法导论第十八章 B树

    一.高级数据结构 本章以后到第21章(并查集)隶属于高级数据结构的内容.前面还留了两章:贪心算法和摊还分析,打算后面再来补充.之前的章节讨论的支持动态数据集上的操作,如查找.插入.删除等都是基于简单的 ...

  8. 超时时间已到。在操作完成之前超时时间已过或服务器未响应。 (.Net SqlClient Data Provider)

    超时时间已到.在操作完成之前超时时间已过或服务器未响应. (.Net SqlClient Data Provider) 在做一个小东西的时候出现了这个问题,就是使用VS调试几次项目后,使用SQL Se ...

  9. java之Object类介绍

    1.Object类是所有java类的基类 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类,ex: public class Person{ ~~~~~ } 等价于 p ...

  10. C#参考:Linq 概述

    Linq (Language Integrated Query,语言集成查询),是微软公司提供的一项新技术,它能够将查询功能引入到.NET 3.5 所支持的编程语言中,例如C#,Visual Basi ...