標籤:logs service admin 調度 最小 dba 固定 資源 ted
SQL Server Agent對象包括警報(Alert),操作員(Operator),Job,調度(Schedule)和代理(Proxy),SQL Server使用msdb系統資料庫管理Agent 對象的許可權,msdb內建三個固定資料庫角色,按照許可權從小到大的順序,依次是:SQLAgentUserRole、SQLAgentReaderRole 和SQLAgentOperatorRole。如果一個使用者不是這三個角色或sysadmin角色中的成員,那麼該使用者通過SSMS的Object Explorer看不到Agent節點。一個使用者必須是SQLAgent的角色或sysadmin角色的成員,才能使用SQL Server Agent。
另外,Agent的許可權,還跟代理(Proxy)的存取權限有關,代理是用來執行Job Step的,只有建立代理和登陸(Login)之間的映射,使用者建立(Own)的Job才能執行。
一,Agent固定資料庫角色
SQLAgentUserRole 角色被授予操作Agent的最小許可權的集合,其成員只能對其建立的本地Job和Job Schedule具有操作許可權,也就是有,該角色的成員對於Owner是自己的Job具有許可權,並且不能修改job的所有權(Ownership)。
SQLAgentUserRole 角色具有的許可權:
- 具有操作本地Job和Job Schedule的所有許可權,包括建立(Create)、刪除(Delete),修改(Modify),啟用(Enable)、禁用(Disable)、執行(Execute)、開始(Start)、停止(Stop)等,但是不能修改Job的所有權關係(Ownership);
- 查看Owned Jobs的執行日誌,但是不具有刪除曆史日誌的許可權;
- 查看可用的Operator列表;
- 查看可用的Proxy列表;
SQLAgentReaderRole 角色,除了具有Multiserver jobs的查看許可權之外,和SQLAgentUserRole角色的許可權相同;
SQLAgentOperatorRole 角色,除了具有查看警告(Alert)的列表和屬性的許可權之外,和SQLAgentReaderRole 角色的許可權相同;
SQLAgentUserRole、SQLAgentReaderRole 和SQLAgentOperatorRole 都對自己建立的Job具有操作許可權,都不能修改Job的所有權:
sysadmin 角色的成員,具有SQL Server Agent的全部許可權,能夠修改Job的所有權。
二,執行Job Step的許可權
在執行Job Step時,SQL Server Agent使用兩種類型的許可權,分別是Job Owner和代理(Proxy)。如果建立的Job Step是 Transact-SQL script (T-SQL) 類型,那麼使用Job Owner的許可權去執行TSQL指令碼;如果建立的Job Step是另外11種類型種的一種,那麼使用代理的許可權去執行Job Step。在Job Step執行之前,Agent類比憑證指定的Windows User的許可權,在該許可權範圍(Security Context)內執行Job Step,使Job Step有許可權訪問SQL Server 執行個體之外的資源。
代理(Proxy)使得Job Step在特定的安全上下文中執行,DBA需要建立代理,並為代理設定必須的許可權。
SQL Server Agent lets the database administrator run each job step in a security context that has only the permissions required to perform that job step, which is determined by a SQL Server Agent proxy. To set the permissions for a particular job step, you create a proxy that has the required permissions and then assign that proxy to the job step. A proxy can be specified for more than one job step. For job steps that require the same permissions, you use the same proxy.
1,建立代理
每一個Proxy都關聯一個憑證(Credential),憑證定義了執行Job Step的安全上下文(Security Context)。使用SSMS建立代理,在SQL Server Agent目錄下開啟建立代理賬戶(New Proxy Account)的嚮導,輸入建立的代理名稱和關聯的憑證名稱,從11個子系統(subsystem)列表中選擇“SQL Server Intergration Services Package”,該子系統用於執行SSIS的Package。
由於代理的許可權是由憑證決定的,因此,在建立代理時,為了有效管控執行Job Step的許可權,一般情況下,需要為代理(Proxy)建立專用的使用者賬戶,並未使用者授予必需的許可權,
Create dedicated user accounts specifically for proxies, and only use these proxy user accounts for running job steps.
Only grant the necessary permissions to proxy user accounts. Grant only those permissions actually required to run the job steps that are assigned to a given proxy account.
2,授予Login訪問代理的許可權
在SQL Server中,不是所有的login都有許可權訪問Proxy。為Proxy添加伺服器層級(Server-Level)的安全性主體(Login),授予其訪問Proxy的許可權,這樣,使用者就能夠引用Proxy去執行Job Step。
在Principals Tab中,授予Login,伺服器角色(server role)或msdb資料庫角色訪問Proxy的許可權。只有被授予訪問Proxy許可權的Principal,才能在Job Step中使用Proxy。預設情況下,固定伺服器角色 sysadmin的成員有許可權訪問執行個體中的所有Proxy。
3,引用代理
如果Login有許可權訪問Proxy,或者Login屬於有許可權訪問Proxy的伺服器角色(Server Role),那麼使用者能夠在Job Step中使用Proxy,例如,在建立Job Step,從Run as 列表種選擇可訪問的Proxy:
三,安全性群組(Security Group)
在Windows 域環境中,如果把Job的Owner設定為Security Group(SG),該組的成員無法訪問該Job,只有把Job的Owner設定為使用者的Windows 賬戶時,使用者才能操作Job。
參考文檔:
SQL Server Agent
Implement SQL Server Agent Security
SQL Server Agent Fixed Database Roles
Security7:管理SQL Server Agent的許可權