這個頁面說明 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'@'%'
。您會使用這個帳戶首次連線及管理資料庫執行個體。預設使用者具備所有資料庫權限,但 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
)
在 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_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 適用的 Cloud SQL 8.4 不會授予 MySQL 8.4 中導入的 TRANSACTION_GTID_TAG
或 TELEMETRY_LOG_ADMIN
權限。
後續步驟
- 為執行個體設定
root
使用者帳戶。 - 建立及管理使用者。
- 建立及管理資料庫。
- 請參閱有關 MySQL 使用者的 MySQL 說明文件。
- 請參閱 MySQL 說明文件,瞭解 MySQL 提供的權限。
- 瞭解連線至執行個體的選項。