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

本篇文章是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代理服务帐户控制安全权权。每一个作业子系统具有不同的安全考虑,代理账户正是针对这种安全。

时间: 2024-08-02 06:52:50

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

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

本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术上是独立的,但是你可以创建工作流贯穿作业中的各个步骤.在这篇文章中,你将学习如何在作业步骤中使用工作流来改变要执行的操作,单一作业有多个条件可以处理.你也会接触作业步骤安全和作业子系统的更多细节.SQL Server代理步骤如第二篇所述,SQL Server代理作业包含一个或多个作业步骤.每一个作业

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

本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作).每个作业步骤运行于一个单独的安全上下文,尽管每个作业有一个所有者来决定谁可以修改作业.本篇主要关注组成SQL Server代理的作业步骤和子系统.快速回顾作业理解SQL Server代理作业的最佳方式是把相关联的 需要完成给定任务 的组件放在一个容器中.作业最主要的组件有作业步骤.计划.警告和通知.

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

本篇文章是SQL Server代理系列的第十篇,详细内容请参考原文 在这系列的前几篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole.SQLAgentReaderRole和SQLAgentOperatorRole.每个角色授予用户一定的权限来使用SQL Server代理,而不必是sysadmin服务器角色的成员.为完全管理控制SQL Server代理,你仍然需要sysadmin角色的成员.此外,你回顾了SQL Server代理服务

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

本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到,SQL Server代理可以通过数据库邮件发送通知.如果有什么不正确的,你必须查看数据库邮件日志.在这一篇,你将学习如何理解和查看所有相关的SQL Server代理错误日志.你将回顾最常见的错误信息,掌握哪些信息需要你采取行动,哪些信息只是单纯的信息而已.一旦你理解错误日志,在处理SQL Serv

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

本篇文章是SQL Server代理系列的第八篇,详细内容请参考原文 在这系列的前几篇,学习了如何用SQL Server代理作业活动监视器监控作业活动和查看作业历史记录.在实时监控和管理SQL Server代理作业上,作业活动监视器是一个很好的工具.第八篇,你会看到SQL Server代理的另一个功能——the ability to shell out to the operating system and run programs outside of the SQL Server enviro

如何修改 SQL Server 代理主作业 (Transact-SQL)

本主题介绍了如何使用存储过程修改 Microsoft SQL Server 代理主作业. 更改作业定义计划的详细信息 1.       执行 sp_update_schedule. 在作业中添加.更改或删除步骤 1.       执行 sp_add_jobstep 来添加新的作业步骤. 2.       执行 sp_update_jobstep 来更改原先存在的作业步骤. 3.       执行 sp_delete_jobstep 来删除原先存在的作业. 修改与作业相关联的目标服务器 1.   

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

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

第四篇 SQL Server代理配置数据库邮件

本篇文章是SQL Server代理系列的第四篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.SQL Server代理同样提供创建警报,能够以通知的形式将消息发送给设定的操作员.这些通知可以通过数据库邮件发送,数据库邮件是内置在SQL Server和SQL Server代理能够发送和接收电子邮件.在这一篇,你将学习如何配置数据库邮件发送和接收操作,以及一些基本的数据库邮件故障排除步骤.数据库邮件的简要概述在S

第一篇 SQL Server代理概述

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