這個頁面說明 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_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'@'%'
。您會使用這個帳戶首次連線至資料庫執行個體並管理該執行個體。預設使用者具備所有資料庫權限,但 SUPER 和 FILE 除外。在 Cloud SQL 中,您無法重新命名 'root'@'%'
。
root'@'%
的預設值為無密碼,MySQL 不會要求您為 root'@'%
使用密碼。不過,由於大多數 MySQL 安裝作業都會產生 root'@'%
,因此 root'@'%
使用者經常會成為未經授權存取的目標。任何取得執行個體存取權的使用者或程式,幾乎都能無限制地存取及控制您的執行個體和資料。因此,建議您為 root'@'%
使用者設定高強度密碼,或刪除這位使用者。如需設定預設使用者帳戶的說明,請參閱「設定預設使用者帳戶」。
系統使用者
系統使用者共有七個:
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 群組驗證。
您不能刪除或修改這些使用者。
其他 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
)
在 Cloud SQL for MySQL 8.0 中,建立新使用者時,系統會自動授予該使用者 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_ADMIN
CONNECTION_ADMIN
ROLE_ADMIN
SET_USER_ID
XA_RECOVER_ADMIN
CLOUDSQL_SPECIAL_VARIABLES_ADMIN
FLUSH_OPTIMIZER_COSTS
FLUSH_STATUS
FLUSH_TABLES
FLUSH_USER_RESOURCES
INNODB_REDO_LOG_ENABLE
SHOW_ROUTINE
AUTHENTICATION_POLICY_ADMIN
GROUP_REPLICATION_STREAM
PASSWORDLESS_USER_ADMIN
AUDIT_ABORT_EXEMPT
MySQL 8.0.29 (已淘汰)
APPLICATION_PASSWORD_ADMIN
CONNECTION_ADMIN
ROLE_ADMIN
SET_USER_ID
XA_RECOVER_ADMIN
CLOUDSQL_SPECIAL_VARIABLES_ADMIN
FLUSH_OPTIMIZER_COSTS
FLUSH_STATUS
FLUSH_TABLES
FLUSH_USER_RESOURCES
INNODB_REDO_LOG_ENABLE
SHOW_ROUTINE
AUTHENTICATION_POLICY_ADMIN
GROUP_REPLICATION_STREAM
PASSWORDLESS_USER_ADMIN
AUDIT_ABORT_EXEMPT
SENSITIVE_VARIABLES_OBSERVER
MySQL 8.0.30 以上版本
APPLICATION_PASSWORD_ADMIN
CONNECTION_ADMIN
ROLE_ADMIN
SET_USER_ID
XA_RECOVER_ADMIN
CLOUDSQL_SPECIAL_VARIABLES_ADMIN
FLUSH_OPTIMIZER_COSTS
FLUSH_STATUS
FLUSH_TABLES
FLUSH_USER_RESOURCES
INNODB_REDO_LOG_ENABLE
SHOW_ROUTINE
AUTHENTICATION_POLICY_ADMIN
GROUP_REPLICATION_STREAM
PASSWORDLESS_USER_ADMIN
AUDIT_ABORT_EXEMPT
SENSITIVE_VARIABLES_OBSERVER
FIREWALL_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 8.4 中引入的 TRANSACTION_GTID_TAG
或 TELEMETRY_LOG_ADMIN
權限,不會由 MySQL 適用的 Cloud SQL 8.4 授予。
後續步驟
- 為執行個體設定
root
使用者帳戶。 - 建立及管理使用者。
- 建立及管理資料庫。
- 請參閱有關 MySQL 使用者的 MySQL 說明文件。
- 請參閱 MySQL 說明文件,瞭解 MySQL 提供的權限。
- 瞭解連線至執行個體的選項。