適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉儲
Microsoft Fabric 中的 SQL 資料庫
將安全性實體的權限授與某個主體。 一般概念是 GRANT <some permission> ON <some object> TO <some user, login, or group>。 如需權限的一般說明,請參閱權限 (資料庫引擎)。
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、平行處理數據倉儲和Microsoft網狀架構倉儲的語法。
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
指定要授與其權限的安全性實體。
致 校長
主體的名稱。 可以被授與安全性實體權限的主體,隨著安全性實體而不同。 如需有效的組合,請參閱下列各節。
補助選擇權
指出也會提供被授與者授與指定權限給其他主體的能力。
副 校長
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 ... 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
下表列出安全性實體和描述安全性實體特定語法的文章。