GRANT (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsMicrosoft Fabric 中的 SQL 分析端點Microsoft Fabric 中的倉庫Microsoft Fabric 中的 SQL 資料庫

將安全性實體的權限授與某個主體。 一般概念是 GRANT <some permission> ON <some object> TO <some user, login, or group>。 如需權限的一般說明,請參閱權限 (資料庫引擎)。

Transact-SQL 語法慣例

Syntax

SQL Server、Azure SQL 資料庫 和 Fabric SQL 資料庫的語法。

-- Simplified syntax for GRANT
GRANT { ALL [ PRIVILEGES ] }
      | permission [ ( column [ , ...n ] ) ] [ , ...n ]
      [ ON [ class :: ] securable ] TO principal [ , ...n ]
      [ WITH GRANT OPTION ] [ AS principal ]

Azure Synapse Analytics and Microsoft Fabric warehouse 的語法。

GRANT
    <permission> [ , ...n ]
    [ ON [ <class_type> :: ] securable ]
    TO principal [ , ...n ]
    [ WITH GRANT OPTION ]
[;]

<permission> ::=
{ see the tables below }

<class_type> ::=
{
      LOGIN
    | DATABASE
    | OBJECT
    | ROLE
    | SCHEMA
    | USER
}

Arguments

ALL

這個選項已被取代,只保留回溯相容性。 它不會授與所有可能的許可權。 授 ALL 與相當於授與下列許可權。

Securable Permissions
Database BACKUP DATABASE、BACKUP LOG、CREATE DATABASE、、CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURECREATE RULE、CREATE TABLE、 和CREATE VIEW
純量函數 EXECUTE 和 REFERENCES
表值函數 DELETE、INSERT、REFERENCES、SELECT 和 UPDATE
預存程序 EXECUTE
Table DELETE、INSERT、REFERENCES、SELECT 和 UPDATE
View DELETE、INSERT、REFERENCES、SELECT 和 UPDATE

PRIVILEGES

為符合 ISO 而包含這個項目。 不會變更 的行為 ALL。

permission

許可權的名稱。 下列各節將說明許可權與安全性實體的有效對應。

column

指定正在授與權限的資料表中資料行的名稱。 (括弧和 ) 是必要的。

class

指定正在授與權限之安全性實體的類別。 需要範圍限定符 :: 。

securable

指定要授與其權限的安全性實體。

致 校長

主體的名稱。 可以被授與安全性實體權限的主體,隨著安全性實體而不同。 如需有效的組合,請參閱下列各節。

GRANT 選項

指出也會提供被授與者授與指定權限給其他主體的能力。

副 校長

AS <principal>使用 子句來表示記錄為許可權授出席者的主體應該是執行語句的人員以外的主體。 例如,假設使用者 Mary 具有 principal_id 的 12,而使用者 Raul 是主體 15。 Mary 會執行 GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul; Now 數據表sys.database_permissions,表示 grantor_principal_id15Raul即使語句實際上是由使用者12執行 ()。Mary

AS除非您需要明確定義許可權鏈結,否則通常不建議使用 子句。 如需詳細資訊,請參閱 許可權檢查演算法的摘要。

AS在此語句中使用 並不表示能夠模擬另一個使用者。

Remarks

語句的完整語法 GRANT 很複雜。 先前的語法圖表已簡化,以引起人們對其結構的注意。 本文稍後所列的文章會說明授與特定安全性實體許可權的完整語法。

REVOKE語句可用來移除授與的許可權,而 DENY 語句可用來防止主體透過 GRANT取得特定許可權。

授與許可權會移除 DENY 指定安全性實體的許可權或 REVOKE 該許可權。 如果在包含安全性實體的較高範圍中拒絕相同的許可權, DENY 則優先使用 。 但撤銷較高範圍中授與的許可權並不優先。

資料庫層級權限是在指定資料庫的範圍內授與。 如果使用者必須具有其他資料庫中的物件權限,應在其他資料庫中建立使用者帳戶,或將使用者帳戶存取權授與其他資料庫和目前的資料庫。

Caution

資料表層權 DENY 不會優先於資料行層級 GRANT。 保留權限階層中這項不一致的目的,是為了與舊版相容。 未來的版本將予以移除。

系統 sp_helprotect 預存程式會報告資料庫層級安全性實體的許可權。

在 Microsoft Fabric 中, CREATE USER 目前無法明確執行。 執行 或 GRANT 時DENY,會自動建立使用者。

附 GRANT 選項

GRANT ... WITH GRANT OPTION指定接收許可權的安全性主體能夠將指定的許可權授與其他安全性帳戶。 當接收許可權的主體是角色或 Windows 群組時,當物件許可權需要進一步授與群組或角色成員的使用者時, AS 必須使用 子句。 因為只有使用者,而不是群組或角色,才能執行 GRANT 語句,因此群組或角色的特定成員必須在授與許可權時使用 子句來明確叫用 AS 角色或群組成員資格。 下列範例示範如何 WITH GRANT OPTION 授與角色或 Windows 群組時使用 。

-- Execute the following as a database owner
GRANT EXECUTE ON TestProc TO TesterRole WITH GRANT OPTION;
EXEC sp_addrolemember TesterRole, User1;

-- Execute the following as User1
-- The following fails because User1 does not have the permission as the User1
GRANT EXECUTE ON TestProc TO User2;

-- The following succeeds because User1 invokes the TesterRole membership
GRANT EXECUTE ON TestProc TO User2 AS TesterRole;

SQL Server 權限的圖表

如需 PDF 格式所有 資料庫引擎 權限的海報大小圖表,請參閱 https://aka.ms/sql-permissions-poster。

Permissions

同意授權者 (或是指定了 AS 選項的主體) 必須具有指定了 GRANT OPTION 的權限本身,或是具有隱含目前正在授與權限的更高權限。 如果使用 AS 選項,則會套用其他需求。 如需詳細資料,請參閱安全性實體的特定文章。

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

許可權的被授出席者CONTROL SERVER,例如系統管理員固定伺服器角色的成員,可以授與伺服器中任何安全性實體的任何許可權。 資料庫的許可權被授出席者CONTROL,例如db_owner固定資料庫角色的成員,可以授與資料庫中任何安全性實體的任何許可權。 架構的許可權被授出席者 CONTROL 可以授與架構內任何物件的任何許可權。

Examples

下表列出安全性實體和描述安全性實體特定語法的文章。

Securable GRANT 語法
應用角色 GRANT 資料庫主體權限(Transact-SQL)
Assembly GRANT 組裝許可(Transact-SQL)
非對稱金鑰 GRANT 非對稱金鑰權限(Transact-SQL)
可用性群組 GRANT 可用性群組權限(Transact-SQL)
Certificate GRANT 憑證權限(Transact-SQL)
Contract GRANT 服務代理權限(Transact-SQL)
Database GRANT 資料庫權限(Transact-SQL)
資料庫範圍認證 GRANT 資料庫範圍憑證(Transact-SQL)
Endpoint GRANT 端點權限(Transact-SQL)
Full-Text 目錄 GRANT Full-Text 權限(Transact-SQL)
Full-Text 停止清單 GRANT Full-Text 權限(Transact-SQL)
Function GRANT 物件權限(Transact-SQL)
Login GRANT 伺服器主體權限(Transact-SQL)
訊息類型 GRANT 服務代理權限(Transact-SQL)
Object GRANT 物件權限(Transact-SQL)
Queue GRANT 物件權限(Transact-SQL)
遠端服務繫結 GRANT 服務代理權限(Transact-SQL)
Role GRANT 資料庫主體權限(Transact-SQL)
Route GRANT 服務代理權限(Transact-SQL)
Schema GRANT 結構權限(Transact-SQL)
搜尋屬性清單 GRANT 搜尋財產清單權限(Transact-SQL)
Server GRANT 伺服器權限(Transact-SQL)
Service GRANT 服務代理權限(Transact-SQL)
預存程序 GRANT 物件權限(Transact-SQL)
對稱鑰匙 GRANT 對稱金鑰權限(Transact-SQL)
Synonym GRANT 物件權限(Transact-SQL)
系統物件 GRANT 系統物件權限(Transact-SQL)
Table GRANT 物件權限(Transact-SQL)
類型 GRANT 類型權限(Transact-SQL)
User GRANT 資料庫主體權限(Transact-SQL)
View GRANT 物件權限(Transact-SQL)
XML 結構描述集合 GRANT XML 架構收集權限(Transact-SQL)