SQL Server代理(9/12):理解作业和安全

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



在这个系列的前一篇文章里,你学习了如何在SQL Server代理作业步骤里启动外部程序。你可以使用过时的ActiveX系统,从虚拟命令提示符里运行批处理命令,或甚至启动你自己的程序。你的最佳选项是使用PowerShell子系统来运行PowerShell脚本。PowerShell脚本会允许你操纵系统或SQL Server角度的一切。在这篇文章里,你会收入SQL Server代理安全。对大多数人来说,安全是个令人迷惑的话题,值得一些明确的考虑。在这个系列里有2个不同角度的安全会涉及:运行SQL Server代理作业的安全,可以用来作为代理作业运行作业步骤的模拟安全账号。这个系列的下篇文章会谈下代理账号,这篇会集中讨论运行SQL Sever代理和SQL Server代理作业的安全权限。

SQL Server代理服务账号需要的安全

在这个系列的第一篇文章已经谈了选择SQL Server代理服务账号,为了进一步理解SQL Server代理如何运作的话,现在你要重新审视下你的决定。如果你只想连接到本地SQL Server实例的作业,对于SQL Server服务账号需要最小的权限。在这个情况下,NetworkService是用作服务账号的最好选择。使用Windows Server 2008R2和SQL Server 2008 R2,这会提供一个非常安全的账号,可以轻松授权SQL Server的工作。

如果你想使用SQL Server代理的更多的一些高级功能,例如使用CmdExec子系统或PowerShell子系统,或者你想连接到SQL Server实例或网络共享,你会使用系统域用户账号作为自定义服务账号。你可以为SQL Server代理创建一个特定账号,在你的组织里为所有的SQL Server代理安装使用统一账号,或为每个SQL Server代理实例使用不同的账号。

当为SQL Server服务选择了一个账号时,你的账号需要下列权限:

  • 在所有Windows版本里,作为服务登陆的权限(SeServiceLogonRight
  • 在Windows服务器,SQL Server代理服务代理帐户需要下面权限:
    • 绕过遍历检查(SeChangeNotifyPrivilege)
    • 替换进程级令牌(SeAssignPrimaryTokenPrivilege)
    • 为进程调整内存配额(SeIncreaseQuotaPrivilege)
    • 作为批处理作业登录(SeBatchLogonRight)

这个列表来自SQL Server联机丛书https://msdn.microsoft.com/zh-cn/library/ms191543.aspx。此外,任何你选择的帐户必须是相关数据库实例中sysadmin服务器角色的成员。下一篇你将使用代理帐户,所以这些特权是必不可少的。

修改服务账号

如果你要更改服务帐户,你可以使用安装程序或SQL Server配置管理器来修改。这些程序将正确授予所有需要的权限和安全权利来启用新的服务帐户。你不应该直接用Windows更改服务帐户。插图1显示使用SQL Server配置管理器更改服务帐户。请注意,你需要Windows管理员权限来使用这个程序。

插图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代理某些部分的能力(插图2)。你只可以查看你自己创建的作业,以及查看和使用作业活动监视器(仅限你创建的作业)。

插图2:SQLAgentUserRole成员连接对象资源管理器

SQLAgentReaderRole

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

插图3:SQLAgentReaderRole成员连接对象资源管理器

SQLAgentOperatorRole

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

下篇预告

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

原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/72460/

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

时间: 2024-11-12 21:07:17

SQL Server代理(9/12):理解作业和安全的相关文章

SQL Server代理(2/12):作业步骤和子系统

SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. SQL Server代理作业有一系列的一个或多个作业步骤组成.一个作业步骤会分配给特定的作业子系统,用来标识将要进行的作业步骤工作种类.每个作业步骤在各自安全上下文运行,尽管每个作业有可以决定谁可以修改作业的拥有者.这篇文章会聚焦组成SQL Server代理作业的作业步骤和子系统. 作业的快速回顾 认为SQL Server代理作业的最好方式

SQL Server代理(11/12):维护计划作业

SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,我们看了使用代理帐户模仿Windows安全上下文完成作业步骤的工作.大多数子系统支持代理账户,同时子系统限制代理账户, 要求用户必须明确授权可以在作业步骤使用代理凭据.在这一篇,你将检查维护计划.维护计划是用来执行各种任务来优化你的数据库,包括备份.重建和/或重整 索引.更新统计.维护计划会创建作业.这一篇我们将查看维护

翻译(十四)——通往SQL Server代理的阶梯-二级:作业步骤和子系统

  翻译(十四)——通往SQL Server代理的阶梯-二级:作业步骤和子系统 Richard Waymire,2017/10/11(首次出版:2011/02/17) 链接: http://www.sqlservercentral.com/articles/SQL+Agent/Job+Steps+and+Subsystems/72268/ 该系列 本文是楼梯系列的一部分:SQL Server代理的阶梯 SQL Server代理是任何实时数据库系统的核心.代理有许多不太明显的用途,因此对于开发人员

翻译:通往SQL Server代理的阶梯-二级:作业步骤和子系统

通往SQL Server代理的阶梯-二级:作业步骤和子系统Richard Waymire,2017/10/11(首次出版:2011/02/17)该系列本文是楼梯系列的一部分:SQL Server代理的阶梯SQL Server代理是任何实时数据库系统的核心.代理有许多不太明显的用途,因此对于开发人员和dba来说,系统的知识总是有用的.Richard Waymire提供了一个简单的解释.SQL Server代理作业是由一系列的一个或多个作业步骤组成的.一个作业步骤被分配到一个特定的工作子系统,它确定

SQL Server代理(5/12):理解SQL代理错误日志

SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这个系列的前几篇文章所见,SQL Server代理是由一系列的作业步骤组成,每个步骤是不同类型将要进行的工作.如果你在第4篇所见,SQL Server代理也提供使用数据库邮件发送提醒的能力.如果出现问题,不管怎样, 你必须去查看下数据库邮件错误日志.在这篇文章里,你会学到如何理解和查看SQL Server错误日志的所有相关知识.你会

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

SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole.SQLAgentReaderRole和 SQLAgentOperatorRole.每个角色授予用户一定的权限来使用SQL Server代理,而不必是sysadmin服务器角色的成员.为完全管理控制SQL Se

SQL Server代理(8/12):使用SQL Server代理外部程序

SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的上篇文章里,你学习如何使用SQL Server代理作业活动监视器监视作业活动和查看作业历史.对于你的SQL Server代理作业进行实时监视和管理,作业活动管理器是个强大的工具.在这个系列的第8篇文章里,你会回顾SQL Server代理的另一个功能——运行操作系统命令行,在SQL Server外围环境运行程序.一些程序是命令行(

第七篇 SQL Server代理作业活动监视器

本篇文章是SQL Server代理系列的第七篇,详细内容请参考原文 在这系列的前几篇,你创建并配置SQL Server代理作业.每个作业有一个或多个步骤,可能包含大量的工作流.在这篇文章中,将查看作业活动监视器.作业活动监视器是系统管理工具来运行工作,查看作业历史记录,并启用/禁用作业.本文同样会回顾一些作业活动监视器调用的存储过程,你可以直接调用过程做你自己的自定义任务监控.SQL Server代理作业活动监视器SQL Server代理作业活动监视器的主要机制是监视作业运行,以及查看代理已运行

第一篇 SQL Server代理概述

本系列文章来源于sqlservercentral,详细内容请参考原文. SQL Server代理是SQL Server的作业调度和告警服务,如果使用得当,它可以大大简化DBA的工作量.SQL Server代理的核心是运行批量作业的能力.“批量”可以简单的理解成“一系列的动作”,经常是TSQL脚本.它们可以以作业的形式在特定的调度运行,这个调度你可以选择在只有少量用户访问系统的时间点/段.换而言之,可以使用SQL Server代理排定批量作业.批量作业可以是平常的T-SQL任务,也可以是运行于多个