1. 程式人生 > >SQL Server 安全篇——資料層面安全性(3)——模擬(Impersonation)

SQL Server 安全篇——資料層面安全性(3)——模擬(Impersonation)


模擬是指在不同安全主體的上下文下執行T-SQL語句或程式碼模組的做法。用來最小化許可權授予和授予許可權的使用者數,但是不影響執行時提升到所需的許可權。實際上,在會話或模組的執行期間,模擬起到了使用者或登入名切換的過程。也可以不嚴謹地認為,發起模擬的使用者A借用B的身份執行了B有許可權但A沒許可權做的事。

在SQL Server中,可以使用EXECUTE AS子句來實現模擬功能。EXECUTE AS可以位於儲存過、函式、DML觸發器的頭部。也可以用於會話過程切換安全上下文。下表是EXECUTE AS可用場景:

用處 上下文規範(Context Specification)
Session(會話)
  • LOGING
  • USER
儲存過程、函式、DML觸發器
  • CALLER
  • SELF
  • OWNER
  • USER
庫級別DDL觸發器
  • CALLER
  • SELF
  • USER
伺服器級別DDL觸發器
  • CALLER
  • SELF
  • LOGIN
Queues(佇列)
  • CALLER
  • SELF
  • USER

上下文規範(Context Specification)說明

  • CALLER:意味著程式碼執行在原始上下文,是除佇列之外的預設行為。
  • SELF:程式碼在建立或最後更改模組的主體的上下文下執行。
  • OWNER:程式碼執行在安全主體的擁有者上下文。
  • USER:以資料庫特定使用者執行程式碼。
  • LOGIN:以特定登入名來執行程式碼。
下面來演示一下,首先建立一個登入名George:
USE master 
GO 
CREATE LOGIN George 
WITH PASSWORD='強密碼', 
DEFAULT_DATABASE=master, CHECK_EXPIRATION=OFF, CHECK_POLICY=ON ; 
GO 
然後在演示庫建立一個使用者,關聯這個登入名:
USE AdventureWorks2016 
GO 
CREATE USER George FOR LOGIN George 
        
然後呼叫不帶引數的SUSER_SNAME()函式返回當前安全上下文的登入名(注意這裡不能是“組”或者“絕色”,必須是單一賬號):
USE AdventureWorks2016
GO
--以當前上下文執行
SELECT SUSER_SNAME() ; 
--轉換當前上下文為George使用者 
EXECUTE AS USER = 'George' ; 
--再次查詢
SELECT SUSER_NAME() ; 
結果如圖:

第一個查詢執行在我自己的登入名的安全上下文中,當執行完EXECUTE AS語句之後,上下文切換成George,但是注意除非你關掉這個介面,不然需要使用REVERT命令來恢復上下文,否則將一直以George的上下文來執行。
 準確來說,在下面情況發生之前,切換後的上下文一直有效:
  1. 執行另一個Execute AS語句
  2. 執行REVERT語句
  3. 刪除會話(比如SSMS關閉查詢視窗)
  4. 儲存過程或觸發器中的命令執行了退出操作。
注意:對於即席查詢(ad hoc SQL)的EXECUTE AS子句,必須在安全上下文中具有模擬許可權,否則使用EXECUTE AS也會報錯。另外,非包含資料庫或SQL DB(Azure上)之外的模擬,其執行返回限制於伺服器級別。

最佳實踐:

首先當然還是要維持最低所需許可權。比如只需要DB級別的就不要給Server級別的許可權。當需要在一個過程中切換多次登入時(不建議),要保持原始登入的識別,以免後續忘記切回去,這個原始登入可以通過ORIGINAL_LOGIN函式來獲取。

相關推薦

SQL Server 安全——資料層面安全性1——架構

在安全性主體層級之下,SQL Server 為保護資料提供了一組豐富的功能。本章將介紹架構、所有權連結和繼承。本文集中介紹架構(Schema)。 正文: 如果學過程式語言特別是JAVA、C

SQL Server 安全——資料層面安全性3——模擬Impersonation

模擬是指在不同安全主體的上下文下執行T-SQL語句或程式碼模組的做法。用來最小化許可權授予和授予許可權的使用者數,但是不影響執行時提升到所需的許可權。實際上,在會話或模組的執行期間,模擬起

SQL Server 安全——資料層面安全性2——所有權連結( Ownership Chaining)

Ownership Chaining SQL Server 2016提供了一種叫行級安全性(row-level security,RLS)的功能,但是這種功能是比較有限制的,標準的方式是使用檢視或儲存過程來限制資料返回。並且通過對檢視或儲存過程的授權,可以使得使用

SQL Server 安全——服務賬號安全性3——服務賬號的威脅與對策

在安全領域中,“攻”“防”一直在持續著,並且很不幸,攻擊者永遠處於主動地位,一切防禦方案都是基於已經發生的攻擊來制定的,但是深入理解原理,不僅可以快速應對攻擊,也能從中推測出一些可能的衍生攻擊方案並作出提前防禦。 本文將集中在服務帳號上的攻擊介紹。曾經看過一部外國電影,名字早忘了,但是有一句話一直記在腦海裡(

SQL Server 安全——安全資料5——元資料自身安全性

    隨著元資料的使用頻率越來越高,安全性也越來越凸顯,因為從元資料中可以得到很多不應該隨意暴露的系統資訊。所以,絕大部分的元資料並不能隨意被檢視,通常都需要授權。    比如當一個使用者A被授權查詢B表,那麼這個使用者A就自動獲得了在sys.tables和sys.obje

SQL Server 安全——SQL Server 安全模型3——資料庫級別安全性

在資料庫層面,以授權到安全主體來實現安全性。 相對於伺服器級別,資料庫級別稱為資料庫使用者和資料庫角色。 使用者: 通常情況下,資料庫使用者是從例項層面建立的登入名來實現。相同例項下,一

SQL Server 安全——安全資料3——稽核元資料

稽核除了應對使用者行為之外,還能進行“稽核稽核”以避免別人對自己的懷疑。比如一個惡意的 DBA關閉了稽核, 然後執行的是一個危險的行為, 則該操作本身將不會被稽核, 但 由於DBA已經關閉了審計,

SQL Server 安全——降低外圍威脅1——網路配置

    前面大篇幅介紹了SQL Server及作業系統的安全,現在是時候介紹一下外圍主要是網路層面的安全。這部分主要包括網路功能、服務和端點。因為絕大部分的攻擊都來自於網路,所以網路層的安全控制某種意義上可以說是最外層的防禦。本文先介紹一下網路方面的配置。網路配置    在介

SQL Server 安全——SQL Server 稽核1——概覽

在中提到過,安全分為主動安全和被動安全,前面關於賬號許可權的算主動安全,那麼被動安全指的是記錄使用者活動以避免不可抵賴性威脅。這個很重要,因為如果攻擊是由特權使用者發起,那麼基本上是很難阻止。

SQL Server 安全——SQL Server加密1——加密概念

    加密是一種使用金鑰和證書的演算法來混淆資料的過程。如果沒有金鑰和證書,即使得到了資料,也無法得知資料的本來面貌,資料就沒有價值了。但是由於加解密本身就是一種非常耗資源(特別是CPU跟I/O )的計算操作,同時加密後的資料本質上會增大,所以也往往會帶來效能的下降。所以一

python入門23 pymssql模組python連線sql server增刪改資料

增刪改資料必須connect.commit()才會生效  回滾函式 connect.rollback()   連線資料庫 ''' dinghanhua sql server增刪改 ''' import pymssql server = '192.168.1.1' user

SQL Server 2008 表資料改變後傳送訊息.net 擴充套件函式法【穩定】【簡潔】

       一直以來應用程式中資料的 PUSH/PULL 應用效果,是作為實時系統的關鍵點。市面上面各種ESB,要麼價格不菲,要麼相當龐大,入門都夠很長時間。有人說還有說訊息伺服器MSMQ,ActiveMQ(這個比較推薦,客戶端語言支援較為豐富),JSM 等還有WebSo

SQL Server SSIS 參考資料

鏈接 鏈接服務器 sql server 參考 選項 wan archive html 1. 如何在 SQL Server 中創建鏈接服務器 http://www.cnblogs.com/spring_wang/p/5409394.html 2. 如何安裝 SSIS 開發工具

SQL Server橫向擴展:設計,實現與維護2- 分布式分區視圖

做的 img attach one 遠程 cnblogs ole out 不同的 為了使得朋友們對分布式分區視圖有個概念,也為了方便後面的內容展開,我們先看看下面一個圖: 講述分布式分區視圖之前,很有必要將之與我們常常熟悉的分區表和索引

通過ASP.NET MVC框架 + 原生JavaScript + Ajax + SQL SERVER 實現一個簡單的有論壇功能的網站有通過iis發布的例子

簡單的 接下來 發送 思維 學會 control javascrip 數據庫 今天   ASP.NET MVC. M 為Model模型層, V 為View視圖層, C 為Controller控制層。要想使用MVC框架來寫網站就需要了解M V C 的作用分別為哪些。給大家簡單

SQL Server 百萬級資料提高查詢速度的方法

1.應儘量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。 2.對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 3.應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎

(轉)SQLServer_十步優化SQL Server中的資料訪問四

            原文地址:http://tech.it168.com/a2009/1125/814/000000814758_all.shtml 第八步:使用SQL事件探查器和效能監控工具有效地診斷效能問題   在SQL Ser

(轉)SQLServer_十步優化SQL Server中的資料訪問五

    第九步:合理組織資料庫檔案組和檔案   建立SQL Server資料庫時,資料庫伺服器會自動在檔案系統上建立一系列的檔案,之後建立的每一個數據庫物件實際上都是儲存在這些檔案中的。SQL Server有下面三種檔案:   1).mdf檔案   這是最主要的資料檔案,每個資料庫只能有一個

SQL Server返回插入資料的ID和受影響的行數

首先看看資料庫裡面的資料(S_Id為自增長標識列): sql server 中返回上一次插入資料的ID(標識值)有三種方式: 第一種 @@IDENTITY: 1 insert into Student(S_StuNo,S_Name,S_Sex,S_Height) 2 values('013',

SQL Server CDC變更資料捕獲

SQL Server中記錄資料變更的四個方法:觸發器、Output子句、變更資料捕獲(Change Data Capture )功能、同步更改跟蹤。 這裡記錄下cdc: 變更資料捕獲可記錄應用於 SQL Server 表的插入、更新和刪除活動。 對資料庫中的某張表啟用變更資料捕獲,例子: