這個頁面說明 Cloud SQL 如何與 MySQL 使用者搭配使用。MySQL 使用者帳戶可控制 MySQL 資料庫的存取權,藉以保障安全。
如需完整的 MySQL 使用者說明文件,請參閱 MySQL 說明文件中的「存取權控管和帳戶管理」。如要瞭解如何在 Cloud SQL 中建立及管理 Cloud SQL 使用者,請參閱「建立及管理使用者」。
為什麼需要 MySQL 使用者帳戶
MySQL 使用者帳戶可讓您登入及管理您的 Cloud SQL 執行個體。需要有使用者帳戶,應用程式才能存取您的執行個體。
超級使用者限制
在 Cloud SQL 中,客戶無法建立或存取具備超級使用者屬性的使用者。
由於 MySQL 適用的 Cloud SQL 是代管服務,因此會限制特定系統程序和資料表的存取權。
部分結構定義資料表會限制資料操縱語言 (DML) 和資料定義語言 (DDL) 權限。
以下是 mysql 結構定義中需要寫入權限的 MySQL 5.6 系統資料表:
audit_log_rules_expandedaudit_log_supported_opsaudit_log_rulescloudsql_replica_indexdbeventfuncheartbeatpluginprocusertables_priv
MySQL 5.7 的清單如下:
audit_log_rules_expandedaudit_log_supported_opsaudit_log_rulescloudsql_replica_indexdbeventfuncgtid_executedheartbeatpluginprocusertables_priv
如要進一步瞭解 MySQL 8.0 和 MySQL 8.4,請參閱「MySQL 8.0 使用者權限 (cloudsqlsuperuser)」和「MySQL 8.4 使用者權限 (cloudsqlsuperuser)」。
MySQL 使用者帳戶格式
MySQL 使用者帳戶包含兩個部分:使用者名稱和主機名稱。使用者名稱用於識別使用者,主機名稱則指定使用者可從哪些主機連線。使用者名稱和主機名稱會合併建立使用者帳戶:
'<user_name>'@'<host_name>'
您可以為主機名稱指定特定 IP 位址或位址範圍,也可以使用百分比符號「%」讓主機名稱不受限制。請注意,如果您使用 IP 位址連線至執行個體,即使使用者主機名稱不受限制,您也必須將用戶端 IP 位址新增為「授權地址」。
使用者帳戶是由使用者名稱和主機名稱共同定義。舉例來說,'user'@'%' 與 'user'@'localhost' 是不同的使用者帳戶。
預設 MySQL 使用者
建立 MySQL 執行個體時,系統會提供一個預設使用者帳戶:'root'@'%'。您會使用這個帳戶首次連線及管理資料庫執行個體。預設使用者具備所有資料庫權限,但 SUPER 和 FILE 除外。在 Cloud SQL 中,您無法重新命名「'root'@'%'」。
root'@'% 的預設值為無密碼,MySQL 也不會要求您為 root'@'% 使用密碼。不過,由於大多數 MySQL 安裝作業都有 root'@'%,因此 root'@'% 使用者是未經授權存取的常見目標。任何人員或程式只要取得執行個體的存取權,幾乎就能無限存取及控管執行個體和資料。因此,建議您為 root'@'% 使用者設定高強度密碼,或刪除該使用者。如需設定預設使用者帳戶的說明,請參閱設定預設使用者帳戶。
系統使用者
Cloud SQL 支援下列系統使用者:
root@localhost、root@127.0.0.1、root@::1用於提供代管資料庫服務。
cloudsqlreplica@%做為副本的複製使用者。
cloudsqlimport@localhost、cloudsqlimport@127.0.0.1用於匯入資料。
cloudsqlexport@localhost、cloudsqlexport@127.0.0.1用於資料匯出。
cloudsqloneshot用於其他資料庫作業。
cloudsqlapplier@localhost用於外部伺服器副本或跨主要版本複製作業。
cloudsqlobservabilityadmin用於資料庫觀測。
cloudiamgroup@'%'用於 IAM 群組驗證。
cloudsqlreadonly用於對系統資料表執行唯讀作業。
您不能刪除或修改這些使用者。
其他 MySQL 使用者帳戶
您也可以建立其他 MySQL 使用者帳戶。這是個好方法,因為您可針對不同用途使用不同的 MySQL 使用者帳戶。
您可以建立主機名稱受限的使用者帳戶,或使用 SQL 指令限制使用者帳戶的權限。
如要進一步瞭解使用者帳戶名稱,請參閱 MySQL 說明文件中的「指定帳戶名稱」。如要在 Cloud SQL 中建立新的 MySQL 使用者,請參閱「建立使用者」。
MySQL 5.6 和 5.7 版使用者權限
MySQL 提供您可以針對使用者授予或移除的完善權限。藉此控管使用者在執行個體中可執行的操作。
使用 Cloud SQL 建立的使用者具備與預設 MySQL 使用者相同的權限。您可以使用 GRANT 或 REVOKE 陳述式變更權限。
使用 mysql 用戶端建立使用者時,您必須使用 GRANT 陳述式明確授予使用者權限。
如需進一步瞭解 MySQL 支援的權限,請參閱 MySQL 提供的權限。
MySQL 8.0 使用者權限 (cloudsqlsuperuser)
在 MySQL 8.0 適用的 Cloud SQL 中,建立新使用者時,系統會自動授予使用者 cloudsqlsuperuser 角色。cloudsqlsuperuser 角色
是 Cloud SQL 角色,內含多項 MySQL 權限。這個角色會授予使用者所有 MySQL 靜態權限,但 SUPER 和 FILE 除外。
cloudsqlsuperuser 角色僅支援下列動態權限 (以 MySQL 8.0 子版本為準):
MySQL 8.0.18
MySQL 8.0.26
MySQL 8.0.27
MySQL 8.0.28
APPLICATION_PASSWORD_ADMINCONNECTION_ADMINROLE_ADMINSET_USER_IDXA_RECOVER_ADMINCLOUDSQL_SPECIAL_VARIABLES_ADMINFLUSH_OPTIMIZER_COSTSFLUSH_STATUSFLUSH_TABLESFLUSH_USER_RESOURCESINNODB_REDO_LOG_ENABLESHOW_ROUTINEAUTHENTICATION_POLICY_ADMINGROUP_REPLICATION_STREAMPASSWORDLESS_USER_ADMINAUDIT_ABORT_EXEMPT
MySQL 8.0.29 (已淘汰)
APPLICATION_PASSWORD_ADMINCONNECTION_ADMINROLE_ADMINSET_USER_IDXA_RECOVER_ADMINCLOUDSQL_SPECIAL_VARIABLES_ADMINFLUSH_OPTIMIZER_COSTSFLUSH_STATUSFLUSH_TABLESFLUSH_USER_RESOURCESINNODB_REDO_LOG_ENABLESHOW_ROUTINEAUTHENTICATION_POLICY_ADMINGROUP_REPLICATION_STREAMPASSWORDLESS_USER_ADMINAUDIT_ABORT_EXEMPTSENSITIVE_VARIABLES_OBSERVER
MySQL 8.0.30 以上版本
APPLICATION_PASSWORD_ADMINCONNECTION_ADMINROLE_ADMINSET_USER_IDXA_RECOVER_ADMINCLOUDSQL_SPECIAL_VARIABLES_ADMINFLUSH_OPTIMIZER_COSTSFLUSH_STATUSFLUSH_TABLESFLUSH_USER_RESOURCESINNODB_REDO_LOG_ENABLESHOW_ROUTINEAUTHENTICATION_POLICY_ADMINGROUP_REPLICATION_STREAMPASSWORDLESS_USER_ADMINAUDIT_ABORT_EXEMPTSENSITIVE_VARIABLES_OBSERVERFIREWALL_EXEMPT
cloudsqlsuperuser 角色不支援對 mysql 系統資料庫執行任何資料定義語言 (DDL) 作業。
如要查看授予 cloudsqlsuperuser 角色的完整權限清單,請在 mysql 用戶端中執行 SHOW GRANTS 陳述式:
SHOW GRANTS FOR 'cloudsqlsuperuser'
MySQL 8.4 使用者權限 (cloudsqlsuperuser)
與 MySQL 適用的 Cloud SQL 8.0 類似,在 MySQL 適用的 Cloud SQL 8.4 中,建立新使用者時,系統會自動授予 cloudsqlsuperuser 角色。
在 MySQL 8.4 中,cloudsqlsuperuser 角色與 MySQL 8.0.x 具有相同的權限。不過,MySQL 8.4 與 MySQL 8.0.x 的主要差異如下:
- 移除
SET_USER_ID權限,並替換為新推出的ALLOW_NONEXISTENT_DEFINER和SET_ANY_DEFINER權限。 - 授予
FLUSH_PRIVILEGES權限,這是RELOAD權限的子集。這項授權並非取代RELOAD權限,且為了確保回溯相容性,系統仍會授予RELOAD權限。 - 授予新的
OPTIMIZE_LOCAL_TABLE權限。
此外,MySQL 適用的 Cloud SQL 8.4 不會授予 MySQL 8.4 中導入的 TRANSACTION_GTID_TAG 或 TELEMETRY_LOG_ADMIN 權限。
後續步驟
- 為執行個體設定
root使用者帳戶。 - 建立及管理使用者。
- 建立及管理資料庫。
- 請參閱有關 MySQL 使用者的 MySQL 說明文件。
- 請參閱 MySQL 說明文件,瞭解 MySQL 提供的權限。
- 瞭解連線至執行個體的選項。