GRANT 結構描述權限 (Transact-SQL)

適用于:SQL ServerAzure SQL資料庫Azure SQL 受控執行個體Azure Synapse Analytics AnalyticsPlatform System (PDW)

授與結構描述的權限。

Transact-SQL 語法慣例

Syntax

GRANT permission  [ ,...n ] ON SCHEMA :: schema_name  
    TO database_principal [ ,...n ]  
    [ WITH GRANT OPTION ]  
    [ AS granting_principal ]  

注意

若要檢視 SQL Server 2014 與更早版本的 Transact-SQL 語法,請參閱舊版文件

引數

permission
指定可以授與的結構描述權限。 如需權限清單,請參閱這個主題稍後的<備註>一節。

ON SCHEMA :: schema*_name*
指定正在授與權限的結構描述。 範圍限定詞 :: 為必要項目。

database_principal
指定要對其授與權限的主體。 下列其中之一:

  • 資料庫使用者
  • 資料庫角色
  • 應用程式角色
  • 對應至 Windows 登入的資料庫使用者
  • 對應至 Windows 群組的資料庫使用者
  • 對應至憑證的資料庫使用者
  • 對應至非對稱金鑰的資料庫使用者
  • 未對應至伺服器主體的資料庫使用者

GRANT OPTION
指出主體也有權授與指定權限給其他主體。

AS granting_principal
指定主體,執行這項查詢的主體就是從這個主體衍生權限來授與權限。 下列其中之一:

  • 資料庫使用者
  • 資料庫角色
  • 應用程式角色
  • 對應至 Windows 登入的資料庫使用者
  • 對應至 Windows 群組的資料庫使用者
  • 對應至憑證的資料庫使用者
  • 對應至非對稱金鑰的資料庫使用者
  • 未對應至伺服器主體的資料庫使用者

備註

重要

在某些情況下,ALTER 與 REFERENCE 權限的結合可允許被授與者檢視資料或執行未經授權的函數。 例如:擁有資料表 ALTER 權限和函式 REFERENCE 權限的使用者,可以透過函式建立並執行計算資料行。 在此情況下,使用者也必須擁有計算資料行的 SELECT 權限。

結構描述是一個由資料庫所包含的資料庫層級安全性實體,在權限階層中,此資料庫為該安全性實體的父系。 下面所列的是可以授與之最特定且最有限的結構描述權限,並列出利用隱含方式來併入這些權限的較通用權限。

結構描述權限 結構描述權限所隱含 資料庫權限所隱含
ALTER CONTROL ALTER ANY SCHEMA
CONTROL CONTROL CONTROL
CREATE SEQUENCE ALTER ALTER ANY SCHEMA
刪除 CONTROL 刪除
執行 CREATE 陳述式之前,請先執行 CONTROL 執行 CREATE 陳述式之前,請先執行
Insert CONTROL Insert
REFERENCES CONTROL REFERENCES
SELECT CONTROL SELECT
TAKE OWNERSHIP CONTROL CONTROL
UPDATE CONTROL UPDATE
VIEW CHANGE TRACKING CONTROL CONTROL
VIEW DEFINITION CONTROL VIEW DEFINITION

警告

在結構描述上具有 ALTER 權限的使用者可以使用擁有權鏈結來存取其他結構描述中的安全性實體,包括使用者已被明確拒絕存取的安全性實體。 這是因為當所參考物件的擁有主體同時也擁有參考這些物件的物件時,擁有權鏈結就會略過參考物件上的權限檢查。 在結構描述上具有 ALTER 權限的使用者可以建立由結構描述擁有者所擁有的程序、同義字和檢視。 這些物件還可以在結構描述擁有者所擁有的其他結構描述中存取資訊 (透過擁有權鏈結)。 如果結構描述的擁有者同時也擁有其他結構描述,則在可能情況下,您應該盡量避免授與該結構描述的 ALTER 權限。

例如,這個問題可能會在下列狀況下發生。 下列狀況假設稱為 U1 的使用者在 S1 結構描述上具有 ALTER 權限。 U1 使用者在存取結構描述 S2 中稱為 T1 的資料表物件時遭拒。 S1 結構描述和 S2 結構描述是由同一個擁有者所擁有。

U1 使用者在資料庫上具有 CREATE PROCEDURE 權限,在 S1 結構描述上則具有 EXECUTE 權限。 因此,U1 使用者可以建立預存程序,然後在預存程序中存取遭拒的物件 T1。

U1 使用者在資料庫上具有 CREATE SYNONYM 權限,在 S1 結構描述上則具有 SELECT 權限。 因此,U1 使用者可以針對遭拒的物件 T1 在 S1 結構描述中建立同義字,然後使用該同義字存取遭拒的物件 T1。

U1 使用者在資料庫上具有 CREATE VIEW 權限,在 S1 結構描述上則具有 SELECT 權限。 因此,U1 使用者可以在 S1 結構描述中建立檢視從遭拒的物件 T1 查詢資料,然後使用該檢視存取遭拒的物件 T1。

權限

同意授權者 (或是指定了 AS 選項的主體) 必須具有指定了 GRANT OPTION 的權限本身,或是具有隱含目前正在授與權限的更高權限。

如果是使用 AS 選項,就必須套用這些額外的需求。

AS granting_principal 其他必要的權限
資料庫使用者 使用者的 IMPERSONATE 權限、db_securityadmin 固定資料庫角色中的成員資格、db_owner 固定資料庫角色中的成員資格,或系統管理員 (sysadmin) 固定伺服器角色中的成員資格。
對應至 Windows 登入的資料庫使用者 使用者的 IMPERSONATE 權限、db_securityadmin 固定資料庫角色中的成員資格、db_owner 固定資料庫角色中的成員資格,或系統管理員 (sysadmin) 固定伺服器角色中的成員資格。
對應至 Windows 群組的資料庫使用者 Windows 群組中的成員資格、db_securityadmin 固定資料庫角色中的成員資格、db_owner 固定資料庫角色中的成員資格,或系統管理員 (sysadmin) 固定伺服器角色中的成員資格。
對應至憑證的資料庫使用者 db_securityadmin 固定資料庫角色中的成員資格、db_owner 固定資料庫角色中的成員資格,或系統管理員 (sysadmin) 固定伺服器角色中的成員資格。
對應至非對稱金鑰的資料庫使用者 db_securityadmin 固定資料庫角色中的成員資格、db_owner 固定資料庫角色中的成員資格,或系統管理員 (sysadmin) 固定伺服器角色中的成員資格。
未對應至任何伺服器主體的資料庫使用者 使用者的 IMPERSONATE 權限、db_securityadmin 固定資料庫角色中的成員資格、db_owner 固定資料庫角色中的成員資格,或系統管理員 (sysadmin) 固定伺服器角色中的成員資格。
資料庫角色 角色的 ALTER 權限、db_securityadmin 固定資料庫角色中的成員資格、db_owner 固定資料庫角色中的成員資格,或系統管理員 (sysadmin) 固定伺服器角色中的成員資格。
應用程式角色 角色的 ALTER 權限、db_securityadmin 固定資料庫角色中的成員資格、db_owner 固定資料庫角色中的成員資格,或系統管理員 (sysadmin) 固定伺服器角色中的成員資格。

物件擁有者可以授與他們所擁有之物件的權限。 具有安全性實體之 CONTROL 權限的主體可以授與該安全性實體的權限。

CONTROL SERVER 權限的被授與者 (例如系統管理員 (sysadmin) 固定伺服器角色的成員),可以授與伺服器中任何安全性實體的任何權限。 資料庫之 CONTROL 權限的被授與者 (例如 db_owner 固定資料庫角色的成員),可以授予資料庫中任何安全性實體的任何權限。 結構描述之 CONTROL 權限的被授與者,可以授與結構描述中任何物件的任何權限。

範例

A. 將結構描述 HumanResources 的 INSERT 權限授與 Guest

GRANT INSERT ON SCHEMA :: HumanResources TO guest;  

B. 將結構描述 Person 的 SELECT 權限授與資料庫使用者 WilJo

GRANT SELECT ON SCHEMA :: Person TO WilJo WITH GRANT OPTION;  

另請參閱

DENY 結構描述權限 (Transact-SQL)
REVOKE 結構描述權限 (Transact-SQL)
GRANT (Transact-SQL)
權限 (資料庫引擎)
Database Engine (主體)
CREATE CERTIFICATE (Transact-SQL)
CREATE ASYMMETRIC KEY (Transact-SQL)
CREATE APPLICATION ROLE (Transact-SQL)
加密階層
sys.fn_builtin_permissions (Transact-SQL)
sys.fn_my_permissions (Transact-SQL)
HAS_PERMS_BY_NAME (Transact-SQL)