關於 MySQL 使用者

這個頁面說明 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_expanded
  • audit_log_supported_ops
  • audit_log_rules
  • cloudsql_replica_index
  • db
  • event
  • func
  • heartbeat
  • plugin
  • proc
  • user
  • tables_priv

MySQL 5.7 的清單如下:

  • audit_log_rules_expanded
  • audit_log_supported_ops
  • audit_log_rules
  • cloudsql_replica_index
  • db
  • event
  • func
  • gtid_executed
  • heartbeat
  • plugin
  • proc
  • user
  • tables_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)

在 MySQL 8.0 適用的 Cloud SQL 中,建立新使用者時,系統會自動授予 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 適用的 Cloud SQL 8.4 不會授予 MySQL 8.4 中導入的 TRANSACTION_GTID_TAGTELEMETRY_LOG_ADMIN 權限。

後續步驟