關於 SQL Server 使用者

本頁說明 Cloud SQL 如何與 SQL Server 使用者和角色搭配使用。SQL Server 角色可讓您控管使用者存取 SQL Server 執行個體時,能夠擁有的存取權與功能。

如要瞭解如何建立及管理 Cloud SQL 使用者,請參閱「建立及管理使用者」。

SQL Server 角色和使用者

SQL Server 角色可以是單一角色,也可以是角色群組。

使用者是具有登入權限的角色 (該角色具有 LOGIN 權限)。Cloud SQL 建立的所有角色都具備 LOGIN 權限,因此 Cloud SQL 會交替使用「角色」和「使用者」這兩個詞彙。不過,如果您使用與 SQL Server 相容的任何用戶端工具建立角色,該角色不一定會收到 LOGIN 權限。

SQL Server 適用的 Cloud SQL 會限制存取提供進階權限的特定伺服器角色。這類角色的範例包括 DbRootRoleserveradminsecurityadminsetupadmindiskadmindbcreator

所有 SQL Server 使用者都必須設定密碼。因此,您無法使用沒有密碼的使用者登入。

超級使用者和系統預存程序

SQL Server 適用的 Cloud SQL 是一項代管服務,因此會限制需要進階權限的特定系統預存程序和資料表存取權。在 Cloud SQL 中,您無法建立或存取具備超級使用者權限的使用者。

預設 SQL Server 使用者

建立新的 Cloud SQL for SQL Server 執行個體時,系統會自動建立預設的 sqlserver 使用者,但您必須設定密碼。

sqlserver 使用者屬於 CustomerDbRootRole 角色,其權限 (權限) 包括:

  • ALTER ANY CONNECTION
  • ALTER ANY LOGIN
  • ALTER ANY SERVER ROLE
  • ALTER SERVER STATE
  • ALTER TRACE
  • CONNECT SQL
  • CREATE ANY DATABASE
  • CREATE SERVER ROLE
  • VIEW ANY DATABASE
  • VIEW ANY DEFINITION
  • VIEW SERVER STATE

如要搭配連結的伺服器使用,也可以在執行個體中新增 cloudsql enable linked servers 。這個旗標會授予伺服器下列權限:

  • ALTER ANY LINKED SERVER

授予伺服器權限

使用任何 GRANT 指令授予權限時,必須傳遞 CustomerDbRootRole,例如 grantor_principal 的值。

以下 GRANT ALTER ANY LOGIN 範例有效

GRANT ALTER ANY LOGIN TO [Account] AS CustomerDbRootRole

以下 GRANT ALTER ANY LOGIN 範例無效

GRANT ALTER ANY LOGIN TO [Account]

其他 SQL Server 使用者

您可以建立其他 SQL Server 使用者或角色。使用 Cloud SQL 建立的所有使用者,都會獲得與 sqlserver 登入相同的資料庫權限。不過,如果您使用其他程序建立使用者 (而非透過 Cloud SQL 建立),該使用者不會具備與客戶管理員帳戶或 sqlserver 使用者相同的權限。舉例來說,如果您使用「建立登入」程序,並將登入項目新增至 CustomerDbRootRole 伺服器角色,使用者不會擁有與客戶管理員帳戶或 sqlserver 使用者相同的權限。因此,如果希望使用者具備與 sqlserver 登入相同的資料庫權限,可以使用 Cloud SQL 建立使用者。如要驗證任意兩個帳戶之間的權限差異,可以使用下列函式: sys.fn_my_permissions

資料庫匯入:擁有者權限

匯入資料庫時,系統會根據擁有者類型,以不同方式處理擁有者:

  • 如果現有登入項目不是 saCloud SQL 會保留該擁有者,並建立名為 sqlserver 的使用者,對應至登入項目 sqlserver。Cloud SQL 會將 CONTROLALTER ANY USER 權限授予該 sqlserver 使用者。
  • 對於不明登入或系統建立的登入:Cloud SQL 會將資料庫擁有權轉移給 sqlserver 登入。

變更使用者權限

您可以使用 ALTER ROLE 指令變更使用者權限。如果您為客戶建立新使用者,可以將其與不同角色建立關聯,或提供不同權限。

疑難排解

存取資料庫時發生錯誤

嘗試以您建立的使用者身分存取您建立的資料庫時,會收到下列錯誤訊息:

The server principal USERNAME is not able to access the
database DATABASE_NAME under the current security context.

問題可能出在

使用者不是資料庫成員。

建議做法

sqlserver 使用者身分連線至資料庫並新增使用者,然後 為資料庫中的新使用者指派 db_owner 角色。例如:

EXEC sp_adduser 'user';
EXEC sp_addrolemember 'db_owner', 'user'

後續步驟