zoukankan      html  css  js  c++  java
  • 在SQL Server Management Studio中可以运行作业但是用TSQL运行则失败 (转载)

    问题:

    在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的开头加上:
    1. EXECUTE AS USER='xxxx'  
    2.  --上面语句赋予下面执行的脚本xxxx登录用户的权限。   
    3.  SELECT * FROM HumanResources.Department  
    4.  --运行完后回收权限:   
    5.  REVERT;  
    EXECUTE AS USER='xxxx'
     --上面语句赋予下面执行的脚本xxxx登录用户的权限。
     SELECT * FROM HumanResources.Department
     --运行完后回收权限:
     REVERT;

    最后可以通过SQLServer Profiler来监控执行作业的是什么账号
  • 相关阅读:
    P4396 [AHOI2013]作业 分块+莫队
    B1965 [Ahoi2005]SHUFFLE 洗牌 数论
    B1970 [Ahoi2005]Code 矿藏编码 暴力模拟
    B1968 [Ahoi2005]COMMON 约数研究 数论
    B1237 [SCOI2008]配对 贪心 + dp
    B1108 [POI2007]天然气管道Gaz 贪心
    B1734 [Usaco2005 feb]Aggressive cows 愤怒的牛 二分答案
    B1012 [JSOI2008]最大数maxnumber 分块||RMQ
    HAOI2007 反素数
    NOIP2009 Hankson的趣味题
  • 原文地址:https://www.cnblogs.com/qanholas/p/2802617.html
Copyright © 2011-2022 走看看