Azure Active Directory 伺服器主體

適用于:Azure SQL Database Azure SQL 受控執行個體 Azure Synapse Analytics (專用 SQL 集區)

注意

Azure Active Directory (Azure AD) 伺服器主體 (登入) 目前可供 Azure SQL Database 公開預覽。 Azure SQL 受控執行個體已使用 Azure AD 登入。

您現在可以建立及利用 Azure AD 伺服器主體,這些主體是在SQL Database的虛擬 master 資料庫中登入。 在 SQL Database 使用 Azure AD 伺服器主體有幾個優點:

  • 支援適用於權限管理的 Azure SQL Database 伺服器角色
  • 支援多位具有 SQL Database 特殊角色的 Azure AD 使用者,例如 loginmanagerdbmanager 角色。
  • SQL 登入與 Azure AD 登入之間的功能同位。
  • 提高功能改進支援,例如使用僅限 Azure AD 的驗證。 僅限 Azure AD 的驗證允許停用 SQL 驗證,包括 SQL 伺服器系統管理員、SQL 登入和使用者。
  • 允許 Azure AD 主體支援異地複本。 Azure AD 主體將能夠連線到使用者資料庫的異地複本,並具有主要伺服器的「唯讀」權限和「拒絕」權限。
  • 能夠使用 Azure AD 服務主體登入搭配特殊角色執行使用者和資料庫建立的全自動化,以及 Azure AD 應用程式提供的維護。
  • 受控執行個體與SQL Database之間的更接近功能,因為受控執行個體已在資料庫中支援 Azure AD 登入 master

如需 Azure SQL Azure AD 驗證的詳細資訊,請參閱使用 Azure Active Directory 驗證

權限

需要下列許可權,才能在虛擬 master 資料庫中利用或建立 Azure AD 登入。

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

根據預設,授與 master 資料庫之新建 Azure AD 登入的標準權限是 VIEW ANY DATABASE

Azure AD 登入語法

此功能版本引進了 Azure SQL Database 使用 Azure AD 伺服器主體的新語法。

建立登入語法

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

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

login_name 會指定 Azure AD 主體,這是 Azure AD 使用者、群組或應用程式。

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

建立使用者語法

下列 T-SQL 語法已在SQL Database中使用,可用來建立對應至虛擬 master 資料庫中 Azure AD 登入的資料庫層級 Azure AD 主體。

若要從 Azure AD 登入來建立 Azure AD 使用者,請使用下列語法。 只有 Azure AD 系統管理員可以在虛擬 master 資料庫中執行此命令。

CREATE USER user_name FROM LOGIN login_name

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

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

ALTER LOGIN (Transact-SQL) DDL 語法可用來啟用或停用 Azure SQL Database 的 Azure AD 登入。

ALTER LOGIN login_name DISABLE 

凡已建立對應至登入 login_name 之 Azure AD 使用者主體 user_name 的 SQL Database 邏輯伺服器,Azure AD 主體 login_name 將無法登入此種邏輯伺服器中的任何使用者資料庫。

注意

  • ALTER LOGIN login_name DISABLE 不適用於自主使用者。

  • ALTER LOGIN login_name DISABLE 不適用於 Azure AD 群組。

  • 個別停用的登入不能屬於資料庫中所建立 master 登入群組的使用者 (,例如 Azure AD 系統管理員群組) 。

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

    DBCC FLUSHAUTHCACHE
    DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS 
    

Azure AD 主體的角色

SQL Database的特殊角色可以指派給 Azure AD 主體虛擬 master 資料庫中的使用者,包括dbmanager 和 loginmanager

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

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

限制和備註

  • SQL Server 系統管理員無法在任何資料庫中建立 Azure AD 登入或使用者。
  • 不支援以資料庫擁有者身分將資料庫所有權變更為 Azure AD 群組。
    • 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.
      
    • 支援將資料庫所有權變更為個別使用者。
  • SQL 系統管理員或 SQL 使用者無法執行下列 Azure AD 作業:
    • 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 AD 伺服器層級主體 (登入) 的模擬:
  • 不支援 Azure AD 登入與 Azure AD 系統管理員重疊。 Azure AD 系統管理員優先於任何登入。 如果 Azure AD 帳戶已能使用 Azure AD 系統管理員身分存取伺服器 (直接或以系統管理員群組成員身分),則為此使用者建立的登入不會有任何作用。 登入建立不能透過 T-SQL 封鎖。 在帳戶向伺服器驗證之後,登入將具有有效的 Azure AD 系統管理員權限,而不是新建立的登入。
  • 不支援變更特定 Azure AD 登入物件的權限:
    • GRANT <PERMISSION> ON LOGIN :: <Azure AD account> TO <Any other login>
  • 透過現有的 Azure SQL Database 開放連線變更 Azure AD 登入權限後,要等到使用者重新連線後,權限才會生效。 也要排清驗證快取和 TokenAndPermUserStore 快取。 這適用於使用 ALTER SERVER ROLE 陳述式變更伺服器角色成員資格。
  • 不支援將對應至 Azure AD 群組的 Azure AD 登入設定為資料庫擁有者。
  • Azure SQL Database 伺服器角色不適用於 Azure AD 群組。
  • SQL Server Management Studio和 Azure Data Studio for Azure AD 使用者中具有登入的目前指令碼命令,不會產生正確的 T-SQL 語法,以建立具有登入的使用者。 相反地,腳本會為內含的 Azure AD 使用者產生 T-SQL 語法,而不需在虛擬 master 資料庫中登入。
  • 若要區別 Azure AD 包含的使用者,而不需在虛擬資料庫中登入,以及從虛擬 mastermaster 資料庫中建立的 Azure AD 使用者、檢視 SID 中的sys.database_principals,以及檢查資料行中 SID 附加的尾碼,以 AADE 取得以登入建立的使用者。

後續步驟