您好,欢迎访问一九零五行业门户网

在SQL Server Management Studio中可以运行作业但是用T-SQL运行

问题: 在sql server management studio中可以运行作业但是用t-sql运行则失败,反之亦然. 分析: 这种情况多数为执行时上下文(context)安全性问题。在ssms中执行的时候,t-sql语句是在当前登录名下运行的。但是作业在sql server agent中是以sql server agen
问题: 在sql server management studio中可以运行作业但是用t-sql运行则失败,反之亦然.
分析: 这种情况多数为执行时上下文(context)安全性问题。在ssms中执行的时候,t-sql语句是在当前登录名下运行的。但是作业在sql server agent中是以sql server agent 服务(sql server agent service account)运行的,如果sql server agent的账号与在ssms中执行t-sql的账号不一样或者权限不同的话,作业就会失败。
本人的实践是使用高权限的账号来运行sql server agent,并且具有独立账号,同时密码不能过期,否则运行一段时间就会运行不了。但是基于“最小安全性原则”,一般不建议使用过高权限。同时,不能使用sql server agent 代理来执行作业,因为t-sql作业步骤不使用任何代理。对于t-sql作业步骤,默认是以作业拥有者的安全上下文运行。
解决方法: 方法1:把作业拥有者的权限开放到足够大,但是不要使用sysadmin。
方法2:在t-sql作业中使用run as user提示来执行t-sql作业。这样不需要更改原有的权限。但是此过程确保你有足够的权限赋予run as user。如图:
方法3:此方法主要是脚本化方法2,在t-sql的开头加上:
execute as user='xxxx'    --上面语句赋予下面执行的脚本xxxx登录用户的权限。     select * from humanresources.department    --运行完后回收权限:     revert;   最后可以通过sqlserver profiler来监控执行作业的是什么账号
其它类似信息

推荐信息