Sql-Server

通過 SMSS 執行查詢/作業 - SQL 服務和 SQL 代理服務帳戶 (SQL Server)

  • June 6, 2020

如果在我使用 Windows 身份驗證登錄登錄會話時從 SQL Server Management Studio 執行命令(例如以下命令),我了解對路徑“C:\SQL2019\BookStore.bak”的訪問已完成通過 sql 服務帳戶(在 SQL Server 配置管理器中設置)而不是通過我的登錄。但是,如果完成了 INSERT 語句,在這種情況下是通過我的登錄完成的嗎?

BACKUP DATABASE [BookStore] TO  DISK = N'C:\SQL2019\BookStore.bak' 
WITH  COPY_ONLY, NOFORMAT, NOINIT,  NAME = N'BookStore-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

另外,我有一個代理作業集,並且在作業歷史記錄中顯示“以使用者身份執行:sqlagent1”,這是我在 SQL Server 配置管理器中設置的 sql 代理服務帳戶。作業步驟屬性中的執行方式為空。但是,在 SQL Server 中的登錄名下沒有為此帳戶創建登錄名。此帳戶從哪裡獲得許可?

您想要區分在 SQL Server 中執行某項操作(例如您提到的 INSERT)和讓 SQL Server 或代理在作業系統中執行某項操作。

在 SQL Server 中執行某些操作(例如 INSERT): 您使用某個登錄名(CREATE LOGIN)登錄,然後此登錄名在數據庫中創建了一個使用者(CREATE USER)。權限基於該使用者,以及角色成員資格等通常的東西。這是一個很大的話題,但我感覺你實際上是在下一節之後。只是想確保我們區分兩者。

**讓 SQL Server 或代理在作業系統級別執行某些操作:**現在您想要區分 SQL Server 和代理。

SQL Server 在作業系統級別執行任何操作的一個範例是備份。這始終使用 SQL Server 服務帳戶來完成。(兩個例外是使用伺服器範圍代理的 xp_cmdshell 和在某些情況下可以使用最終使用者 Windows 帳戶的模擬時批量載入數據。)

然後,當代理在作業系統級別執行某些操作時,您就有了。是的,我們正在討論除 T-SQL 之外的所有工作步驟。對於系統管理員,預設情況下代理的服務帳戶是使用者。對於非系統管理員,您已經創建了要使用的代理代理(基本上指向一個 Windows 帳戶並允許作業所有者使用它)。如果需要,系統管理員可以使用代理代理。

最後,當代理在 SQL Server 中執行某些操作時,您就有了。換句話說,T-SQL 作業步驟。

  • 對於系統管理員,代理使用代理登錄(這是一種 Windows 身份驗證)將其作為“自身”執行。順便說一句,此登錄名始終是系統管理員。
  • 對於其他工作所有者(非系統管理員),代理將自動

使用 EXECUTE AS LOGIN = ‘job_owner_name’ WITH NO REVERT。即,這些

東西是作為工作所有者的登錄上下文完成的,我們不必

做任何事情。

以下是我就該主題撰寫的幾篇(舊)部落格文章: http: //sqlblog.karaszi.com/sql-server-agent-jobs-and-user-contexts/http://sqlblog.karaszi .com/xp_cmdshell-and-permissions/

引用自:https://dba.stackexchange.com/questions/268600