權限

許可權是帳戶的許可權,例如使用者或群組帳戶,在本機電腦上執行各種系統相關作業,例如關閉系統、載入設備磁碟機或變更系統時間。 許可權與存取權限不同,有兩種方式:

  • 許可權可控制系統資源和系統相關工作的存取權,而存取權限控制安全性 物件的存取權限。
  • 系統管理員會將許可權指派給使用者和群組帳戶,而系統會根據物件 DACL 中 ACE 中所授與的存取權限,授與或拒絕安全性實體物件的存取權。

每個系統都有一個帳戶資料庫,可儲存使用者和群組帳戶所持有的許可權。 當使用者登入時,系統會產生包含使用者許可權清單的 存取權杖 ,包括授與使用者或使用者所屬群組的許可權。 請注意,許可權僅適用于本機電腦;網域帳戶在不同的電腦上可以有不同的許可權。

當使用者嘗試執行特殊許可權作業時,系統會檢查使用者的存取權杖,以判斷使用者是否擁有必要的許可權,如果是的話,它會檢查是否啟用許可權。 如果使用者失敗這些測試,系統就不會執行作業。

若要判斷存取權杖中保留的許可權,請呼叫 GetTokenInformation 函式,這也表示已啟用哪些許可權。 預設會停用大部分的許可權。

Windows API 會定義一組字串常數,例如 SE_ASSIGNPRIMARYTOKEN_NAME,以識別各種許可權。 這些常數在所有系統上都相同,且定義于 Winnt.h 中。 如需 Windows 所定義之許可權的資料表,請參閱 Privilege Constants。 不過,取得和調整存取權杖中許可權的函式會使用 LUID 類型來識別許可權。 許可權的 LUID 值可能不同于一部電腦到另一部電腦,以及從同一部電腦上開機到另一部電腦。 若要取得對應至其中一個字串常數的目前 LUID ,請使用 LookupPrivilegeValue 函式。 使用 LookupPrivilegeName 函式,將 LUID 轉換為其對應的字串常數。

系統提供一組顯示名稱,描述每個許可權。 當您需要向使用者顯示許可權的描述時,這些非常有用。 使用 LookupPrivilegeDisplayName 函式擷取對應至許可權字串常數的描述字串。 例如,在使用美式英文的系統上,SE_SYSTEMTIME_NAME許可權的顯示名稱是「變更系統時間」。

您可以使用 PrivilegeCheck 函式來判斷存取權杖是否保存一組指定的許可權。 這主要用於模擬用戶端的伺服器應用程式。

系統管理員可以使用系統管理工具,例如使用者管理員,來新增或移除使用者和群組帳戶的許可權。 系統管理員可以以程式設計方式使用 本機安全性授權單位 (LSA) 函式來使用許可權。 LsaAddAccountRightsLsaRemoveAccountRights函式會新增或移除帳戶的許可權。 LsaEnumerateAccountRights 函式會列舉指定帳戶所持有的許可權。 LsaEnumerateAccountsWithUserRight函式會列舉持有指定許可權的帳戶。

授權常數

在 C++ 中啟用和停用許可權