GRANT (Transact-SQL)

將安全性實體的權限授與某個主體。一般概念是 GRANT <某個權限> ON <某個物件> TO <某個使用者、登入或群組>。如需一般權限討論內容,請參閱<權限 (Database Engine)>。

主題連結圖示Transact-SQL 語法慣例

語法

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

引數

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

    • 如果安全性實體是資料庫,ALL 表示 BACKUP DATABASE、BACKUP LOG、CREATE DATABASE、CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE TABLE 和 CREATE VIEW。

    • 如果安全性實體是純量函數,ALL 表示 EXECUTE 和 REFERENCES。

    • 如果安全性實體是資料表值函式,ALL 表示 DELETE、INSERT、REFERENCES、SELECT 和 UPDATE。

    • 如果安全性實體是預存程序,ALL 表示 EXECUTE。

    • 如果安全性實體是資料表,ALL 表示 DELETE、INSERT、REFERENCES、SELECT 和 UPDATE。

    • 如果安全性實體是檢視,ALL 表示 DELETE、INSERT、REFERENCES、SELECT 和 UPDATE。

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

  • permission
    這是權限的名稱。權限對安全性實體的有效對應描述於下列子主題中。

  • column
    指定正在授與權限的資料表中資料行的名稱。它必須用括號 "()" 括住。

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

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

  • TO principal
    這是主體的名稱。可以被授與安全性實體權限的主體,隨著安全性實體而不同。如需有效的組合,請參閱下列子主題。

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

  • AS principal
    指定主體,執行這項查詢的主體就是從這個主體衍生權限來授與權限。

備註

GRANT 陳述式的完整語法相當複雜。上述語法圖已簡化,以強調其結構。授與特定安全性實體權限的完整語法描述於下列主題中。

REVOKE 陳述式可用來移除授與的權限,而 DENY 陳述式可用來避免主體透過 GRANT 取得特定權限。

授與權限會移除指定安全性實體權限的 DENY 或 REVOKE。如果相同權限在包含安全性實體的更高範圍被拒絕,則 DENY 的優先順序較高。但是在更高範圍撤銷授與權限的優先順序並不會比較高。

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

警告注意事項注意

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

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

WITH GRANT OPTION

GRANT … WITH GRANT OPTION 會指定接收權限的安全性主體能夠將指定的權限授與其他安全性帳戶。當接收權限的主體是角色或 Windows 群組時,如果物件權限需要進一步授與非群組或角色成員的使用者,就必須使用 AS 子句。因為只有使用者 (而非群組或角色) 能夠執行 GRANT 陳述式,所以群組或角色的特定成員必須在授與權限時使用 AS 子句來明確叫用角色或群組成員資格。下列範例顯示如何在授與角色或 Windows 群組時使用 WITH GRANT OPTION。

-- 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 TestMe TO User2;
-- The following succeeds because User1 invokes the TesterRole membership
GRANT EXECUTE ON TestMe TO User2 AS TesterRole;

SQL Server 權限圖表

如需 PDF 格式的所有 Database Engine 權限海報大小的圖表,請參閱 https://go.microsoft.com/fwlink/?LinkId=229142

權限

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

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

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

範例

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