我编写了一个使用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权限目录成员资格。
谢谢!
答案 0 :(得分:1)
刚刚经历过这个。 从SQL Books Online,这是我发现的......
获取或设置Job对象属性, 用户必须是该成员 SQLAgentUserRole上的数据库角色 MSDB数据库,或者是所有者 工作,或成为系统管理员的成员 固定服务器角色。
要创建作业,用户必须是a SQLAgentUserRole的成员, SQLAgentReaderRole,和 SQLAgentOperatorRole数据库角色 MSDB数据库,或者是其成员 sysadmin固定服务器角色。
要删除作业,用户必须是成员 SQLAgentUserRole数据库角色 在MSDB数据库上,或者是所有者 工作,或成为 sysadmin固定服务器角色。