關於 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 使用者都必須有密碼。因此,您無法使用缺少密碼的使用者登入。

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

Cloud SQL for SQL Server 是一項代管服務,因此會限制需要進階權限的特定系統儲存程序和資料表存取權。在 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'

後續步驟