權限: GRANT, DENY, REVOKE

適用於:Microsoft Fabric 中Microsoft網狀架構倉儲中的 Azure Synapse AnalyticsSQL 分析端點

使用 GRANT 和 DENY 語句來授予或拒絕對安全主體(登入、資料庫使用者或資料庫角色)的安全主體(如資料庫、資料表、檢視等)權限(例如 UPDATE)。 用 REVOKE 來移除授權或拒絕授權。

伺服器層級權限會套用至登入。 資料庫層級權限會套用至資料庫使用者和資料庫角色。

若要查看已授與或拒絕哪些權限,請查詢 sys.server_permissions 和 sys.database_permissions 檢視。 未以明確方式對安全性主體授與或拒絕的權限,可藉由擁有具權限之角色的成員資格來繼承。 固定資料庫角色的權限無法變更,且不會顯示在 sys.server_permissions 和 sys.database_permissions 檢視中。

  • GRANT 明確授予一個或多個權限。

  • DENY 明確禁止委託人擁有一項或多項權限。

  • REVOKE 移除現有 GRANT 或 DENY 權限。

Transact-SQL 語法慣例

語法

-- Azure Synapse Analytics and Microsoft Fabric
GRANT   
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]   
    TO principal [ ,...n ]  
    [ WITH GRANT OPTION ]  
[;]  
  
DENY   
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]   
    TO principal [ ,...n ]  
    [ CASCADE ]  
[;]  
  
REVOKE   
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]   
    [ FROM | TO ] principal [ ,...n ]  
    [ CASCADE ]  
[;]  
  
<permission> ::=  
{ see the tables below }  
  
<class_type> ::=  
{  
      LOGIN  
    | DATABASE  
    | OBJECT  
    | ROLE  
    | SCHEMA  
    | USER  
}  

引數

<許可>[ ,...n ]
一或多個要授與、拒絕或撤銷的權限。

ON [ <class_type> :: ] securableON 子句描述要作為授與、拒絕或撤銷權限時之執行對象的 securable 參數。

<class_type> 安全性實體的類別類型。 這可以是 LOGIN、 DATABASE、 物件、 SCHEMAROLE、 或 。USER 您也可以將權限授與 SERVERclass_type,但針對這些權限不需指定 SERVER。 DATABASE 當權限包含該詞 DATABASE 時,未指定(例如 ALTER ANY DATABASE)。 未指定任何 class_type 且權限類型未限制為伺服器或資料庫類別時,會假設類別為 OBJECT。

securable
要作為授與、拒絕或撤銷權限時之執行對象的登入、資料庫、資料表、檢視、結構描述、程序、角色或使用者的名稱。 指定物件名稱時,可以使用 Transact-SQL 語法慣例中所述的三部分命名規則來指定。

TO principal [ , ...n ]
一或多個被授與、拒絕或撤銷權限的主體。 主體是登入、資料庫使用者或資料庫角色的名稱。

FROM principal [ , ...n ]
一或多個要撤銷權限的主體。 主體是登入、資料庫使用者或資料庫角色的名稱。 FROM 只能搭配 REVOKE 陳述句一起使用。 TO 可與 GRANT、 、 DENYREVOKE或 一起使用。

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

CASCADE
表示對指定的主體及被主體授與權限的所有其他主體拒絕或撤銷權限。 當校長有OPTION許可GRANT時,必須如此。

GRANT 選項
表示將撤銷授與指定權限的能力。 當您使用 CASCADE 引數時,這是必要引數。

重要

如果負責人擁有指定的許可但沒有選項 GRANT ,該許可本身也會被撤銷。

權限

要授予許可,授予者必須擁有帶有 WITH GRANT OPTION 的權限,或必須擁有更高權限,暗示該許可已被授予。 物件擁有者可以授與他們所擁有之物件的權限。 具有安全性實體之 CONTROL 權限的主體可以授與該安全性實體的權限。 db_owner 和 db_securityadmin 固定資料庫角色的成員可以授與資料庫中的任何權限。

一般備註

對主體拒絕或撤銷權限並不會影響已通過授權且目前正在執行的要求。 若要立即限制存取,您必須取消作用中的要求,或終止目前的工作階段。

注意

大多數固定伺服器角色在此版本中都無法使用。 請改用使用者定義的資料庫角色。 您無法將登入新增至 sysadmin 固定伺服器角色。 授與 CONTROL SERVER 權限會近似於 sysadmin 固定伺服器角色中的成員資格。

有些陳述式需要多個權限。 例如,建立一個資料表需要資料庫中的 CREATE TABLE 權限,以及 ALTER SCHEMA 該資料表的權限。

Azure Synapse Analytics 有時會執行儲存程序,將使用者操作分發給計算節點。 因此,不能拒絕整個資料庫的執行權限。 (例如 DENY EXECUTE ON DATABASE::<name> TO <user>; 會失敗)。因應之道就是拒絕對使用者結構描述或特定物件 (程序) 的執行權限。

在 Microsoft Fabric 中,目前無法明確執行。CREATE USER 當GRANTDENY執行時,使用者將自動建立。

在 Microsoft Fabric 中,無法管理伺服器層級的許可權。

隱含和明確權限

明確許可是指透過GRANT或DENY陳述式授予主體的GRANT或DENY許可。

隱含權限是指GRANTDENY主體(登入、使用者或資料庫角色)從另一個資料庫角色繼承來的權限。

隱含權限也可以繼承自涵蓋權限或父權限。 例如, UPDATE 資料表上的權限可以透過對包含該資料表的結構擁有權限,或對該資料表擁有 UPDATECONTROL 權限來繼承。

擁有權鏈結

當多個資料庫物件依序存取彼此時,此順序即稱為「鏈結」。 雖然此類鏈結不會獨立存在,當 SQL Server 周遊鏈結中的連結時,SQL Server 評估要素物件權限的方式,與單獨存取物件時不同。 擁有權鏈結對於管理安全性有很重要的影響。 如需擁有權鏈結的詳細資訊,請參閱擁有權鏈結和教學課程:擁有權鏈結和內容切換。

權限清單

伺服器層級權限

您可以從登入授與、拒絕及撤銷伺服器層級權限。

適用於伺服器的權限

  • 控制伺服器

  • 管理批量操作

  • 變更任何連線

  • 更改任何 DATABASE

  • 創造任何一個 DATABASE

  • 更改任何 EXTERNAL DATA SOURCE

  • 更改任何 EXTERNAL FILE FORMAT

  • 更改任何 LOGIN

  • 更改伺服器狀態

  • 連接 SQL

  • VIEW 任何定義

  • VIEW 任何 DATABASE

  • VIEW 伺服器狀態

適用於登入的權限

  • 控制啟動 LOGIN

  • ALTER ON(再開) LOGIN

  • 冒充 LOGIN

  • VIEW 定義

資料庫層級權限

您可以從資料庫使用者和使用者定義的資料庫角色,授與、拒絕及撤銷資料庫層級權限。

適用於所有資料庫類別的權限

  • CONTROL

  • ALTER

  • VIEW 定義

適用於除了使用者以外所有資料庫類別的權限

  • 掌握所有權

僅適用於資料庫的權限

  • 更改任何 DATABASE

  • ALTER ON(再開) DATABASE

  • 修改任何資料空間

  • 更改任何 ROLE

  • 更改任何 SCHEMA

  • 更改任何 USER

  • BACKUP DATABASE

  • 連結 DATABASE

  • CREATE PROCEDURE

  • CREATE ROLE

  • CREATE SCHEMA

  • CREATE TABLE

  • CREATE VIEW

  • SHOWPLAN

僅適用於使用者的權限

  • IMPERSONATE

適用於資料庫、結構描述及物件的權限

  • ALTER

  • DELETE

  • 執行 CREATE 陳述式之前,請先執行

  • INSERT

  • SELECT

  • UPDATE

  • REFERENCES

如需了解每一種權限的定義,請參閱權限 (資料庫引擎)。

預設權限

下列清單說明預設權限:

  • 當使用該 CREATE LOGIN 語句建立登入時,新登入會獲得 CONNECT SQL 權限。

  • 所有登入都是 public 伺服器角色的成員,且無法從 public中移除。

  • 當使用該權限建立 CREATE USER 資料庫使用者時,該資料庫使用者會獲得資料庫中的 CONNECT 權限。

  • 所有主體 (包括 public 角色) 預設都沒有任何明確或隱含的權限。

  • 當登入或使用者成為資料庫或物件的擁有者時,登入或使用者一律會擁有該資料庫或物件的所有權限。 擁有權權限無法變更,且會作為隱含權限而不會顯示。 GRANT這些 、 DENY和 REVOKE 陳述對所有人沒有影響。

  • sa 登入具有應用裝置的所有權限。 類似於擁有權權限,sa 權限無法變更,且會作為隱含權限而不會顯示。 這些、 和 GRANT 語句對DENY 沒有影響。REVOKE 您無法將 sa 登入重新命名。

  • USE 陳述式不需要權限。 所有主體都可以在任何資料庫上執行 USE 陳述式。

範例:Azure Synapse Analytics

A. 將伺服器層級權限授與登入

下列兩個陳述式會將伺服器層級權限授與某個登入。

GRANT CONTROL SERVER TO [Ted];  
GRANT ALTER ANY DATABASE TO Mary;  

B. 將伺服器層級權限授與登入

下列範例會將某個登入的伺服器層級權限授與某個伺服器主體 (另一個登入)。

GRANT  VIEW DEFINITION ON LOGIN::Ted TO Mary;  

C. 將資料庫層級權限授與使用者

下列範例會將某個使用者的資料庫層級權限授與某個資料庫主體 (另一個使用者)。

GRANT VIEW DEFINITION ON USER::[Ted] TO Mary;  

D. 授與、拒絕及撤銷結構描述權限

以下 GRANT 陳述賦予 Yuen 從 dbo 架構中任一資料表或視圖中選擇資料的能力。

GRANT SELECT ON SCHEMA::dbo TO [Yuen];  

以下 DENY 陳述阻止 Yuen 從 dbo 架構中的任何資料表或檢視中選取資料。 Yuen 即使藉由某個其他方式取得權限 (例如透過角色成員資格),也無法讀取資料。

DENY SELECT ON SCHEMA::dbo TO [Yuen];  

以下 REVOKE 陳述會移除該 DENY 權限。 現在 Yuen 的明確權限已變成中性。 Yuen 或許能夠透過某個其他隱含權限 (例如角色成員資格) 從任何資料表中選取資料。

REVOKE SELECT ON SCHEMA::dbo TO [Yuen];  

E. 示範選擇性 OBJECT:: 子句

由於 OBJECT 是權限陳述式的預設類別,因此下列兩個陳述式相同。 OBJECT:: 子句是選擇性的。

GRANT UPDATE ON OBJECT::dbo.StatusTable TO [Ted];  
GRANT UPDATE ON dbo.StatusTable TO [Ted];