設定超大規模資料庫具名復本的隔離存取

適用於:Azure SQL 資料庫

本文說明將存取權授與 Azure SQL 資料庫 超大規模資料庫具名復本的程式,而不需要將主要復本或其他具名複本的存取權授與。 此案例允許使用具名複本的資源和安全性隔離:由於具名複本將會使用自己的計算節點執行,且在需要隔離式唯讀存取 Azure SQL 超大規模資料庫時,也相當實用。 在此情境下,「隔離」表示主要複本和具名複本不會共用 CPU 和記憶體,在具名複本上執行的查詢也不會使用主要或其他任何複本的計算資源,且存取具名複本的主體無法存取其他複本 (含主要複本)。

注意

Microsoft Entra 標識符 先前稱為 Azure Active Directory (Azure AD)。

在主伺服器上建立登入

在裝載主要資料庫的邏輯伺服器上,於 master 資料庫執行下列動作來建立新登入。

使用您自己的強密碼與唯一密碼,以您的強密碼取代 strong_password_here

CREATE LOGIN [third-party-login] WITH PASSWORD = 'strong_password_here';

sys.sql_logins 系統檢視畫面,擷取所建立登入的 SID 十六進位值:

SELECT SID FROM sys.sql_logins WHERE name = 'third-party-login';

停用登入。 這可防止此登入存取裝載主要複本之伺服器上的任何資料庫。

ALTER LOGIN [third-party-login] DISABLE;

在主要讀寫資料庫中建立使用者

建立登入後,請連線至資料庫的主要讀寫複本,例如 WideWorldImporters (您可在此處找到用於還原的範例腳本:還原 Azure SQL 中的資料庫),並為該登入建立資料庫使用者:

CREATE USER [third-party-user] FROM LOGIN [third-party-login];

選擇性步驟:如有任何重新啟用登入的考量,在建立資料庫使用者後,您可卸除上一步所建立的伺服器登入。 連線 主master資料庫裝載之邏輯伺服器上的資料庫,然後執行下列範例腳本:

DROP LOGIN [third-party-login];

在不同的邏輯伺服器上建立具名複本

建立新的 Azure SQL 邏輯伺服器,以用來隔離具名復本的存取權。 請依循在 Azure SQL Database 中建立和管理伺服器和單一資料庫中的指示。 若要建立具名複本,此伺服器必須位於裝載主要複本的伺服器的相同 Azure 區域。

在下列範例中,將 取代 strong_password_here 為您的強密碼。 例如,使用 Azure CLI:

az sql server create -g MyResourceGroup -n MyNamedReplicaServer -l MyLocation --admin-user MyAdminUser --admin-password strong_password_here

接著為此伺服器上的主要資料庫建立具名複本。 例如,使用 Azure CLI:

az sql db replica create -g MyResourceGroup -n WideWorldImporters -s MyPrimaryServer --secondary-type Named --partner-database WideWorldImporters_NR --partner-server MyNamedReplicaServer

在具名復本伺服器上建立登入

連線至具名複本所裝載邏輯伺服器的 master 資料庫 (於上一步建立)。 以您的強密碼取代 strong_password_here 。 使用自主要複本擷取的 SID 新增登入:

CREATE LOGIN [third-party-login] WITH PASSWORD = 'strong_password_here', sid = 0x0...1234;

此時,使用 third-party-loginbob@contoso.com 的使用者和應用程式可連線至具名複本,但無法連至主要複本。

授與資料庫中的物件層級權限

依敘述設定登入驗證後,您可使用一般 GRANTDENYREVOKE 陳述式管理授權,或資料庫中的物件層級權限。 在這些陳述式中,參考您在資料庫中建立的使用者名稱,或參考將此使用者包含為成員的資料庫角色。 請記得在主要複本上執行這些命令。 這些變更會傳播到所有次要複本,但只會在建立伺服器層級登入的具名復本上生效。

請記住,系統依預設會授與新建立的使用者一組最低權限 (例如,無法用於存取任何使用者資料表)。 若要允許 third-party-userbob@contoso.com 讀取資料表中的資料,您必須明確授與 SELECT 權限:

GRANT SELECT ON [Application].[Cities] to [third-party-user];

除了個別授與各資料表的權限外,您也可將使用者新增至db_datareaders資料庫角色,以允許所有資料表的讀取存取;或者也可使用結構描述允許存取結構描述中所有現有及新的資料表。

測試存取

您可使用任何用戶端工具來測試此設定,並嘗試連線至主要複本和具名複本。 例如,您可以使用 sqlcmd,嘗試使用 third-party-login 用戶連線到主要複本。 以您的強密碼取代 strong_password_here

sqlcmd -S MyPrimaryServer.database.windows.net -U third-party-login -P strong_password_here -d WideWorldImporters

這將會導致錯誤,因為不允許該使用者連線至伺服器:

Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login failed for user 'third-party-login'. Reason: The account is disabled.

嘗試連接到具名複本會成功。 以您的強密碼取代 strong_password_here

sqlcmd -S MyNamedReplicaServer.database.windows.net -U third-party-login -P strong_password_here -d WideWorldImporters_NR

系統不會傳回任何錯誤,且可在具名複本上執行查詢 (授與的物件層級權限所允許)。