AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 173803
Accepted
SQLPRODDBA
SQLPRODDBA
Asked: 2017-05-18 03:17:35 +0800 CST2017-05-18 03:17:35 +0800 CST 2017-05-18 03:17:35 +0800 CST

SQL Server 代理工作问题

  • 772

设想:

我试图了解一个奇怪的情况。我有一个 SQL Server 2012,它使用相同的域帐户配置了数据库引擎和 SQL Server 代理。该域帐户不会添加到 SQL Server 登录。检查使用xp_logininfo 'Domain account', 'all'并没有得到任何输出。我有一个更新数据库中的表的 SQL 服务器作业。那项工作运行良好。到目前为止,我的印象是必须在 SQL Server 登录中定义 SQL Server 代理帐户才能运行作业。但是,在这种情况下,作业运行良好,即使 SQL Server 代理登录未在 SQL Server 登录中定义。所以试图理解它是如何可能的。此外,由于作业更新表不知道它使用哪个用户/登录来更新表。作为测试,我将工作所有者更改为“sa”和非“sa”登录,在这两种情况下工作都可以正常工作。

所以我的问题是:

  1. 是否必须在 SQL Server 登录中定义 SQL Server 代理帐户才能运行作业?如果是,那么即使 SQL Server 登录名中没有 SQL Server 代理帐户的登录名,我的更新作业为何仍在运行。如果不是,它在内部是如何工作的?就像它用于启动 SQL 作业的帐户一样。

  2. 我的更新作业使用什么用户/登录名来更新表?

sql-server sql-server-2012
  • 2 2 个回答
  • 2224 Views

2 个回答

  • Voted
  1. Best Answer
    SqlWorldWide
    2017-05-18T04:10:37+08:002017-05-18T04:10:37+08:00

    1. 是否必须在 SQL Server 登录中定义 SQL Server 代理帐户才能运行作业?

    看到这个和这个。

    SQL Server 代理作为名为 NT SERVICE\SQLSERVERAGENT 的 Windows 服务运行。NT SERVICE\SQLSERVERAGENT 登录是作为 SQL Server 代理的 Windows 进程连接到数据库引擎以读取 msdb 数据库以找出它应该做什么的方式;然后去做。这两个登录名都是 sysadmin 固定服务器角色的成员,因此他们可以在数据库引擎中执行任何操作。他们需要保持这种状态。

    至于您用来运行服务的帐户,这很复杂,并且在每个版本的 SQL Server 中都发生了变化。简短的回答是,当进程试图到达当前 Windows 环境之外时,将使用您指定的帐户。但是在计算机中,授予域用户、服务和 Windows 组 SQLServerMSSQLUser$computername$MSSQLSERVER 的权限是混合的。

    操作系统中有代理帐户默认获得的权限。详情在这里。

    根据网上书籍:

    运行 SQL Server 代理服务的帐户必须是以下 SQL Server 角色的成员:

    该帐户必须是 sysadmin 固定服务器角色的成员。

    要使用多服务器作业处理,该帐户必须是主服务器上 msdb 数据库角色 TargetServersRole 的成员。

    在所有 Windows 版本中,作为服务登录的权限 (SeServiceLogonRight)

    但它不应该是本地管理组的成员。

    我们建议选择不是 Windows 管理员组成员的 Windows 用户帐户。但是,当 SQL Server 代理服务帐户不是本地管理员组的成员时,使用多服务器管理存在限制

    2. 我的更新作业使用什么用户/登录名来更新表?

    参考:https ://www.simple-talk.com/sql/database-administration/setting-up-your-sql-server-agent-correctly/

    作业所有权是 SQL Server 代理中的一个重要概念。SQL Server 代理根据拥有作业的用户角色设置作业执行的安全上下文。默认情况下,无论作业所有权如何,SQL Server 代理都会在 SQL Server 代理服务帐户下执行作业步骤,或者在代理帐户的上下文中执行作业步骤。

    此规则的例外是 T-SQL 作业步骤,它在作业所有者的安全上下文中执行。如果作业所有者是 sysadmin 角色的成员,则作业步骤将在 SQL Server 代理服务帐户的上下文中执行。

    • 3
  2. Md Haidar Ali Khan
    2017-05-18T04:04:20+08:002017-05-18T04:04:20+08:00

    是否必须在 SQL Server 登录中定义 SQL Server 代理帐户才能运行作业?

    服务启动帐户定义运行 SQL Server 代理的 Microsoft Windows 帐户及其网络权限。SQL Server 代理作为指定的用户帐户运行。您可以使用 SQL Server 配置管理器为 SQL Server 代理服务选择一个帐户,您可以在其中从以下选项中进行选择:

    内置帐户。您可以从以下内置 Windows 服务帐户列表中进行选择: 本地系统帐户。此帐户的名称是 NT AUTHORITY\System。这是一个功能强大的帐户,可以不受限制地访问所有本地系统资源。它是本地计算机上 Windows 管理员组的成员,因此是 SQL Server sysadmin 固定服务器角色的成员。

    此帐户。允许您指定运行 SQL Server 代理服务的 Windows 域帐户。我们建议选择不是 Windows 管理员组成员的 Windows 用户帐户。但是,当 SQL Server 代理服务帐户不是本地管理员组的成员时,使用多服务器管理会受到限制。

    注意:- 提供本地系统帐户选项只是为了向后兼容。本地系统帐户具有 SQL Server 代理不需要的权限。避免将 SQL Server 代理作为本地系统帐户运行。为提高安全性,请使用具有以下“Windows 域帐户权限”部分中列出的权限的 Windows 域帐户。

    我的更新作业使用什么用户/登录名来更新表?

    使用 management studio 连接 SQL Server 实例 右键单击​​该实例并选择

    “Reports”—“Standard Reports”—“Schema Changes History”
    

    我们获得所有数据库的架构更改报告,从中我们可以获取用于删除/删除数据库的用户帐户。

    如果您想了解有关删除/更新的表格信息的更多信息,那么您可以在此处fn_dump_dblog 查看未记录的信息。

    如需更多信息,请点击此处和此处

    • -1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve