使用 SQL SMO 读取 SQL 作业的最低权限

发布于 2024-08-13 13:09:05 字数 997 浏览 5 评论 0原文

我编写了一个应用程序来使用 SQL SMO 查找所有 SQL Server、数据库、作业和作业结果。该应用程序是使用本地服务帐户通过计划任务执行的。此服务帐户仅位于应用程序服务器本地,并且不存在于任何要检查的 SQL Server 中。 当使用对系统表具有 dbReader 权限的用户连接到服务器时,我在获取有关作业和作业结果的信息时遇到问题。如果我们将用户设置为服务器上的 sysadmin,则一切正常。

我的问题是:本地 SQL Server 用户需要拥有哪些最低权限才能连接到服务器并使用 SQL SMO API 检查作业/作业结果?

我通过执行以下操作连接到每个 SQL Server:

var conn = new ServerConnection
      {
       LoginSecure = false,
       ApplicationName = "SQL Inspector",
       ServerInstance = serverInstanceName,
       ConnectAsUser = false,
       Login = user,
       Password = password
      };
var smoServer = new Server (conn);

我通过读取 smoServer.JobServer.Jobs 来读取作业,并读取每个作业的 JobSteps 属性。

变量 server 的类型为 Microsoft.SqlServer.Management.Smo.Server。 用户/密码是在每个要检查的 SQL Server 中找到的用户的用户/密码。

如果“用户”是要检查的 SQL Server 上的系统管理员,则一切正常,并且如果我们将 ConnectAsUser 设置为 true 并使用我自己的凭据执行计划任务,这将根据我的 Active Directory 成员身份授予我 SQL Server 上的系统管理员权限。

谢谢!

I wrote an application to use SQL SMO to find all SQL Servers, databases, jobs and job outcomes. This application is executed through a scheduled task using a local service account. This service account is local to the application server only and is not present in any SQL Server to be inspected.
I am having problems getting information on job and job outcomes when connecting to the servers using a user with dbReader rights on system tables. If we set the user to be sysadmin on the server it all works fine.

My question to you is: What are the minimum privileges a local SQL Server user needs to have in order to connect to the server and inspect jobs/job outcomes using the SQL SMO API?

I connect to each SQL Server by doing the following:

var conn = new ServerConnection
      {
       LoginSecure = false,
       ApplicationName = "SQL Inspector",
       ServerInstance = serverInstanceName,
       ConnectAsUser = false,
       Login = user,
       Password = password
      };
var smoServer = new Server (conn);

I read the jobs by reading smoServer.JobServer.Jobs and read the JobSteps property on each of these jobs.

The variable server is of type Microsoft.SqlServer.Management.Smo.Server.
user/password are of the user found in each SQL Server to be inspected.

If "user" is SysAdmin on the SQL Server to be inspected all works ok, as well as if we set ConnectAsUser to true and execute the scheduled task using my own credentials, which grants me SysAdmin privileges on SQL Server per my Active Directory membership.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

季末如歌 2024-08-20 13:09:05

我自己刚刚经历过这个。
从 SQL Books Online 中,我发现了以下内容......

要获取或设置作业对象属性,
用户必须是该组织的成员
SQLAgentUserRole 上的数据库角色
MSDB 数据库,或者是该数据库的所有者
工作,或者成为系统管理员的成员
固定服务器角色。

要创建作业,用户必须是
SQLAgentUserRole 的成员,
SQLAgentReaderRole,以及
SQLAgentOperatorRole 数据库角色
MSDB 数据库,或者是以下组织的成员
sysadmin 固定服务器角色。

要删除职位,用户必须是会员
SQLAgentUserRole 数据库角色的
在 MSDB 数据库上,或者是所有者
或成为该工作的成员
系统管理员固定服务器角色。

Just been through this myself.
From SQL Books Online, here's what I found out...

To get or set Job object properties,
users must be a member of the
SQLAgentUserRole database role on the
MSDB database, or be the owner of the
job, or be a member of the sysadmin
fixed server role.

To create a job, users must be a
member of the SQLAgentUserRole,
SQLAgentReaderRole, and
SQLAgentOperatorRole database roles on
the MSDB database, or be a member of
the sysadmin fixed server role.

To drop a job, users must be a member
of the SQLAgentUserRole database role
on the MSDB database, or be the owner
of the job, or be a member of the
sysadmin fixed server role.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文