共用方式為


自主的資料庫使用者 - 使資料庫可攜

使用自主資料庫使用者來驗證資料庫層級的 SQL Server 和 SQL Database 的連線。 自主資料庫是與其他資料庫隔離的資料庫,與裝載資料庫的 SQL Server/SQL Database (實例和主資料庫) 。 SQL Server 支援 Windows 和 SQL Server 驗證的自主資料庫使用者。 當使用 SQL Database 時,結合自主資料庫使用者與資料庫層級防火牆規則。 這個主題會檢閱使用自主資料庫模型時,相較於傳統的登入/使用者模型和 Windows 或伺服器層級防火牆規則的差異與優點。 特定的情況下,管理能力或應用程式商務邏輯可能仍然需要使用傳統的登入/使用者模型和伺服器層級防火牆規則。

注意

Microsoft 持續發展 SQL Database 服務並提高 SLA 保障,您可能需要轉用自主資料庫使用者模式及以資料庫為範圍的防火牆規則,以便提升指定資料庫的可用性 SLA 及最大登入速率。 Microsoft 建議您立即考慮這類變更。

傳統的登入和使用者模型

在傳統連線模式中,Windows 使用者或 Windows 群組成員會透過經 Windows 驗證的使用者或群組認證連線至資料庫引擎。 或者,連線同時提供名稱和密碼,並使用SQL Server驗證來連線 (這是連線至SQL Database) 時的唯一選項。 在這兩種情況下,master 資料庫的登入必須符合連接的認證。 當資料庫引擎確認 Windows 驗證認證或驗證 SQL Server 驗證認證後,該連線通常會嘗試連線至使用者資料庫。 若要連接至使用者資料庫,登入必須能夠對應到 (也就是相關聯) 使用者資料庫中的資料庫使用者。 當特定資料庫在 SQL Server 中為選擇性但在 SQL Database 中為必要時,連接字串也可指定連接至該資料庫。

最重要的原則是登入 (在 master 資料庫中) 和使用者 (在使用者資料庫中) 必須存在,且彼此相關。 這表示使用者資料庫連線在登入 master 資料庫時具有相依性,且會限制資料庫移至其他裝載 SQL Server 或 Azure SQL Database 伺服器的能力。 如果由於任何原因,master 資料庫的連接無法使用 (例如,容錯移轉進行中),就會增加整體的連接時間或連接可能會逾時。因此,這可能會降低連接延展性。

自主的資料庫使用者模型

在自主的資料庫使用者模型中,master 資料庫中的登入不存在。 相反地,使用者資料庫中就會發生驗證程序,而且使用者資料庫中的資料庫使用者在 master 資料庫中沒有相關聯的登入。 自主資料庫使用者模型同時支援SQL Server) 和SQL Server驗證 (SQL Server和SQL Database) 中的Windows 驗證 (。 若要以自主資料庫使用者身分連線,連接字串則須一律包含使用者資料庫的參數,資料庫引擎才能得知負責管理驗證程序的資料庫。 自主資料庫使用者的活動僅限於驗證資料庫,因此,當以自主資料庫使用者身分連接時,必須在使用者所需的每個資料庫中獨立建立資料庫使用者帳戶。 若要變更資料庫,SQL Database 使用者必須建立新連線。 若另一個資料庫中有相同的使用者,SQL Server 中的自主資料庫使用者則可變更資料庫。

對於 SQL Database,從傳統模型切換至自主資料庫使用者模型時,不需要變更連接字串。 針對 SQL Server 連線,連接字串必須加入資料庫名稱 (若尚不存在)。

重要

使用傳統的模型時,伺服器層級角色和伺服器層級權限可以限制對所有資料庫的存取。 使用自主資料庫模型時,具有 ALTER ANY USER 權限的資料庫擁有者和資料庫使用者可以授與資料庫的存取權。 這可減少高特殊權限的伺服器登入的存取控制,並擴大要包含高特殊權限的資料庫使用者的存取控制。

防火牆

SQL Server

Windows 防火牆規則適用所有連線,並對登入 (傳統模型連線) 與自主資料庫使用者具備相同的效果。 如需 Windows 防火牆的詳細資訊,請參閱< 設定用於 Database Engine 存取的 Windows 防火牆>。

SQL Database 防火牆

SQL Database 允許對伺服器層級連線 (登入) 和資料庫層級連線 (自主資料庫使用者) 使用不同的防火牆規則。 連接到使用者資料庫時,會檢查第一個資料庫的防火牆規則。 如果沒有允許存取資料庫的規則,就會勾選伺服器層級防火牆規則,它需要存取邏輯伺服器的 master 資料庫。 結合自主資料庫使用者的資料庫層級防火牆規則,不必在連線期間存取伺服器的 master 資料庫,藉此提供改善的連線延展性。

如需有關 SQL Database 防火牆規則的詳細資訊,請參閱下列主題:

語法差異

傳統的模型 自主的資料庫使用者模型
當連接到 master 資料庫:

CREATE LOGIN login_name WITH PASSWORD = 'strong_password';

然後,連接至使用者資料庫時:

CREATE USER 'user_name' FOR LOGIN 'login_name';
當連接至使用者資料庫:

CREATE USER user_name WITH PASSWORD = 'strong_password';
傳統的模型 自主的資料庫使用者模型
若要變更密碼,在 master 資料庫的內容中:

ALTER LOGIN login_name WITH PASSWORD = 'strong_password';
若要變更密碼,在使用者資料庫的內容中:

ALTER USER user_name WITH PASSWORD = 'strong_password';

備註

  • 在 SQL Server 中,必須啟用 SQL Server 執行個體的自主資料庫使用者。 如需詳細資訊,請參閱自主資料庫驗證伺服器組態選項

  • 自主的資料庫使用者與登入具有非重疊的名稱,可以共存於您的應用程式。

  • 若以 name1 名稱在 master 資料庫中登入,並且您建立了名為 name1的自主資料庫使用者,當連接字串中提供資料庫名稱時,連接到資料庫時會優先挑選資料庫使用者的內容,而非登入內容。 也就是說,自主資料庫使用者的優先順序將高於具有相同名稱的登入。

  • 在 SQL Database 中,自主資料庫使用者名稱不可與伺服器管理帳戶的名稱相同。

  • SQL Database 伺服器管理帳戶一律不可為自主資料庫使用者。 伺服器管理員有足夠的權限來建立及管理自主的資料庫使用者。 伺服器管理員可以授與權限給使用者資料庫上的自主資料庫使用者。

  • 因為自主資料庫使用者是資料庫層級主體,所以您必須在每個您想要使用的資料庫,建立自主的資料庫使用者。 身分識別會侷限於資料庫,並且在所有層面都獨立於在相同伺服器中的另一個資料庫具有相同名稱和相同密碼的使用者。

  • 使用您通常會用來登入的相同強度密碼。

另請參閱

自主資料庫
自主資料庫的安全性最佳做法
CREATE USER (Transact-SQL)