如何授予用户访问SQL作业的权限?

时间:2019-02-04 14:35:45

标签: sql-server

如何授予用户访问SQL作业的权限?

用户无权访问SQL代理,SQL作业以运行作业。

2 个答案:

答案 0 :(得分:1)

我会说Configure a User to Create and Manage SQL Server Agent Jobs中记录的是“好”,但是,“好”似乎很多;也许“感动”是一个更好的短语。但是,在您掌握了基本知识的情况下,它确实msdb中有一些数据库角色可用于授予用户/登录权限。

如果您的登录名中没有msdb中的用户,则需要创建一个用户:

CREATE USER [YourLogin} FOR LOGIN {YourLogin};

然后,您需要为他们提供正确的固定角色;这些SQLAgentOperatorRole,SQLAgentReaderRole和SQLAgentUserRole中有3个。这些在SQL Server Agent Fixed Database Roles中有更好的介绍。然后,您只需要使用相关的ALTER命令即可​​。例如:

ALTER ROLE SQLAgentReaderRole ADD MEMBER {YourLogin};

引用每个角色的相关权限:

SQL代理用户角色:

  

SQLAgentUserRole是已修复的SQL Server代理的最低特权   数据库角色。它仅对操作员,本地作业和   工作时间表。 SQLAgentUserRole的成员仅具有权限   当地工作和他们拥有的工作时间表。他们不能使用   多服务器作业(主服务器和目标服务器作业),它们不能   更改工作所有权以访问尚未存在的工作   拥有。 SQLAgentUserRole成员可以查看可用代理的列表   仅在SQL Server管理的“作业步骤属性”对话框中   工作室。 SQL Server Management Studio对象中只有Jobs节点   SQLAgentUserRole的成员可以看到资源管理器。

SQL代理读取器角色:

  

SQLAgentReaderRole将所有SQLAgentUserRole权限包括为   以及查看可用的多服务器作业列表的权限,   他们的财产和历史。此角色的成员还可以   查看所有可用工作和工作时间表及其列表   属性,而不仅仅是他们拥有的那些工作和工作时间表。   SQLAgentReaderRole成员不能更改作业所有权以获取访问权限   他们尚未拥有的工作。 SQL Server中只有Jobs节点   Management Studio对象资源管理器对   SQLAgentReaderRole。

SQL代理操作员角色:

  

SQLAgentOperatorRole是SQL Server代理中最特权的   固定的数据库角色。它包含以下所有权限   SQLAgentUserRole和SQLAgentReaderRole。此角色的成员还可以   查看操作员和代理的属性,并枚举可用   服务器上的代理和警报。

     

SQLAgentOperatorRole成员对本地作业具有其他权限   和时间表。他们可以执行,停止或启动所有本地作业,并且   他们可以删除服务器上任何本地作业的作业历史记录。他们   还可以在服务器上启用或禁用所有本地作业和计划。   要启用或禁用本地作业或计划,此角色的成员   必须使用存储过程sp_update_job和sp_update_schedule。   仅用于指定作业或计划名称的参数或   标识符和 @enabled 参数可以由成员指定   SQLAgentOperatorRole的名称。如果他们指定其他任何参数,   这些存储过程的执行失败。 SQLAgentOperatorRole   成员不能更改工作所有权以获取他们所访问的工作   还没有拥有。

     

SQL Server中的作业,警报,操作员和代理节点   Management Studio对象资源管理器对以下成员可见   SQLAgentOperatorRole。只有“错误日志”节点不可见   该角色的成员。

取决于用户需要执行的操作取决于用户需要的角色。您也可以根据需要为用户分配多个角色。这些角色都没有明确的DENY权限,因此不会阻止他们执行特定任务;他们只会让他们去做。

答案 1 :(得分:0)

授予用户msdb中SQL代理角色的权限,具体取决于您的要求。例如:SQLAgentOperatorRole

USE msdb
ALTER ROLE SQLAgentOperatorRole ADD MEMBER [yourUser]

Larnu在本主题中已经描述了可以使用的可能角色