GRANT (Transact-SQL)
適用於:sql Server Azure SQL 資料庫 Azure SQL 受控執行個體Azure Synapse Analytics Analytics Platform System (PDW) SQL 分析端點在 Microsoft Fabric SQL 資料庫中Microsoft網狀架構倉儲中的 SQL 分析端點Microsoft網狀架構
將安全性實體的權限授與某個主體。 一般概念是 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
}
引數
ALL
這個選項已被取代,只保留回溯相容性。 它不會授與所有可能的許可權。 授 ALL
與相當於授與下列許可權。
安全性實體 | 權限 |
---|---|
Database |
BACKUP DATABASE 、BACKUP LOG 、CREATE DATABASE 、、CREATE DEFAULT 、CREATE FUNCTION 、CREATE PROCEDURE CREATE RULE 、CREATE TABLE 、 和CREATE VIEW |
純量函式 |
EXECUTE 和 REFERENCES |
資料表值函式 |
DELETE 、INSERT 、REFERENCES 、SELECT 和 UPDATE |
預存程序 | EXECUTE |
Table |
DELETE 、INSERT 、REFERENCES 、SELECT 和 UPDATE |
檢視 |
DELETE 、INSERT 、REFERENCES 、SELECT 和 UPDATE |
PRIVILEGES
為符合 ISO 而包含這個項目。 不會變更 的行為 ALL
。
permission
許可權的名稱。 下列各節將說明許可權與安全性實體的有效對應。
column
指定正在授與權限的資料表中資料行的名稱。
(
括弧和 )
是必要的。
class
指定正在授與權限之安全性實體的類別。 需要範圍限定符 ::
。
securable
指定要授與其權限的安全性實體。
TO principal
主體的名稱。 可以被授與安全性實體權限的主體,隨著安全性實體而不同。 如需有效的組合,請參閱下列各節。
GRANT OPTION
指出也會提供被授與者授與指定權限給其他主體的能力。
AS principal
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_id
15
Raul
即使語句實際上是由使用者12
執行 ()。Mary
AS
除非您需要明確定義許可權鏈結,否則通常不建議使用 子句。 如需詳細資訊,請參閱 許可權檢查演算法的摘要。
AS
在此語句中使用 並不表示能夠模擬另一個使用者。
備註
語句的完整語法 GRANT
很複雜。 先前的語法圖表已簡化,以引起人們對其結構的注意。 本文稍後所列的文章會說明授與特定安全性實體許可權的完整語法。
REVOKE
語句可用來移除授與的許可權,而 DENY
語句可用來防止主體透過 GRANT
取得特定許可權。
授與許可權會移除 DENY
指定安全性實體的許可權或 REVOKE
該許可權。 如果在包含安全性實體的較高範圍中拒絕相同的許可權, DENY
則優先使用 。 但撤銷較高範圍中授與的許可權並不優先。
資料庫層級權限是在指定資料庫的範圍內授與。 如果使用者必須具有其他資料庫中的物件權限,應在其他資料庫中建立使用者帳戶,或將使用者帳戶存取權授與其他資料庫和目前的資料庫。
警告
資料表層權 DENY
不會優先於資料行層級 GRANT
。 保留權限階層中這項不一致的目的,是為了與舊版相容。 未來的版本將予以移除。
系統 sp_helprotect
預存程式會報告資料庫層級安全性實體的許可權。
在 Microsoft Fabric 中, CREATE USER
目前無法明確執行。 執行 或 GRANT
時DENY
,會自動建立使用者。
WITH GRANT OPTION
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。
權限
同意授權者 (或是指定了 AS
選項的主體) 必須具有指定了 GRANT OPTION
的權限本身,或是具有隱含目前正在授與權限的更高權限。 如果使用 AS
選項,則會套用其他需求。 如需詳細資料,請參閱安全性實體的特定文章。
物件擁有者可以授與他們所擁有之物件的權限。 具有 CONTROL
安全性實體許可權的主體可以授與該安全性實體的許可權。
許可權的被授出席者CONTROL SERVER
,例如系統管理員固定伺服器角色的成員,可以授與伺服器中任何安全性實體的任何許可權。 資料庫的許可權被授出席者CONTROL
,例如db_owner固定資料庫角色的成員,可以授與資料庫中任何安全性實體的任何許可權。 架構的許可權被授出席者 CONTROL
可以授與架構內任何物件的任何許可權。
範例
下表列出安全性實體和描述安全性實體特定語法的文章。