在SQL Server Management Studio中可以運行作業但是用T-SQL運行則失敗

來源:互聯網
上載者:User
問題:

在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的開頭加上: [sql] view plaincopyprint?
  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來監控執行作業的是什麼帳號

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.