Microsoft Entra 伺服器主體

適用於:Azure SQL 資料庫Azure SQL 受控執行個體Azure Synapse Analytics (僅限專用 SQL 集區)

您現在可以從 Microsoft Entra ID (先前稱為 Azure Active Directory) 建立及使用伺服器主體,這些是 SQL Database 中虛擬 master 資料庫的登入。 在 SQL Database 使用 Microsoft Entra 伺服器主體有幾個優點:

  • 支援適用於權限管理的 Azure SQL 資料庫伺服器角色
  • 支援多位具有 SQL Database 特殊角色的 Microsoft Entra 使用者,例如 loginmanagerdbmanager 角色。
  • SQL 登入與 Microsoft Entra 登入之間的功能同位。
  • 提高功能改進支援,例如使用僅限 Microsoft Entra 驗證。 僅限 Microsoft Entra 驗證允許停用 SQL 驗證,包括 SQL 伺服器管理員、SQL 登入和使用者。
  • 允許 Microsoft Entra 主體支援異地複本。 Microsoft Entra 主體將能夠連線到使用者資料庫的異地複本,並具有主要伺服器的「唯讀」權限和「拒絕」權限。
  • 使用具有特殊角色的 Microsoft Entra 服務主體登入,透過 Microsoft Entra 應用程式完全實現使用者和資料庫建立與維護自動化。

如需有關 Azure SQL 中的 Microsoft Entra 驗證的詳細資訊,請參閱使用 Microsoft Entra 驗證

注意

Microsoft Entra 伺服器主體 (登入) 目前為 Azure SQL 資料庫和 Azure Synapse Analytics 的公開預覽版。 Microsoft Entra 登入通常適用於 Azure SQL 受控執行個體和 SQL Server 2022。

權限

您需要有下列權限,才能在虛擬 master 資料庫中使用或建立 Microsoft Entra 登入。

  • loginmanager 伺服器角色中的 Microsoft Entra 管理員權限或成員資格。 第一個 Microsoft Entra 登入只能由 Microsoft Entra 管理員建立。
  • 必須是 Azure SQL 資料庫所用相同目錄中的 Microsoft Entra 成員。

根據預設,向 master 資料庫中的新建 Microsoft Entra 登入授與 VIEW ANY DATABASE 權限。

Microsoft Entra 主體語法

使用下列語法來建立和管理 Microsoft Entra 伺服器及資料庫主體。

建立登入

此語法會根據 Microsoft Entra 身分識別建立伺服器層級的登入。 只有 Microsoft Entra 管理員可以在虛擬 master 資料庫中執行此命令。

CREATE LOGIN login_name
  { 
    FROM EXTERNAL PROVIDER [WITH OBJECT_ID = 'objectid'] 
    | WITH <option_list> [,..] 
  }

<option_list> ::=
    PASSWORD = { 'password' }
    [ , SID = sid ]

login_name 指定 Microsoft Entra 主體,包括 Microsoft Entra 使用者、群組或應用程式。

如需詳細資訊,請參閱 CREATE LOGIN (Transact-SQL)

從登入建立使用者

下列 T-SQL 語法會建立資料庫層級的 Microsoft Entra 主體,該主體對應至虛擬 master 資料庫中的 Microsoft Entra 登入。 與建立資料庫 Microsoft Entra 自主使用者的語法類似,唯一的差異在於指定 FROM LOGIN [login_name] 而不是 FROM EXTERNAL PROVIDER

若要從 Microsoft Entra 登入建立 Microsoft Entra 使用者,請使用下列語法:

CREATE USER [user_name] FROM LOGIN [login_name]

可以使用 sys.database_principals 中的 SID 資料行來區分 Microsoft Entra 自主資料庫使用者與從登入建立的 Microsoft Entra 使用者。 對於自主資料庫使用者,SID 是長度為 16 的二進位字串。 對於以登入為基礎的使用者,SID 的長度為 18,尾碼為 AADE

注意

AADE 尾碼附加至 SID 是我們識別 Microsoft Entra 使用者是透過登入建立的方式。 不過,這也表示登入的 SID 及其使用者在 sys.server_principalssys.database_principals 之間不相符。 若要將使用者與登入相互關聯,必須先移除 AADE 尾碼。

若要了解以登入為基礎的使用者與自主資料庫使用者之間的概念差異,請參閱自主資料庫使用者

如需所有建立使用者語法的詳細資訊,請參閱 CREATE USER (Transact-SQL)

使用 ALTER LOGIN 語法停用或啟用登入

ALTER LOGIN (Transact-SQL) DDL 語法可用來啟用或停用 Azure SQL 資料庫的 Microsoft Entra 登入。

ALTER LOGIN [login_name] DISABLE 

停用登入後,不再允許使用該伺服器主體的連線。 它也會停用從該登入建立的所有資料庫主體 (使用者),使其無法連線到各自的資料庫。

注意

  • ALTER LOGIN login_name DISABLE 不會影響自主資料庫使用者,因為它們與登入無關。

  • Microsoft Entra 群組不支援 ALTER LOGIN login_name DISABLE

  • 個別停用的登入所屬使用者不能是建立於 master 資料庫中的登入群組成員之一 (例如 Microsoft Entra 管理員群組)。

  • 若要讓 DISABLEENABLE 變更立即生效,您必須使用 T-SQL 命令清除驗證快取和 TokenAndPermUserStore 快取。

    DBCC FLUSHAUTHCACHE
    DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS 
    

Microsoft Entra 主體的角色

SQL Database 的特殊角色可以指派給虛擬 master 資料庫的使用者作為 Microsoft Entra 主體,包括 dbmanagerloginmanager

Azure SQL 資料庫伺服器角色可以指派給虛擬 master 資料庫中的「登入」。

如需如何授與這些角色的教學課程,請參閱教學課程:建立及使用 Microsoft Entra 伺服器登入

限制和備註

  • SQL Server 管理員無法在任何資料庫中建立 Microsoft Entra 登入或使用者。
  • SQL 管理員或 SQL 使用者無法執行下列 Microsoft Entra 作業:
    • CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
    • CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER
    • EXECUTE AS USER [bob@contoso.com]
    • ALTER AUTHORIZATION ON securable::name TO [bob@contoso.com]
  • Azure SQL 資料庫和 Azure Synapse Analytics 不支援模擬 Microsoft Entra 伺服器主體 (登入)。 支援 SQL 受控執行個體:
  • Microsoft Entra 登入無法與 Microsoft Entra 管理員重疊。 Microsoft Entra 管理員優先於任何登入。 如果 Microsoft Entra 帳戶已經以 Microsoft Entra 管理員的身分或群組的一部分存取伺服器,則針對此帳戶建立的任何登入都不會有任何影響。 但是,登入建立不能透過 T-SQL 封鎖。 在帳戶向伺服器驗證之後,登入將具有有效的 Microsoft Entra 管理員權限,而不是新建立的登入。
  • 不支援變更特定 Microsoft Entra 登入物件的權限:
    • GRANT <PERMISSION> ON LOGIN :: <Microsoft Entra account> TO <Any other login>
  • 當您變更 Microsoft Entra 登入的權限時,變更預設只會在登入下次連線到 Azure SQL 資料庫時生效。 任何具有登入的現有已開啟連線都不會受到影響。 若要強制權限變更立即生效,可以手動清除驗證和 TokenAndPermUserStore,如先前在使用 ALTER LOGIN 停用或啟用登入中所述。 使用 ALTER SERVER ROLE 變更伺服器角色成員資格時,也會套用此行為。
  • 在 SQL Server Management Studio 和 Azure Data Studio 中,用來建立使用者的指令碼命令不會檢查 master 中是否有同名的 Microsoft Entra 登入。 它一律會為自主資料庫 Microsoft Entra 使用者產生 T-SQL。
  • 如果嘗試從具有非唯一顯示名稱的服務主體建立登入或使用者,可能會發生錯誤。 如需有關如何減輕此錯誤的詳細資訊,請參閱具有非唯一顯示名稱的 Microsoft Entra 登入和使用者

Microsoft Entra 群組伺服器主體限制

使用 Azure SQL 資料庫和 Azure Synapse Analytics 公開預覽版的 Microsoft Entra 登入,存在以下已知限制:

  • Azure SQL 資料庫伺服器角色不適用於 Microsoft Entra 群組。
  • 如果您的 SQL 管理員是 Microsoft Entra 群組,該群組的使用者連線時存在一些限制。 每個 Microsoft Entra 使用者個別不是 sys.server_principals 資料表的一部分。 這會產生各種後果,包括傳回 NULLSUSER_SID 呼叫。
  • 屬於 Microsoft Entra 群組登入一部分的 Microsoft Entra 使用者登入也不會隱含建立,這表示它們不會有預設結構描述,而且無法在建立 Microsoft Entra 使用者的登入或將預設結構描述指派給群組之前,執行 CREATE SCHEMA 等作業。
  • 不支援以資料庫擁有者身分將資料庫所有權變更為 Microsoft Entra 群組。
    • ALTER AUTHORIZATION ON database::<mydb> TO [my_aad_group] 失敗並出現錯誤訊息:

      Msg 33181, Level 16, State 1, Line 4
      The new owner cannot be Azure Active Directory group.
      

下一步