我想在用户(执行为)的安全上下文下开始执行步骤,但是当工作拥有者是不同于“以用户身份运行”的用户时,它将无法正常工作。
以用户XXXX的身份执行。对对象'sysschedules',数据库'msdb',模式'dbo'的SELECT权限被拒绝。 [SQLSTATE 42000](错误229)。步骤失败。
但是,即使为msdb对象授予选择权限,sysschedules,sysjobs,sysjobactivity也不起作用。甚至服务器sysadmin角色也不起作用。无法将事件添加到角色SQLAgentUserRole,SQLAgentReaderRole或/和SQLAgentOperatorRole中。还是一样的错误。
用户有什么最小权限/角色来执行t-sql步骤,其中作业由其他用户拥有?
execute as user = N'USERNAME' -- not working
select count(*) from msdb.dbo.sysschedules
用户是db_owner的成员。用户具有权限控制,请在dbo模式上选择...。
答案 0 :(得分:0)
当我想从msdb.dbo.sysschedules中选择但从数据库中选择时出现问题。用户也存在于数据库msdb上。通过添加选项TRUSTWORTHY Database property
解决了问题-现在可以在msdb中使用数据库中的同一用户。
整个问题都是基于过程msdb.dbo.sp_add_jobstep
参数@database_user_name
的-它不是登录名,而只有用户。