SQL 代理作业 - “运行方式”下拉列表为空
Posted
技术标签:
【中文标题】SQL 代理作业 - “运行方式”下拉列表为空【英文标题】:SQL Agent Job - "Run As" drop down list is empty 【发布时间】:2012-08-20 04:30:15 【问题描述】:当我尝试设置 SQL 代理作业时,为什么“运行方式”下拉列表总是为空?我正在尝试设置一些 SQL 代理作业以使用代理帐户运行。我是 SQLAgentUserRole、SQLAgentReaderRole 和 SQLAgentOperatorRole 的成员。当我尝试向作业添加步骤时,我选择了 SQL Integration Services 包,而运行方式下拉列表为空。
任何系统管理员都可以查看代理。我不应该能够将代理用作 SQLAgentUserRole、SQLAgentReaderRole 和 SQLAgentOperatorRole 的成员吗?我在这里错过了什么?
(代理帐户对子系统有效:SQL 集成服务包,这是 SQL Server 2008 R2)
编辑-
MSDN:“这些数据库角色(SQLAgentUserRole、SQLAgentReaderRole 和 SQLAgentOperatorRole)的成员可以查看和执行他们拥有的作业,并创建作为现有代理帐户运行的作业步骤。”而关于固定服务器角色的另一篇文章提到可以向代理授予访问权限,但没有提到如何做到这一点:MSDN。
【问题讨论】:
【参考方案1】:首先创建凭据,然后您将能够在代理级别下添加它。 完成此操作后,您可以从 sql 服务代理更改为凭据。
【讨论】:
【参考方案2】:-
编辑作业步骤时 - 切换到左侧的“高级”标签,不要使用主页上的下拉菜单。
确保用户被授予作业数据库中的角色,即使他是“系统管理员”
(屏幕截图适用于 SSMS 17)
【讨论】:
在 SQL Server Management Studio 18(2019) 中,高级下没有run as
。
@Emaborsa "Run as" 存在(当前使用 SSMS v18.4)。仅当该步骤是 T-SQL 步骤时才可见 - 并且可能仅当作业所有者是系统管理员时才可见。有关详细信息,请参阅 sp_add_jobstep 文档。
如果 OP 将 Run as
值保留为空并且这是一个 ssis 包步骤,会发生什么情况?假设作业创建者和作业所有者不是系统管理员的成员,作业会在代理服务帐户的上下文中运行吗?或者作业不会运行?【参考方案3】:
我找到了答案。非系统管理员用户必须有权访问明确授予其角色或用户名的代理帐户:
为非系统管理员授予对代理帐户的访问权限
-
在对象资源管理器中,展开服务器。
扩展 SQL Server 代理。
展开代理,展开代理的子系统节点,右键单击要修改的代理,然后单击属性。
在“常规”页面上,您可以更改代理帐户名称、凭据或它使用的子系统。在 Principals 页面上,您可以添加或删除登录名或角色以授予或删除对代理帐户的访问权限。
http://msdn.microsoft.com/en-us/library/ms187890(v=sql.100).aspx
【讨论】:
从sqlservercentral.com/Forums/1349715/…复制粘贴我需要扩展哪个“子系统”?我只有“代理”下的空文件夹 @Alex 取决于您运行作业的方式,例如,如果您使用 sqlcmd 运行,您将选择“操作系统”【参考方案4】:不,你不应该。您刚才提到的角色的成员只能创建作为自己运行的作业,因为它们是非管理角色。如果您想使用另一个用户运行作业,则需要访问代理帐户。如果我没记错的话,唯一有权创建代理帐户的组是 sysadmin,因此您需要一个管理员来为您执行此操作。
sysadmin 角色的成员有权创建作业步骤, 不指定代理,而是作为 SQL Server 代理运行 服务帐户,即用于启动 SQL Server 的帐户 代理。
【讨论】:
感谢您回答迭戈!我在我的问题中粘贴了来自 MSDN 的引用。引用说即使我不是系统管理员,我也应该能够使用代理帐户运行作业。你说这不是真的吗? 我要求我的管理员在代理属性的主体页面上明确授予对代理的访问权限。我们会看看它是否有效。 它有效。您可以添加对代理帐户的访问权限。您必须在主体页面上明确授予对角色或用户名的访问权限。 对于 ssis 作业步骤,如果我不是 sysadmin 用户,假设我将Run as
留空,那么作业步骤会在代理服务帐户的上下文中运行吗?以上是关于SQL 代理作业 - “运行方式”下拉列表为空的主要内容,如果未能解决你的问题,请参考以下文章