SQL Server代理(10/12):使用代理賬號運行作業

来源:http://www.cnblogs.com/woodytu/archive/2016/02/23/5194262.html
-Advertisement-
Play Games

SQL Server代理是所有實時資料庫的核心。代理有很多不明顯的用法,因此系統的知識,對於開發人員還是DBA都是有用的。這系列文章會通俗介紹它的很多用法。 在這一系列的上一篇,你查看了msdb庫下用於授權訪問SQL Server代理的安全形色。這些角色包括SQLAgentUserRole、SQLA


SQL Server代理是所有實時資料庫的核心。代理有很多不明顯的用法,因此系統的知識,對於開發人員還是DBA都是有用的。這系列文章會通俗介紹它的很多用法。


在這一系列的上一篇,你查看了msdb庫下用於授權訪問SQL Server代理的安全形色。這些角色包括SQLAgentUserRole、SQLAgentReaderRole和 SQLAgentOperatorRole。每個角色授予用戶一定的許可權來使用SQL Server代理,而不必是sysadmin伺服器角色的成員。為完全管理控制SQL Server代理,你仍然需要sysadmin角色的成員。此外,你回顧了SQL Server代理服務帳戶的安全影響和選擇。在這一篇,你將學習SQL Server代理的代理帳戶的概念。代理帳戶允許作業步驟來模擬一個特定的Windows安全帳戶為作業步驟執行操作。這通常是在作業所有者的安全憑據不 適用執行操作時應用。

代理帳戶是什麼

正如上面提到的,一個代理帳戶是一組存儲在Windows的安全憑據。這些憑據可以作為作業的安全上下文。代理帳戶可由一個或多個符合條件的子系統使用。

可用代理帳戶的子系統

並不是所有的子系統都可以使用代理帳戶。可以使用代理帳戶的子系統包括:

  • ActiveX 腳本
  • 操作系統(CmdExec)
  • 複製系列任務
  • SQL Server Analysis Services 命令(XML/A)
  • SQL Server Analysis Services 查詢(MDX)
  • SQL Server Integration Services 包
  • PowerShell

上面沒有Transact-SQL腳本(T-SQL)子系統。T-SQL作業步驟通常運行於作業所有者的安全上下文,而且SSMS中不能改變。你可以手動配 置作業步驟,使用sp_add_jobstep系統存儲過程,通過database_user_name參數來模擬一個資料庫用戶,當然你需要安全許可權來 模擬資料庫用戶這樣做。

你也會註意到複製子系統組合為一體,即使有幾個不同的子系統處理複製。理論上你可以使用代理帳戶,但那超出這系列範圍的高級配置。
當 你創建一個作業步驟,如圖1所示(打開作業選擇步驟頁面,然後點擊新建…按鈕,選擇一個支持代理帳戶的子系統如PowerShell。你會看到一個 可以模擬支持作業步驟的賬戶列表。如果你沒有創建任何代理帳戶憑據,列表看起來應該插圖1所示,僅有SQL Server代理安全帳戶。


插圖1:為作業步驟選擇代理帳戶

代理帳戶的安全考慮

為了一個代理帳戶的正確運行,該帳戶必須具有“作為批處理作業登錄”(seBatchLogonRight)許可權,通過Windows管理員分配給它(在本 地安全策略->本地策略->用戶許可權分配)。沒有特權的SQL Server代理服務將無法模擬帳戶來運行作業步驟。還需要註意的是,代理賬戶不是自動能訪問你的SQL Server。例如,你想使用一個CmdExec或PowerShell的作業步驟重新登錄到SQL Server,代理帳戶必須被顯式授予登錄回你的SQL Server(或者繼承訪問Windows組)。

創建代理帳戶

你可以使用Transact-SQL或SSMS創建一個代理帳戶。使用Transact-SQL,使用系統存儲過程sp_add_proxy

1 EXEC sp_add_proxy
2     [ @proxy_name = ] 'proxy_name' ,
3     [ @enabled = ] is_enabled ,
4     [ @description = ] 'description' ,
5         [ @credential_name = ] 'credential_name' ,
6     [ @credential_id = ] credential_id ,
7     [ @proxy_id = ] id OUTPUT

保留proxy_name空白,保證代理與憑據相同的名字。憑據名稱應該來自安全憑據(使用CREATE CREDENTIAL資料庫定義語句創建)。
例如,創建一個[Proxy1]代理帳戶,密碼“Password1”(即一個帳戶在你的本地SQL Server機器創建),你可以運行代碼1,替換成你的環境中有效的域、身份和密碼。

1 USE MSDB;
2 GO
3 CREATE CREDENTIAL [PC201602202041\ProxyDemo] with IDENTITY = 'PC201602202041\ProxyDemo'
4 , SECRET = 'Password1';
5 
6 Declare @rc int=0;
7 
8 EXEC sp_add_proxy [PC201602202041\ProxyDemo],1,'This is an example proxy account',
9 [PC201602202041\ProxyDemo], NULL,@rc;

代碼1: 創建憑據和代理帳戶
值得註意的是,目前你已經創建一個代理帳戶,但它不與任何特定的子系統關聯。如果你展開代理->未分配的代理,你會看到剛剛創建的代理帳戶,如插圖2所示。


插圖2: SSMS下未分配的代理帳戶
請註意,這裡使用SSMS創建更容易,但仍然有兩步過程。你必須先創建一個憑據(安全性->憑據,新建憑據,打開新建憑據對話框)。在這個例子中,使用Cred1作為帳號,用相同的密碼,如插圖3所示。


插圖3: SSMS下創建憑據
單擊“確定”,然後導航到代理文件夾,並右鍵單擊任何代理子系統(或代理文件夾本身),新建代理。彈出新建代理帳戶,鍵入Proxy1名稱,選擇相匹配的憑 據,輸入一個描述,如果需要選擇一個作業子系統(如插圖4所示)。如果沒有選擇子系統,代理帳戶將出現在未分配的代理下(類似用語句創建的代理)。


插圖4:SSMS下創建代理帳戶
最後一步是將代理帳戶和子系統關聯,它是通過系統存儲過程sp_grant_proxy_to_subsystem實現的。在前面的例子,為了將代理帳戶[Proxy1]分配給PowerShell子系統,你可以運行下麵代碼:

EXEC sp_grant_proxy_to_subsystem @proxy_name=N'Proxy1', @subsystem_id=12

子系統的subsystem_id可以在MSDN文檔查到https://msdn.microsoft.com/zh-cn/library/ms186760.aspx

授權代理憑據

你可能已經註意到,在新建代理帳戶對話框有一個主體頁簽。預設情況下,sysadmin伺服器角色的成員有代理資格,但這不適用於其他人。如果你想有一個非 管理員用戶訪問代理憑據(這是很有可能的,否則為什麼要創造它們),那麼你需要授予明確的訪問給每一個你想使用代理的登錄。
你可以使用系統存儲過 程sp_grant_login_to_proxy 來實現,或者SSMS。打開PowerShell代理文件夾下的Proxy1代理帳戶,轉到主體頁簽。點擊添加(如圖10.5),你就可以關聯一個或多個 安全主體(登錄)和你的代理帳戶。一旦這樣操作後,任何主體擁有的作業可以使用這個代理帳戶。註意還有第三個頁簽,引用,這裡會顯示出哪個作業步驟使用了 這個代理帳戶,你可以直接修改或刪除代理。

圖10.5 關聯代理帳戶和安全主體(SQL登錄)

使用代理帳戶

現在就可以修改作業步驟來使用代理帳戶。如果你是遵循本系列的文章,你應該有一個叫做ShellOut的作業,它的第二步s2是PowerShell子系 統。打開這個作業步驟,更改運行身份為Proxy1(如圖10.6所示)。如果你沒有這個作業步驟,你應該創建一個這樣的步驟。

插圖6:使用代理帳戶更新作業步驟
現在再次運行作業,這樣就是使用代理帳戶而不是SQL Server服務帳戶來執行作業步驟的。記住你的代理帳戶必須能登錄到你的資料庫實例,因此確保你已經為代理帳戶創建了一個資料庫登錄名。

修改和刪除代理

使用SSMS來修改或刪除代理是直觀的(打開代理帳戶對話框更改),但為了完整對應的Transact-SQL語句是:

exec msdb.dbo.sp_delete_proxy @proxy_name = 'proxy1'

下篇預告

SQL Server代理的代理帳戶允許非sysadmin用戶模擬其他Windows安全憑據有特權執行關鍵任務的能力。當結合子系統如CmdExec和PowerShell,他們允許比sysadmin低特權級被授予SQL代理作業的所有者。
在我們的下一篇,我們將看看維護計劃作業,以及他們與你自己創建的作業的區別。

原文地址:http://www.sqlservercentral.com/articles/Stairway+Series/72461/

參考文章:http://www.cnblogs.com/Uest/p/4562219.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.獲取HOME鍵方向 視圖控制器本身能檢測到屏幕的旋轉,如果要處理屏幕旋轉,需要重寫方法 supportedInterfaceOrientations(設置設備支持旋轉的方法, 如果不添加,視圖控制器將無法檢測到屏幕的旋轉) 旋轉後鍵盤收回 - (void)viewWillTransitionTo
  • 使用AS創建ADIL文件時AS會在main文件夾下給我們生成一個aidl文件夾和一個相同包名的包,通常我們會把所有和ADIL相關的類或文件放在這個包下,但是如果存在自定義的類時,程式編譯時無法通過,提示找不到自定義的包。解決辦法如下,在啟動Module的build.gradle中加入如下代碼: so
  • 1、在iTunes Connect 上面提交審核後,點擊下麵鏈接申請加急審核 鏈接:https://developer.apple.com/appstore/contact/appreviewteam/index.html 2、進去預設是:"request an expedited app revi
  • 兩種方法用來隱藏tabBar 1.在本頁面隱藏 #pragma mark - 隱藏tabBar - (void)viewWillAppear:(BOOL)animated{ self.tabBarController.tabBar.hidden = YES; } - (void)viewWillDi
  • 前言: 這裡算是比較實用的一篇了吧,進行了網路安全部署 準備: bmob賬號,JSPatch,公鑰,私鑰,MD5加密,AFNetWorking下載文件 #import <CommonCrypto/CommonDigest.h> #import <BmobSDK/Bmob.h> #import "AF
  • 今天開始嘗試用MYSQL,裝的時候碰見了些常見的問題,在這裡把它曬出來,希望它對自己和行友們都有些幫助: 錯誤1:執行配置的第二步:系統提示:“Configuration file tmeplate E:\網站\mysql\my-template.ini could not be processed
  • 修改oracle 10g的字元集 修改資料庫字元集為:ZHS16GBK查看伺服器端字元集 SQL > select * from V$NLS_PARAMETERS; 修改: $sqlplus /nolog SQL>conn / as sysdba 若此時資料庫伺服器已啟動,則先執行 SHUTDOWN
  • 1.聯合結果集 (1) 簡單的結果集聯合 select FNumber,FName,Fage from T_Employee\ union select FidCardNumber,FName,Fage from T_Employee (2) 查詢的基本原則是:每個結果集必須有相同的列數,沒個結果集
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...