使用 EXECUTE AS 建立自訂權限集

定義自訂權限集時,指定模組的執行內容將非常有用。例如,有些動作 (如 TRUNCATE TABLE) 沒有可授與的權限。若要執行 TRUNCATE TABLE,使用者必須擁有指定資料表的 ALTER 權限。授與使用者資料表的 ALTER 權限可能不是很理想,因為使用者實際上將擁有不只截斷資料表的權限。

透過合併模組中的 TRUNCATE TABLE 陳述式,並指定有權限修改資料表的使用者來執行該模組,您就可針對您授與該模組 EXECUTE 權限的使用者擴充其權限,使其可截斷資料表。

請看此段預存程序:

CREATE PROCEDURE TruncateMyTable
WITH EXECUTE AS SELF
AS TRUNCATE TABLE MyDB..MyTable;

假設 Mary 建立此程序並授與 TruncateMyTable 的執行權限給 Scott。當 Scott 執行預存程序時,Database Engine 會確認截斷資料表的權限,就像 Mary 在執行預存程序一樣。因為她是資料表的擁有者,即使 Scott 沒有該資料表的直接權限,陳述式仍然會成功。Mary 已快速且有效率地擴充她想要給與 Scott 的權限,但不會給他超過執行該工作所需的權限。