在SQL Server中,憑證(Credential)用於把Windows用戶的身份驗證信息(在Windows環境下,是Windows 用戶名和密碼)存儲在SQL Server實例中,並把該身份驗證信息傳遞給Login和Proxy,使其有權限訪問SQL Server實例以外的資源。在SQL Server安全體系中,Login用於登錄SQL Server實例,用戶經過Login登錄到SQL Server實例,在權限規定的範圍內,訪問SQL Server實例內部的資源,也就是說,Login權限的做用域是SQL Server 實例;而對於SQL Server實例外部的資源,訪問權限是由操做系統Windows負責管控的,操做系統不識別SQL Server內部的Login,只識別Windows 用戶(User),所以,SQL Server在訪問實例外部的資源時,須要模擬Windows用戶的身份來訪問操做系統管理的資源。sql
因爲憑證(Credential)包含訪問 SQL Server 實例以外的資源所須要的身份驗證信息,這使得Login經過憑證,有權限訪問SQL Server實例以外的系統資源。一個憑證能夠映射多個Login,一個Login只能映射到一個憑證,經過系統視圖: sys.credentials 查看憑證信息。用戶能夠建立自定義的憑證,SQL Server在安裝時也會自動建立系統憑證,並關聯到特定的端點(EndPoint),系統憑證的名字以##打頭。windows
一,憑證和Login安全
雖然Login有權限登錄SQL Server 實例,可是不具備訪問SQL Server 實例以外的資源的權限。而憑證用於訪問SQL Server 實例之外的資源,在建立Login時,把Login和憑證關聯,Login就能經過憑證中存儲的Windows帳戶訪問SQL Server 實例以外的資源。若是以SQL Server 驗證方式建立Login,並將該Login映射到憑證,那麼該Login可以經過存儲在憑證中的身份驗證信息訪問到 SQL Server 實例外部的資源。服務器
1,建立憑證dom
Identity 指定憑證包含的Windows用戶名,Secret指定Windows用戶的密碼,使用Identity參數指定的Windows用戶鏈接SQL Server實例的外部資源。spa
CREATE CREDENTIAL credential_name WITH IDENTITY = 'windows_user', SECRET = 'password'
2,將Login映射到憑證操作系統
一個Login只能映射到一個憑證,多個Login可以映射到同一個憑證。代理
CREATE CREDENTIAL AlterEgo WITH IDENTITY = 'Mary5', SECRET = '<EnterStrongPasswordHere>'; ALTER LOGIN Login1 WITH CREDENTIAL = AlterEgo; GO
3,使用TSQL命令修改憑證的密碼code
ALTER CREDENTIAL credential_name WITH IDENTITY = N'domain\username', SECRET = N'new_password'
固然,也能經過SSMS的UI修改憑證的密碼,打開Server級別的Security,修改Credentials目錄下的憑證:server
二,憑證和Proxy
SQL Server Agent在執行Job Step時,使用兩種類型的權限,分別是Job Owner和代理(Proxy),Proxy包含憑證(Credential),定義Job Step的安全上下文(Security Context),在Job Step執行以前,Agent模擬憑證指定的Windows User的權限,在該權限範圍(Security Context)內執行Job Step,使Job Step有權限訪問SQL Server 實例以外的資源。
1,使用Job Owner的權限來執行Job
當Job Step的類型是Transact-SQL Script時,該類型的Step用於執行TSQL腳本,訪問的資源都是SQL Server實例內部的,所以,不須要爲該Job Step指定Agent Proxy,Job Step以Job Owner的權限上下文執行腳本代碼。
2,使用Proxy來執行Job Step
除了執行TSQL腳本的Job Step以外,其餘Job Step必須使用Proxy,這覺得着,Job Step必須運行在Proxy定義的安全上下文中,在建立Job Step時,必須在Run as 屬性中指定Proxy。
在建立Proxy時,必須填寫Proxy Name,Credential name和選擇Agent子系統(Subsystem),Proxy的Description是可選的。
3,授予Principal(Login, server role)訪問Proxy的權限
在SQL Server中,不是全部的login都有權限訪問Proxy。打開 New Proxy Account Wizard,在Principals Tab中,授予Principal(Login, server role)訪問Proxy的權限。只有被授予訪問Proxy權限的Principal,才能在Job Step中使用Proxy。默認狀況下,固定服務器角色 sysadmin的成員有權限訪問實例中的全部Proxy。
若是Login有權限訪問Proxy,或者Login屬於有權限訪問Proxy的服務器角色(Server Role),那麼用戶可以在Job Step中使用Proxy。
參考文檔:
Creating SQL Server Agent Proxies