關於 MySQL 使用者

這個頁面說明 Cloud SQL 如何與 MySQL 使用者搭配使用。MySQL 使用者帳戶可控制 MySQL 資料庫的存取權,藉以保障安全。

如需 MySQL 使用者的完整說明文件,請參閱 MySQL 說明文件中的「存取權控管和帳戶管理」。如要瞭解如何在 Cloud SQL 中建立及管理 Cloud SQL 使用者,請參閱「建立及管理使用者」一文。

為什麼需要 MySQL 使用者帳戶

MySQL 使用者帳戶可讓您登入及管理您的 Cloud SQL 執行個體。需要有使用者帳戶,應用程式才能存取您的執行個體。

超級使用者限制

在 Cloud SQL 中,客戶無法建立或存取具備超級使用者屬性的使用者。

由於 Cloud SQL for MySQL 是一項代管服務,因此會限制對特定系統程序和資料表的存取權。

部分結構定義表的資料操縱語言 (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'@'%'。您會使用這個帳戶首次連線至資料庫執行個體並管理該執行個體。預設使用者具備所有資料庫權限,但 SUPERFILE 除外。在 Cloud SQL 中,您無法重新命名 'root'@'%'

root'@'% 的預設值為無密碼,MySQL 不會要求您為 root'@'% 使用密碼。不過,由於大多數 MySQL 安裝作業都會產生 root'@'%,因此 root'@'% 使用者經常會成為未經授權存取的目標。任何取得執行個體存取權的使用者或程式,幾乎都能無限制地存取及控制您的執行個體和資料。因此,建議您為 root'@'% 使用者設定高強度密碼,或刪除這位使用者。如需設定預設使用者帳戶的說明,請參閱「設定預設使用者帳戶」。

系統使用者

系統使用者共有七個:

  • root@localhostroot@127.0.0.1root@::1

    用於提供代管資料庫服務。

  • cloudsqlreplica@%

    做為備援資源的複製使用者。

  • cloudsqlimport@localhostcloudsqlimport@127.0.0.1

    用於匯入資料。

  • cloudsqlexport@localhostcloudsqlexport@127.0.0.1

    用於資料匯出。

  • cloudsqloneshot

    用於其他資料庫作業。

  • cloudsqlapplier@localhost

    用於外部伺服器備用資源或跨主要版本複製作業的複製作業。

  • cloudsqlobservabilityadmin

    用於資料庫觀測。

  • cloudiamgroup@'%'

    用於 IAM 群組驗證。

您不能刪除或修改這些使用者。

其他 MySQL 使用者帳戶

您也可以建立其他 MySQL 使用者帳戶。這是良好的做法,因為您可以使用不同的 MySQL 使用者帳戶來執行不同的用途。

您可以使用受限制的主機名稱建立使用者帳戶,或使用 SQL 指令限制使用者帳戶的權限。

如要進一步瞭解使用者帳戶名稱,請參閱 MySQL 說明文件中的「指定帳戶名稱」。如要在 Cloud SQL 中建立新的 MySQL 使用者,請參閱「建立使用者」一文。

MySQL 5.6 和 5.7 使用者權限

MySQL 提供您可以針對使用者授予或移除的完善權限。這樣一來,您就能控管使用者在執行個體中可執行的操作。

使用 Cloud SQL 建立的使用者具備與預設 MySQL 使用者相同的權限。您可以使用 GRANTREVOKE 陳述式變更權限。

使用 mysql 用戶端建立使用者時,您必須使用 GRANT 陳述式明確授予使用者權限。

如需進一步瞭解 MySQL 支援的權限,請參閱 MySQL 提供的權限

MySQL 8.0 使用者權限 (cloudsqlsuperuser)

在 Cloud SQL for MySQL 8.0 中,建立新使用者時,系統會自動授予該使用者 cloudsqlsuperuser 角色。cloudsqlsuperuser 角色是 Cloud SQL 角色,包含多項 MySQL 權限。這個角色會將所有 MySQL 靜態權限授予使用者,但 SUPERFILE 除外。

cloudsqlsuperuser 角色僅支援下列根據 MySQL 8.0 子版本提供的動態權限

MySQL 8.0.18

MySQL 8.0.26

MySQL 8.0.27

MySQL 8.0.28

MySQL 8.0.29 (已淘汰)

MySQL 8.0.30 以上版本

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 的主要差異如下:

此外,MySQL 8.4 中引入的 TRANSACTION_GTID_TAGTELEMETRY_LOG_ADMIN 權限,不會由 MySQL 適用的 Cloud SQL 8.4 授予。

後續步驟