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

时间:2009-12-03 18:02:38

标签: smo

我编写了一个使用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属性。

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

如果要检查的SQL Server上的“user”是SysAdmin,那么一切正常,以及我们将ConnectAsUser设置为true并使用我自己的凭据执行计划任务,这会授予我每个活动的SQL Server上的SysAdmin权限目录成员资格。

谢谢!

1 个答案:

答案 0 :(得分:1)

刚刚经历过这个。 从SQL Books Online,这是我发现的......

  

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

     

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

     

要删除作业,用户必须是成员   SQLAgentUserRole数据库角色   在MSDB数据库上,或者是所有者   工作,或成为   sysadmin固定服务器角色。