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

Setting Up Your SQL Server Agent Correctly

Security6:授予权限的思路和一般步骤的更多相关文章

  1. 使用 fixed role 授予权限

    今天下午,Leader 发mail给我,要求授予某个User对数据库只读的权限. Step1,在SQL Server中为该用户创建一个Login和User,在创建User时,建立Login 和 Use ...

  2. oracle创建用户、授予权限及删除用户

    创建用户   oracle对表空间 USERS 无权限 alter user 用户名 quota unlimited on users;   //创建临时表空间 create temporary ta ...

  3. 使用MySQL命令行新建用户并授予权限的方法

    MySQL命令行能否实现新建用户呢?答案无疑是肯定的.而且在使用使用MySQL命令行新建用户后,还可以为用户授予权限. 首先要声明一下:一般情况下,修改MySQL密码,授权,是需要有mysql里的ro ...

  4. Oracle_创建用户_授予权限

    Oracle_创建用户_授予权限 --创建用户,需要足够的权限  create create user hzf identified by hzf;    --给用户bjsxt分配权限  grant ...

  5. vue项目实践-前后端分离关于权限的思路

    前后端分离后权限的思路 最近看到许多关于权限的思路,但好像都是使用动态加载路由的方式,现在也分享下我在项目中使用的解决方案. 前后端分离关于权限的处理每个人都不一样,根据项目选择制定合适的方案就好 我 ...

  6. centos下mysql授予权限提示ERROR 1133 (42000): Can't find any matching row in the user table

    错误: 给mysql对应的用户授予权限的时候提示报错: 解决方法: 后面才知道原来是同事这边新增了用户没有flush grant all privileges on *.* to 'user'@'%' ...

  7. Security5:授予权限

    SQL Server授予用户访问对象的权限,通常的模式是:Grants permissions on a securable to a principal(user or login),也就是说,授予 ...

  8. RBAC角色权限设计思路

    1 设计思路 为了设计一套具有较强可扩展性的用户认证管理,需要建立用户.角色和权限等数据库表,并且建立之间的关系,具体实现如下. 1.1 用户 用户仅仅是纯粹的用户,用来记录用户相关信息,如用户名.密 ...

  9. oracle创建新用户并授予权限

    1.同时按下WIN键+R键打开“运行”,输入cmd,回车进入命令提示符 2.输入“sqlplus”后按下回车键,提示输入用户名,输入“sys as sysdba”,按下回车,输入口令,即四-13中设置 ...

随机推荐

  1. iOS SQLite3的使用

    1.创建可修改的数据库文件 //应用包内的内容是不可写的,所以需要把应用包内的数据库拷贝一个副本到资源路径去 - (void)createEditableDatabase{ BOOL success; ...

  2. git 开发merge rebase 记录

    git status git lg git add src/ git commit -m "restful api and portal" //先commit到自己的本地branc ...

  3. unison+inotify-tools触发式双向自动同步

    双向实时数据同步部署 首先添加服务器ssh信任,即免秘钥登陆 Web1:192.168.10.36 Web2:192.168.10.37 分别在web1和web2上执行以下命令 mkdir ~/.ss ...

  4. [翻译svg教程]svg中矩形元素 rect

    svg 元素<rect> 是一个矩形元素,用这个元素,可以你可以绘制矩形,设置矩形宽高,边框的宽度颜色,矩形的填充颜色,是否用圆角等 rect 示例 <svg xmlns=" ...

  5. Linux系统编程之IO_缓冲和非缓冲

    下面是一段类似日志记录的代码,已获取通讯的报文内容和当时的环境参数内容,就是创建一个文件,使用标准IO的fopen.fprintf进行输出记录.但是在调试中,刚开始我就傻眼了,文件创建成功了,但是实时 ...

  6. ceil 模块

    # 有时需要得到一个最小的整数,而这个数只能比自己大或相等,不能小于自己 #如: 2.1 我们需要得到的最小整数为3,即使后一位只有很小的一部分,一般用于分页 from math import cei ...

  7. 使用HttpClient来异步发送POST请求并解析GZIP回应

    .NET 4.5(C#): 使用HttpClient来异步发送POST请求并解析GZIP回应 在新的C# 5.0和.NET 4.5环境下,微软为C#加入了async/await,同时还加入新的Syst ...

  8. 通读AFN①--从创建manager到数据解析完毕

    流程梳理 今天开始会写几篇关于AFN源码解读的一些Blog,首先要梳理一下AFN的整体结构(主要是讨论2.x版本的Session访问模块): 我们先看看我们最常用的一段代码: AFHTTPSessio ...

  9. 利用ajax的方式来提交数据到后台数据库及交互功能

    怎么样用ajax来提交数据到后台数据库,并完成交互呢????? 一.当我们在验证表单的时候,为了阻止把错误的也发送到服务器,我们通常这样设置:     $(function(){       var ...

  10. 【翻译】Express web应用开发 第一章

    本章节是一个对初学者友好的Express介绍.你将学习到Express的基础知识.核心概念和实现一个Express应用的组成部分.现阶段我们不需要做太多的编码,本章节会让你熟悉和习惯Express,为 ...