本頁面說明 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 會限制特定伺服器角色的存取權,這些角色提供進階權限。這類角色的範例包括 DbRootRole、serveradmin、securityadmin、setupadmin、diskadmin 和 dbcreator。
所有 SQL Server 使用者都必須有密碼。因此,您無法使用沒有密碼的使用者登入。
超級使用者和系統預存程序
SQL Server 適用的 Cloud SQL 是代管服務,因此會限制需要進階權限的特定系統預存程序和資料表存取權。在 Cloud SQL 中,您無法建立或存取具備超級使用者權限的使用者。
預設 SQL Server 使用者
建立新的 SQL Server 適用的 Cloud SQL 執行個體時,系統會自動建立預設的 sqlserver 使用者,但您必須設定密碼。
sqlserver 使用者屬於 CustomerDbRootRole 角色,其權限 (權限) 包括:
ALTER ANY CONNECTIONALTER ANY LOGINALTER ANY SERVER ROLEALTER SERVER STATEALTER TRACECONNECT SQLCREATE ANY DATABASECREATE SERVER ROLEVIEW ANY DATABASEVIEW ANY DEFINITIONVIEW SERVER STATE
如要搭配連結的伺服器使用,也可以將 cloudsql enable linked servers 新增至執行個體。這個旗標會將下列權限授予伺服器:
ALTER ANY LINKED SERVER
如要匯出 SQL Server 登入資訊、密碼雜湊和 SID,也可以將 cloud sql enable sp_help_revlogin 新增至執行個體。這個旗標會在 msdb 資料庫中安裝 sp_help_revlogin 預存程序,並授予 sqlserver 使用者授權來執行該程序。
授予伺服器權限
使用任何 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。
資料庫匯入:擁有者權限
匯入資料庫時,擁有者的處理方式會因擁有者類型而異,如下所示:
- 如果現有登入名稱不是
sa:Cloud SQL 會保留該擁有者,並建立名為sqlserver的使用者,對應至登入名稱sqlserver。Cloud SQL 會將CONTROL和ALTER 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'