SQL Server Agent对象包括警报(Alert),操作员(Operator),Job,调度(Schedule)和代理(Proxy),SQL Server使用msdb系统数据库管理Agent 对象的权限,msdb内置三个固定数据库角色,按照权限从小到大的顺序,依次是:SQLAgentUserRoleSQLAgentReaderRole 和SQLAgentOperatorRole。如果一个用户不是这三个角色或sysadmin角色中的成员,那么该用户通过SSMS的Object Explorer看不到Agent节点。一个用户必须是SQLAgent的角色或sysadmin角色的成员,才能使用SQL Server Agent。

另外,Agent的权限,还跟代理(Proxy)的访问权限有关,代理是用来执行Job Step的,只有建立代理和登陆(Login)之间的映射,用户创建(Own)的Job才能执行。

一,Agent固定数据库角色

SQLAgentUserRole 角色被授予操作Agent的最小权限的集合,其成员只能对其创建的本地Job和Job Schedule具有操作权限,也就是有,该角色的成员对于Owner是自己的Job具有权限,并且不能修改job的所有权(Ownership)。

SQLAgentUserRole 角色具有的权限:

  • 具有操作本地Job和Job Schedule的所有权限,包括创建(Create)、删除(Delete),修改(Modify),启用(Enable)、禁用(Disable)、执行(Execute)、开始(Start)、停止(Stop)等,但是不能修改Job的所有权关系(Ownership);
  • 查看Owned Jobs的执行日志,但是不具有删除历史日志的权限;
  • 查看可用的Operator列表;
  • 查看可用的Proxy列表;

SQLAgentReaderRole 角色,除了具有Multiserver jobs的查看权限之外,和SQLAgentUserRole角色的权限相同;

SQLAgentOperatorRole 角色,除了具有查看警告(Alert)的列表和属性的权限之外,和SQLAgentReaderRole 角色的权限相同;

SQLAgentUserRoleSQLAgentReaderRole 和SQLAgentOperatorRole 都对自己创建的Job具有操作权限,都不能修改Job的所有权:

sysadmin 角色的成员,具有SQL Server Agent的全部权限,能够修改Job的所有权。

二,执行Job Step的权限

在执行Job Step时,SQL Server Agent使用两种类型的权限,分别是Job Owner和代理(Proxy)。如果创建的Job Step是 Transact-SQL script (T-SQL) 类型,那么使用Job Owner的权限去执行TSQL脚本;如果创建的Job Step是另外11种类型种的一种,那么使用代理的权限去执行Job Step。在Job Step执行之前,Agent模拟凭证指定的Windows User的权限,在该权限范围(Security Context)内执行Job Step,使Job Step有权限访问SQL Server 实例之外的资源。

代理(Proxy)使得Job Step在特定的安全上下文中执行,DBA需要创建代理,并为代理设置必须的权限。

SQL Server Agent lets the database administrator run each job step in a security context that has only the permissions required to perform that job step, which is determined by a SQL Server Agent proxy. To set the permissions for a particular job step, you create a proxy that has the required permissions and then assign that proxy to the job step. A proxy can be specified for more than one job step. For job steps that require the same permissions, you use the same proxy.

1,创建代理

每一个Proxy都关联一个凭证(Credential),凭证定义了执行Job Step的安全上下文(Security Context)。使用SSMS创建代理,在SQL Server Agent目录下打开新建代理账户(New Proxy Account)的向导,输入新建的代理名称和关联的凭证名称,从11个子系统(subsystem)列表中选择“SQL Server Intergration Services Package”,该子系统用于执行SSIS的Package。

由于代理的权限是由凭证决定的,因此,在创建代理时,为了有效管控执行Job Step的权限,一般情况下,需要为代理(Proxy)创建专用的用户账户,并未用户授予必需的权限,

  • Create dedicated user accounts specifically for proxies, and only use these proxy user accounts for running job steps.

  • Only grant the necessary permissions to proxy user accounts. Grant only those permissions actually required to run the job steps that are assigned to a given proxy account.

2,授予Login访问代理的权限

在SQL Server中,不是所有的login都有权限访问Proxy。为Proxy添加服务器级别(Server-Level)的安全主体(Login),授予其访问Proxy的权限,这样,用户就能够引用Proxy去执行Job Step。

在Principals Tab中,授予Login,服务器角色(server role)或msdb数据库角色访问Proxy的权限。只有被授予访问Proxy权限的Principal,才能在Job Step中使用Proxy。默认情况下,固定服务器角色 sysadmin的成员有权限访问实例中的所有Proxy。

3,引用代理

如果Login有权限访问Proxy,或者Login属于有权限访问Proxy的服务器角色(Server Role),那么用户能够在Job Step中使用Proxy,例如,在创建Job Step,从Run as 列表种选择可访问的Proxy:

三,安全组(Security Group)

在Windows 域环境中,如果把Job的Owner设置为Security Group(SG),该组的成员无法访问该Job,只有把Job的Owner设置为用户的Windows 账户时,用户才能操作Job。

参考文档:

SQL Server Agent

Implement SQL Server Agent Security

SQL Server Agent Fixed Database Roles

Security7:管理SQL Server Agent的权限的更多相关文章

  1. SQL Server Agent作业执行CmdExec(bat)命令报权限问题

    写了一个bat命令,定期去清理一些SQL Server的Dump文件,然后配置成SQL Server作业,作业执行时报权限错误,具体错误信息如下所示: Message Executed as user ...

  2. SQL Server ->> 关于SQL Server Agent Job执行步骤时的用户上下文(User Context)问题

    这是最近项目相关和自己感兴趣的一个问题:SQL Server Agent Job有几种方法可以以特定用户上下文去执行任务步骤的? 这个事情需要分几种情况来说,因为对于不同类型的任务步骤,SQL Ser ...

  3. 服务器重启后SQL Server Agent由于"The EventLog service has not been started" 启动失败

    案例环境: 操作系统   : Microsoft Windows Server 2003 Standard Edtion SP2 数据库版本 : SQL Server 2005 Standard Ed ...

  4. 理解SQL Server中的权限体系(下)----安全对象和权限

    原文:http://www.cnblogs.com/CareySon/archive/2012/04/12/SQL-Security-SecurableAndPermission.html 在开始阅读 ...

  5. SQL Server下实现利用SQL Server Agent Job对索引重建实现Balance Load

    昨天工作中遇到这样一个场景,有个项目需要把某台服务器下所有的表和索引都启用数据压缩(data_compression=page),已经启用了的表和索引就不需要再压缩一次了.统计一下后发现要运行的REB ...

  6. 如何启动 SQL Server Agent(SQL Server 配置管理器)

    如何启动 SQL Server Agent(SQL Server 配置管理器) SQL Server 2008 R2 其他版本   4(共 6)对本文的评价是有帮助 - 评价此主题 可以从 SQL S ...

  7. Distribution setup SQL Server Agent error: "RegCreateKeyEx() returned error 5, 'Access is denied.'" (转载)

    In the Configure Distribution Wizard, the step "Configuring SQL Server Agent to start automatic ...

  8. SQL Server ->> 更改服务器时区对SQL Server Agent服务器的影响

    昨天在把服务器的时区从PST改成UTC后,发现Job都不跑了.因为SQL Server Agent记录Job的历史运行时间是不区分时区的,也就是意味着我改后出现了最后一条运行记录比倒数第二条时间还要早 ...

  9. Microsoft SQL Server 安全与权限

    Microsoft SQL Server 安全与权限 登陆角色 计算机操作系统用户 --创建Windows身份验证用户 USE [master] GO CREATE LOGIN [计算机名称\计算机用 ...

随机推荐

  1. LeetCode 题解之 Two Sum

    1.题目描述 2.问题分析 使用hashTable 寻找,target  -  num[i] ,将时间复杂度降低到 O(n): 3.代码 vector<int> twoSum(vector ...

  2. 适用于 Windows 的自定义脚本扩展

    自定义脚本扩展在 Azure 虚拟机上下载并执行脚本. 此扩展适用于部署后配置.软件安装或其他任何配置/管理任务. 可以从 Azure 存储或 GitHub 下载脚本,或者在扩展运行时将脚本提供给 A ...

  3. 通用视图-分开处理GET、POST请求

    1.编辑urls.py: url(r'^vmmgmt-vms/$', views.vmmgmt,{'model':models.hvvms,'GET': views.vmmgmt_get_view,' ...

  4. [Spark RDD_add_2] Spark RDD 分区补充内容

    [Spark & Hadoop 的分区] Spark 的分区是切片的个数,每个 RDD 都有自己的分区数. Hadoop 的分区指的是 Reduce 的个数,是 Map 过程中对 Key 进行 ...

  5. 基于CNN网络的汉字图像字体识别及其原理

    现代办公要将纸质文档转换为电子文档的需求越来越多,目前针对这种应用场景的系统为OCR系统,也就是光学字符识别系统,例如对于古老出版物的数字化.但是目前OCR系统主要针对文字的识别上,对于出版物的版面以 ...

  6. Beta阶段第三次冲刺

    Beta阶段第三次冲刺 严格按照Git标准来,组员有上传Git的才有贡献分没有的为0 代码签入图 1.part1 -站立式会议照片 2.part2 -项目燃尽图 3.part3 -项目进展 1.正在进 ...

  7. (转)python3 urllib.request.urlopen() 错误UnicodeEncodeError: 'ascii' codec can't encode characters

    代码内容: url = 'https://movie.douban.com/j/search_subjects?type=movie'+ str(tag) + '&sort=recommend ...

  8. 为什么Github要把代码合并请求称为pull request而不是push request?

    问题: 我的理解是:我做了一些修改,我请求把我的修改push到你的仓库,然后你review一下我的代码,如果没问题就接受请求merge,这样的话叫做push request岂不是更合适?因为这个操作是 ...

  9. 网络对抗技术作业一 P201421410029

    网络对抗技术作业一 14网安一区李政浩 201421410029 虚拟机 xp 虚拟机Windows xp的 ip地址 本机win10 IP xp虚拟机与主机ping Dir显示目录 Cd进入目录 A ...

  10. std::lexicographical_compare函数的使用

    按照词典序比较前者是否小于后者. 当序列<first1, last1>按照字典序比较小于后者序列<first2, last2>,则返回true.否则,返回false. 所谓字典 ...