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. 简述JavaScript对象、数组对象与类数组对象

    问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...

  2. mysql数据库表的自增主键号不规律,重新排列

    mysql数据库表的自增主键ID乱了,需要重新排序. 原理:删除原有的自增ID,重新建立新的自增ID. 1.删除原有主键: ALTER TABLE `table_name` DROP `id`; 2. ...

  3. javascript基础知识

    1.javascript 表单验证,减轻服务器压力 制作网页特效 动态改变页面内容 基于对象和事件驱动的,具有安全性能的脚本语言 交互,脚本语言.解释性语言,边执行边解释 2.script标签 添加位 ...

  4. [转]Android Studio 里搭建自动化测试框架Robotium

    Android的自动化测试框架可选择的不多,后来选了Robotium(https://code.google.com/p/robotium/),它的语法及易用性挺像我们用在iOS里的KIF. 官方文档 ...

  5. VMware创建Linux虚拟机并安装CentOS(三)

    选择“创建自定义布局”手动给Linux指定系统分区.交换分区,鼠标单击“下一步”按钮继续. 首先创建交Swap分区,鼠标单击“创建”按钮,在弹出的“生成存储”对话框中,生成分区选择“标准分区”:鼠标单 ...

  6. json相关的一些用法

    一. json可以表示3种类型的值:   简单值 . 对象. 数组    表示对象时:>1. 没有变量的概念 ,所以不用申明变量                    >2. 没有末尾结束 ...

  7. dp入门--poj 1163数塔

                                                                                                        ...

  8. 前端-SEO

    SEO是 search Engine Optimization   (搜索引擎优化) SEO: ①白帽SEO(普通SEO做的优化) 网站标题.关键字.描述 网站内容优化 Robot.txt文件 网站地 ...

  9. Pyserial操作串口

    pySerial 介绍 封装了串口通讯模块,支持Linux.Windows.BSD(可能支持所有支持POSIX的操作系统),支持Jython(Java)和IconPython(.NET and Mon ...

  10. HDU1039-Easier Done Than Said?(字符串处理)

    一,题意: 判断三个条件 1:有元音字母 2:不能三个连续元音或辅音 3:不能连续两个相同的字母,除非ee或oo二,思路 写函数一个条件一个条件去判断 #include<iostream> ...