本文說明如何使用 sp_help_revlogin 預存程序,從 SQL Server 適用的 Cloud SQL 執行個體匯出 SQL Server 登入、安全 ID (SID) 和密碼雜湊。
在 SQL Server 執行個體之間遷移資料庫或設定資料庫同步時,您必須在目的地執行個體上重新建立使用者登入,並使用相符的 SID 和密碼雜湊。確保資料庫使用者仍對應至相應的伺服器登入資訊,並保留權限。
SQL Server 適用的 Cloud SQL 提供 sp_help_revlogin 預存程序,可透過 msdb 資料庫產生 Transact-SQL (T-SQL) 指令碼,用於重新建立使用者登入。
事前準備
必要的角色
如要取得設定資料庫標記所需的權限,請要求管理員授予您專案的下列 IAM 角色:
- Cloud SQL 管理員 (
roles/cloudsql.admin) - Cloud SQL 編輯者 (
roles/cloudsql.editor)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這個預先定義的角色具備 cloudsql.instances.update 權限,可設定資料庫標記。
資料庫權限
確認您有權存取預設的 sqlserver SQL Server 使用者角色。
啟用資料庫旗標
如要在 msdb 資料庫中安裝 sp_help_revlogin 預存程序,請在執行個體上啟用 cloud sql enable sp_help_revlogin 資料庫旗標。
Google Cloud 控制台
- 前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 請按一下執行個體名稱,開啟執行個體的「Overview」 (總覽) 頁面。
- 按一下 [編輯]。
- 在「自訂執行個體」部分,展開「旗標」。
- 按一下「新增旗標」。
- 從可用旗標清單中選取「cloud sql enable sp_help_revlogin」。
- 將這個旗標的值設為 on。
- 按一下 [儲存]。
gcloud CLI
使用 gcloud CLI 啟用旗標:
gcloud sql instances patch INSTANCE_NAME \ --database-flags="cloud sql enable sp_help_revlogin=on"
將 INSTANCE_NAME 改成 Cloud SQL 執行個體的名稱。
使用支援的用戶端工具連線
預存程序sp_help_revlogin會CREATE LOGIN
使用 T-SQL PRINT 陳述式 (資訊訊息) 產生 指令碼,而不是
表格結果集 (SELECT 陳述式)。
使用下列其中一種工具連線至 Cloud SQL 執行個體:
- SQL Server Management Studio (SSMS):連線至執行個體、執行程序,並在「Messages」(訊息)分頁中查看產生的指令碼。或者,您也可以在執行查詢前,按 Control+T 將執行輸出模式切換為「結果轉成文字」。
- Visual Studio Code:使用 MSSQL 擴充功能連線、執行程序,並在「Messages」分頁中查看產生的指令碼。
sqlcmd 公用程式:連線至執行個體,並將產生的指令碼直接輸出至 SQL 檔案:
sqlcmd -S INSTANCE_IP \ -U USERNAME \ -P PASSWORD -d msdb \ -Q "EXEC dbo.sp_help_revlogin" -o output_logins.sql更改下列內容:
INSTANCE_IP:Cloud SQL 執行個體的 IP 位址。USERNAME:管理資料庫使用者名稱 (例如sqlserver)。PASSWORD:您的資料庫使用者密碼。
使用 sp_help_revlogin 匯出登入項目
連線至 msdb 資料庫,然後執行 sp_help_revlogin 預存程序。
如要匯出所有顧客登入資訊,請按照下列步驟操作:
EXEC msdb.dbo.sp_help_revlogin;如要匯出特定登入資訊,請按照下列步驟操作:
EXEC msdb.dbo.sp_help_revlogin @login_name = 'LOGIN_NAME';將
LOGIN_NAME替換為要匯出的登入名稱。
在目的地執行個體上重新建立登入項目
- 從查詢輸出內容複製產生的
CREATE LOGIN陳述式。 - 連線至目的地 SQL Server 執行個體。
- 在查詢視窗中或使用
sqlcmd執行產生的陳述式。
產生的陳述式會在目的地執行個體上建立登入項目,並使用原始 SID、預設資料庫和密碼雜湊。如要進一步瞭解在執行個體之間轉移登入資訊時的注意事項,請參閱 Microsoft 說明文件「在 SQL Server 執行個體之間轉移登入資訊和密碼」。
限制和排除的登入方式
sp_help_revlogin 會自動從匯出作業中排除下列登入類型:
- Google Cloud 服務帳戶和內部管理帳戶。
- 內部 SQL Server 系統帳戶 (登入名稱前置字元為
##)。 - 指派給
sysadmin固定伺服器角色的登入。 - 指派給受限管理伺服器角色的登入。
停用資料庫旗標
如果不再需要預存程序,請將旗標設為 off (或從執行個體中移除旗標):
Google Cloud 控制台
- 前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 請按一下執行個體名稱,開啟執行個體的「Overview」 (總覽) 頁面。
- 按一下 [編輯]。
- 在「自訂執行個體」部分,展開「旗標」。
- 找到「cloud sql enable sp_help_revlogin」,並將值設為「off」(或按一下「刪除」�
- 按一下 [儲存]。
gcloud CLI
gcloud sql instances patch INSTANCE_NAME \ --database-flags="cloud sql enable sp_help_revlogin=off"
設為 off 或移除時,Cloud SQL 會自動從 msdb 資料庫捨棄 dbo.sp_help_revlogin。
後續步驟
- 如要進一步瞭解 SQL Server 使用者,請參閱「SQL Server 使用者」。
- 如要進一步瞭解如何設定資料庫旗標,請參閱「設定資料庫旗標」。
- 如要進一步瞭解支援的預存程序,請參閱「SQL Server 預存程序」。
- 如要進一步瞭解如何轉移登入和密碼,請參閱在 SQL Server 執行個體之間轉移登入和密碼。