本頁說明如何啟用及使用 Cloud SQL 內建驗證機制。
如需總覽,請參閱「Cloud SQL 內建資料庫驗證機制」。建立使用者前
- 建立 Cloud SQL 執行個體。詳情請參閱建立執行個體。
 - 為執行個體啟用密碼政策。詳情請參閱「執行個體密碼政策」。
 如果您打算使用資料庫的管理用戶端管理使用者,請按照下列步驟操作:
將用戶端連線至執行個體。 請參閱「外部應用程式的連線選項」。
設定密碼,在執行個體上設定預設使用者。 請參閱設定預設使用者帳戶的密碼。
設定預設使用者帳戶的密碼
建立新的 Cloud SQL 執行個體時,必須先設定預設使用者帳戶的密碼,才能連線至執行個體。
若使用 MySQL 適用的 Cloud SQL,預設使用者是root@%。這表示資料庫使用者名稱為 root,可從任何主機 (@%) 連線。
控制台
- 
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
 - 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
 - 在 SQL 導覽選單中選取「使用者」。
 - 找到 
root使用者,然後從更多動作選單
 選取「變更密碼」。
        請參考密碼的列出規定,這些規定是根據為執行個體設定的密碼政策而來。
 - 輸入您記得的高強度密碼,然後按一下「確定」。
 
gcloud
使用 
  gcloud sql users set-password 指令,為預設使用者設定密碼。
執行指令前,請將 INSTANCE_NAME 替換為執行個體名稱。
gcloud sql users set-password root \ --host=% \ --instance=INSTANCE_NAME \ --prompt-for-password
REST v1
如要更新預設使用者帳戶的密碼,請使用 PUT 要求搭配 users:update 方法。
使用任何要求資料之前,請先替換以下項目:
- project-id:您的專案 ID
 - instance-id:所需執行個體 ID
 - password:使用者的密碼
 
HTTP 方法和網址:
PUT https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users?name=root&host=%25
JSON 要求主體:
{
  "name": "root",
  "password": "password"
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "[email protected]",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "UPDATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
REST v1beta4
如要更新預設使用者帳戶的密碼,請使用 users:update 方法發出 PUT 要求。
使用任何要求資料之前,請先替換以下項目:
- project-id:您的專案 ID
 - instance-id:所需執行個體 ID
 - password:使用者的密碼
 
HTTP 方法和網址:
PUT https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users?name=root&host=%25
JSON 要求主體:
{
  "name": "root",
  "password": "password"
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "[email protected]",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "UPDATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
新增使用者
設定預設使用者帳戶後,即可建立其他使用者。
控制台
- 
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
 - 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
 - 在 SQL 導覽選單中選取「使用者」。
 - 按一下「新增使用者帳戶」。
  
  
在「Add a user account to instance instance_name」(在執行個體「instance_name」中新增使用者帳戶) 頁面中,您可以選擇使用者是否要透過內建資料庫方法 (使用者名稱和密碼) 驗證,或是以 IAM 使用者身分驗證。
 - 選取「內建驗證」 (預設),並新增下列資訊:
     
- 「User name」(使用者名稱)。
 - (選用步驟) 「Password」(密碼)。設定您記得的高強度密碼。
 - (選用步驟) 使用者密碼政策。
 - 在「主機名稱」部分,預設為「允許任何主機」,表示使用者可以從任何 IP 位址連線。(選用) 選取「依 IP 位址或位址範圍限制主機」,然後在「主機」區段中輸入 IP 位址或位址範圍。使用者只能從指定的 IP 位址或位址連線。
 
 - 按一下「新增」。
 
使用 MySQL 8.0 以上版本和 Cloud SQL 驗證方法在執行個體上建立的使用者,會自動獲得 cloudsqlsuperuser 角色,並具備與此角色相關聯的下列權限:CREATEROLE、CREATEDB 和 LOGIN。
    使用 MySQL 5.7 和 Cloud SQL 驗證方法在執行個體上建立的使用者,會自動獲得 FILE 和 SUPER 以外的所有權限。如要變更這些使用者的權限,請在 mysql 用戶端中使用 GRANT 或 REVOKE 指令。
  
如要進一步瞭解這些使用者帳戶和權限,請參閱「 其他 MySQL 使用者帳戶」。
gcloud
如要建立使用者,請使用 
  gcloud sql users create 指令。
更改下列內容:
- USER_NAME:使用者名稱。
 - HOST:使用者的主機名稱,可以是特定 IP 位址、位址範圍或任何主機 (
%)。 - INSTANCE_NAME:執行個體的名稱。
 - PASSWORD:使用者的密碼。
 
gcloud sql users create USER_NAME \ --host=HOST \ --instance=INSTANCE_NAME \ --password=PASSWORD
使用 MySQL 8.0 以上版本和 Cloud SQL 驗證方法在執行個體上建立的使用者,會自動獲得 cloudsqlsuperuser 角色,並具備與此角色相關聯的下列權限:CREATEROLE、CREATEDB 和 LOGIN。
    使用 MySQL 5.7 和 Cloud SQL 驗證方法在執行個體上建立的使用者,會自動獲得 FILE 和 SUPER 以外的所有權限。如要變更這些使用者的權限,請在 mysql 用戶端中使用 GRANT 或 REVOKE 指令。
  
如要進一步瞭解這些使用者帳戶和權限,請參閱「 其他 MySQL 使用者帳戶」。
Cloud SQL 的使用者名稱長度限制與地端 MySQL 相同:MySQL 8.0 以上版本為 32 個字元,舊版則為 16 個字元。
建立使用者時,您可以新增使用者密碼政策參數。
Terraform
如要建立使用者,請使用 Terraform 資源。
套用變更
如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。
準備 Cloud Shell
- 啟動 Cloud Shell。
 - 
    
設定要套用 Terraform 設定的預設 Google Cloud 專案。
每項專案只需要執行一次這個指令,且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。
 
準備目錄
每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。
- 
    在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱的副檔名必須是 
.tf,例如main.tf。在本教學課程中,這個檔案稱為main.tf。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
 - 
    
如果您正在學習教學課程,可以複製每個章節或步驟中的範例程式碼。
將範例程式碼複製到新建立的
main.tf。視需要從 GitHub 複製程式碼。如果 Terraform 代码片段是端對端解決方案的一部分,建議使用這個方法。
 - 查看並修改範例參數,套用至您的環境。
 - 儲存變更。
 - 
    初始化 Terraform。每個目錄只需執行一次這項操作。
    
terraform init
如要使用最新版 Google 供應商,請加入
-upgrade選項:terraform init -upgrade
 
套用變更
- 
    檢查設定,確認 Terraform 即將建立或更新的資源符合您的預期:
terraform plan
視需要修正設定。
 - 
    執行下列指令並在提示中輸入 
yes,即可套用 Terraform 設定:terraform apply
等待 Terraform 顯示「Apply complete!」訊息。
 - 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。
 
刪除變更
如要刪除變更,請按照下列步驟操作:
- 如要停用防刪除功能,請在 Terraform 設定檔中將 
deletion_protection引數設為false。deletion_protection = "false"
 - 執行下列指令,並在提示中輸入 
yes,套用更新的 Terraform 設定:terraform apply
 
- 
             
執行下列指令,並在提示中輸入
yes,即可移除先前透過 Terraform 設定套用的資源:terraform destroy
 
REST v1
如要建立使用者,請使用 POST 要求和 users:insert 方法。
使用任何要求資料之前,請先替換以下項目:
- project-id:您的專案 ID
 - instance-id:所需執行個體 ID
 - user-id:使用者 ID
 - password:使用者的密碼
 
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users
JSON 要求主體:
{
  "name": "user-id",
  "password": "password"
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "[email protected]",
  "insertTime": "2020-02-07T22:44:16.656Z",
  "startTime": "2020-02-07T22:44:16.686Z",
  "endTime": "2020-02-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
使用 MySQL 8.0 以上版本和 Cloud SQL 驗證方法在執行個體上建立的使用者,會自動獲得 cloudsqlsuperuser 角色,並具備與此角色相關聯的下列權限:CREATEROLE、CREATEDB 和 LOGIN。
    使用 MySQL 5.7 和 Cloud SQL 驗證方法在執行個體上建立的使用者,會自動獲得 FILE 和 SUPER 以外的所有權限。如要變更這些使用者的權限,請在 mysql 用戶端中使用 GRANT 或 REVOKE 指令。
  
如要進一步瞭解這些使用者帳戶和權限,請參閱「 其他 MySQL 使用者帳戶」。
Cloud SQL 的使用者名稱長度限制與地端 MySQL 相同:MySQL 8.0 以上版本為 32 個字元,舊版則為 16 個字元。
建立使用者時,您可以新增使用者密碼政策參數。
REST v1beta4
如要建立使用者,請使用 POST 要求和 users:insert 方法。
使用任何要求資料之前,請先替換以下項目:
- project-id:您的專案 ID
 - instance-id:所需執行個體 ID
 - user-id:使用者 ID
 - password:使用者的密碼
 
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users
JSON 要求主體:
{
  "name": "user-id",
  "password": "password"
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "[email protected]",
  "insertTime": "2020-02-07T22:44:16.656Z",
  "startTime": "2020-02-07T22:44:16.686Z",
  "endTime": "2020-02-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
使用 MySQL 8.0 以上版本和 Cloud SQL 驗證方法在執行個體上建立的使用者,會自動獲得 cloudsqlsuperuser 角色,並具備與此角色相關聯的下列權限:CREATEROLE、CREATEDB 和 LOGIN。
    使用 MySQL 5.7 和 Cloud SQL 驗證方法在執行個體上建立的使用者,會自動獲得 FILE 和 SUPER 以外的所有權限。如要變更這些使用者的權限,請在 mysql 用戶端中使用 GRANT 或 REVOKE 指令。
  
如要進一步瞭解這些使用者帳戶和權限,請參閱「 其他 MySQL 使用者帳戶」。
Cloud SQL 的使用者名稱長度限制與地端 MySQL 相同:MySQL 8.0 以上版本為 32 個字元,舊版則為 16 個字元。
建立使用者時,您可以新增使用者密碼政策參數。
mysql 用戶端
- 如要建立使用者,請在 
mysql提示中,使用下列 CREATE USER 陳述式:CREATE USER 'USER_NAME'@'%' IDENTIFIED BY 'PASSWORD';
視需要新增使用者密碼政策參數。
 - 您可以顯示使用者資料表以確認建立使用者:
 如果是第二代執行個體, 輸出內容會與下列範例相似:SELECT user, host FROM mysql.user;
+----------+-----------+ | user | host | +----------+-----------+ | root | % | | newuser | % | +----------+-----------+ 1 row in set (0.01 sec)
 - 透過 
GRANT陳述式授予使用者權限。詳情請參閱「MySQL 提供的權限」。 - 
  清除 
mysql.user表格,確保變更會持續存在:FLUSH TABLES mysql.user;
 
設定使用者密碼政策
您可以使用內建驗證類型設定密碼政策。
控制台
- 
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
 - 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
 - 在 SQL 導覽選單中選取「使用者」。
 - 針對要變更政策的使用者,按一下「更多動作」圖示 
。 - 選取「編輯密碼政策」。
 - 在「密碼政策」部分,選取下列一或多個選項:
      
- 設定密碼有效期限:指定密碼有效期限的天數,使用者必須在期限過後建立新密碼。
 - 嘗試失敗後鎖定:指定使用者嘗試輸入密碼錯誤的次數上限,一旦超出限制,帳戶就會遭到鎖定。
僅支援 MySQL 8.0 以上版本的 Cloud SQL。
 - 變更密碼時,必須提供目前的密碼:要求使用者在嘗試變更密碼時輸入現有密碼。
 
 
gcloud
如要設定使用者密碼政策,請使用 
  gcloud sql users set-password-policy 指令。
  使用 --password-policy-enable-password-verification 強制使用者在嘗試變更密碼時輸入現有密碼。如要停用這項參數,請使用 --no-password-policy-enable-password-verification。
  
更改下列內容:
- USER_NAME:使用者名稱。
 - INSTANCE_NAME:執行個體的名稱。
 - HOST:使用者的主機名稱,可以是特定 IP 位址、位址範圍或任何主機 (
%)。 - PASSWORD_POLICY_ALLOWED_FAILED_ATTEMPTS:選用:使用者輸入錯誤密碼的次數上限,超過這個次數後,帳戶就會遭到鎖定。使用 
--password-policy-enable-failed-attempts-check啟用檢查,並使用--no-password-policy-enable-failed-attempts-check停用檢查。 - PASSWORD_POLICY_PASSWORD_EXPIRATION_DURATION:(選填) 指定密碼失效的天數,使用者必須在這段時間內建立新密碼。
 
gcloud sql users set-password-policy USER_NAME \ --instance=INSTANCE_NAME \ --host=HOST \ --password-policy-enable-failed-attempts-check \ --password-policy-allowed-failed-attempts=PASSWORD_POLICY_ALLOWED_FAILED_ATTEMPTS \ --password-policy-password-expiration-duration=PASSWORD_POLICY_PASSWORD_EXPIRATION_DURATION \ --password-policy-enable-password-verification
如要移除使用者密碼政策,請使用 --clear-password-policy 參數。
  
gcloud sql users set-password-policy USER_NAME \ --instance=INSTANCE_NAME \ --host=HOST \ --clear-password-policy
如要查看使用者密碼政策,請參閱「 列出使用者」。
REST v1
如要設定使用者密碼政策,請使用 users:update 方法發出 PUT 要求。
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:您的專案 ID
 - INSTANCE_ID:執行個體 ID
 - USER_ID:使用者 ID
 - PASSWORD:使用者密碼
 - FAILED_ATTEMPTS_CHECK:設為 
true可啟用檢查,判斷登入失敗次數是否超過上限,並在超過上限時鎖定帳戶 - NUMBER_OF_ATTEMPTS:帳戶遭鎖定前允許的登入嘗試失敗次數
 - PASSWORD_EXPIRATION_DURATION:密碼到期天數,到期後使用者必須建立新密碼
 - VERIFY_PASSWORD:設為 
true,強制使用者在嘗試變更密碼時輸入現有密碼 
HTTP 方法和網址:
PUT https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users?name=USER_ID
JSON 要求主體:
{
  "name": "USER_ID",
  "password": "PASSWORD",
  "data":
  {
    "passwordValidationUserPolicy" : {
      {
        "enableFailedAttemptsCheck" : "FAILED_ATTEMPTS_CHECK",
        "allowedFailedAttempts" : "NUMBER_OF_ATTEMPTS",
        "passwordExpirationDuration" : "PASSWORD_EXPIRATION_DURATION",
        "enablePasswordVerification" : "VERIFY_PASSWORD"
      }
    },
  }
}如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
如要查看使用者密碼政策,請參閱「 列出使用者」。
REST v1beta4
如要設定使用者密碼政策,請使用 users:update 方法發出 PUT 要求。
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:您的專案 ID
 - INSTANCE_ID:執行個體 ID
 - USER_ID:使用者 ID
 - PASSWORD:使用者密碼
 - FAILED_ATTEMPTS_CHECK:設為 
true可啟用檢查,判斷登入失敗次數是否超過上限,並在超過上限時鎖定帳戶 - NUMBER_OF_ATTEMPTS:帳戶遭鎖定前允許的登入嘗試失敗次數
 - PASSWORD_EXPIRATION_DURATION:密碼到期天數,到期後使用者必須建立新密碼
 - VERIFY_PASSWORD:設為 
true,強制使用者在嘗試變更密碼時輸入現有密碼 
HTTP 方法和網址:
PUT https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users?name=USER_ID
JSON 要求主體:
{
  "name": "USER_ID",
  "password": "PASSWORD",
  "data":
  {
    "passwordValidationUserPolicy" : {
      {
        "enableFailedAttemptsCheck" : "FAILED_ATTEMPTS_CHECK",
        "allowedFailedAttempts" : "NUMBER_OF_ATTEMPTS",
        "passwordExpirationDuration" : "PASSWORD_EXPIRATION_DURATION",
        "enablePasswordVerification" : "VERIFY_PASSWORD"
      }
    },
  }
}如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
如要查看使用者密碼政策,請參閱「 列出使用者」。
mysql 用戶端
如要設定使用者密碼政策,請在 mysql 提示中,使用下列 
ALTER USER 陳述式:
ALTER USER USER_NAME FAILED_LOGIN_ATTEMPTS ALLOWED_FAILED_ATTEMPTS PASSWORD EXPIRE INTERVAL PASSWORD_EXPIRATION_DURATION DAY PASSWORD REQUIRE CURRENT;
更改下列內容:
- USER_NAME:使用者名稱。
 - ALLOWED_FAILED_ATTEMPTS:選用:使用者輸入密碼錯誤的次數上限,超過這個次數後,帳戶就會遭到鎖定。
 - PASSWORD_EXPIRATION_DURATION:(選填) 指定密碼失效的天數,使用者必須在這段時間內建立新密碼。
 
  使用 PASSWORD REQUIRE CURRENT 選項,強制使用者在嘗試變更密碼時輸入現有密碼。
如要查看使用者密碼政策,請參閱「列出使用者」。
列出使用者
控制台
- 
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
 - 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
 - 在 SQL 導覽選單中選取「使用者」。
    
    
清單會顯示每位使用者的
User name、Host name和Authentication類型。此外,如果是內建驗證類型,系統也會顯示
Password status。 
gcloud
使用 gcloud sql users list 指令列出這個執行個體的使用者:
gcloud sql users list \ --instance=INSTANCE_NAME
這個指令會傳回每位使用者的 Name、Host 和驗證 Type。
此外,如果是內建驗證類型,系統會傳回密碼政策設定和狀態。例如:
    NAME    HOST    TYPE        PASSWORD_POLICY
    user1           BUILT_IN    {'allowedFailedAttempts': 2,
                                 'enableFailedAttemptsCheck': True,
                                 'passwordExpirationDuration': '7d',
                                 'status': {
                                   'locked': True,
                                   'passwordExpirationTime': '2022-07-01T19:53:45.822742904Z'
                                 }
                                }
   REST v1
如要列出為執行個體定義的使用者,請使用 GET 要求和 users:list 方法。
使用任何要求資料之前,請先替換以下項目:
- project-id:您的專案 ID
 - instance-id:所需執行個體 ID
 
HTTP 方法和網址:
GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{
  "kind": "sql#usersList",
  "items": [
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "sqlserver",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "user-id-1",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "user-id-2",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      ...
    },
    {
      ...
    }
  ]
}
如果已設定使用者密碼政策,回應的 items 區段會包含 passwordPolicy 區段。以下程式碼範例顯示 passwordPolicy 區段。
  {
  ...
  "passwordValidationUserPolicy" : {
    {
      "enableFailedAttemptsCheck" : true,
      "allowedFailedAttempts" : 8,
      "passwordExpirationDuration" : "7d",
      "enablePasswordVerification" : true
    }
  },
  ...
}
  REST v1beta4
如要列出為執行個體定義的使用者,請使用 GET 要求和 users:list 方法。
使用任何要求資料之前,請先替換以下項目:
- project-id:您的專案 ID
 - instance-id:所需執行個體 ID
 
HTTP 方法和網址:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{
  "kind": "sql#usersList",
  "items": [
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "sqlserver",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "user-id-1",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "user-id-2",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      ...
    },
    {
      ...
    }
  ]
}
如果已設定使用者密碼政策,回應的 items 區段會包含 passwordPolicy 區段。以下程式碼範例顯示 passwordPolicy 區段。
  {
  ...
  "passwordValidationUserPolicy" : {
    {
      "enableFailedAttemptsCheck" : true,
      "allowedFailedAttempts" : 8,
      "passwordExpirationDuration" : "7d",
      "enablePasswordVerification" : true
    }
  },
  ...
}
  mysql 用戶端
如要列出 MySQL 使用者,請在 mysql 提示中,使用下列 
SELECT 陳述式:
SELECT user, host FROM mysql.user;
如果第二代執行個體只設定了 root 使用者帳戶,
輸出內容會類似於以下範例:
+------+-----------+ | user | host | +------+-----------+ | root | % | +------+-----------+ 1 row in set (0.01 sec)
這個範例顯示執行個體的使用者 (root 使用者)。這個使用者可以從任何主機連線 (%)。密碼欄位會顯示密碼的雜湊值。
變更使用者密碼
您可以透過下列其中一種方式變更使用者密碼。
控制台
- 
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
 - 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
 - 在 SQL 導覽選單中選取「使用者」。
 - 針對要更新的使用者,按一下「更多動作」圖示 
。 - 選取「變更密碼」。
 - 指定新密碼。
    
    
此外,如要繼續使用舊密碼,請選取「保留目前密碼」核取方塊。
 - 按一下「確定」。
 
gcloud
使用 
  gcloud sql users set-password 指令變更密碼。
更改下列內容:
- USER_NAME:使用者名稱。
 - HOST:使用者的主機名稱,可以是特定 IP 位址、位址範圍或任何主機 (
%)。 - INSTANCE_NAME:執行個體的名稱。
 - PASSWORD:密碼。如果已設定密碼政策,密碼必須符合相關規定。
 
  (選用) 如果是 MySQL 8.0 以上版本,您可以使用 --retain-password 選項,繼續允許使用者使用舊密碼。如要捨棄舊密碼,請使用 --discard-dual-password 選項。
gcloud sql users set-password USER_NAME \ --host=HOST \ --instance=INSTANCE_NAME \ --password=PASSWORD
REST v1
如要變更使用者密碼,請使用 PUT 要求搭配 users:update 方法。
以下要求會更新使用者帳戶「user_name'@'%」的密碼。如果使用者有不同的主機,您必須使用正確的主機修改呼叫。
使用任何要求資料之前,請先替換以下項目:
- project-id:您的專案 ID
 - instance-id:所需執行個體 ID
 - user-id:使用者 ID
 - password:使用者的新密碼
 - dual-password:下列其中一個列舉值:
  
DUAL_PASSWORD:使用者可以繼續使用舊密碼。NO_DUAL_PASSWORD:使用者無法使用舊密碼。NO_MODIFY_DUAL_PASSWORD:雙重密碼狀態維持不變。
 
HTTP 方法和網址:
PUT https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users?name=user-id
JSON 要求主體:
{
  "name": "user-id",
  "password": "password",
  "retainedPassword" : "dual-password"
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "[email protected]",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "UPDATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
REST v1beta4
如要變更使用者密碼,請使用 PUT 要求搭配 users:update 方法。
以下要求會更新使用者帳戶「user_name'@'%」的密碼。如果使用者有不同的主機,您必須使用正確的主機修改呼叫。
使用任何要求資料之前,請先替換以下項目:
- project-id:您的專案 ID
 - instance-id:所需執行個體 ID
 - user-id:使用者 ID
 - password:使用者的新密碼
 - dual-password:下列其中一個列舉值:
  
DUAL_PASSWORD:使用者可以繼續使用舊密碼。NO_DUAL_PASSWORD:使用者無法使用舊密碼。NO_MODIFY_DUAL_PASSWORD:雙重密碼狀態維持不變。
 
HTTP 方法和網址:
PUT https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users?name=user-id
JSON 要求主體:
{
  "name": "user-id",
  "password": "password",
  "retainedPassword" : "dual-password"
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "[email protected]",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "UPDATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
mysql 用戶端
- 如要變更密碼,請在 
mysql提示中,使用下列 SET PASSWORD 陳述式:SET PASSWORD FOR USER_NAME = PASSWORD('auth_string');
 - 清除 
mysql.user表格,確保變更會持續存在:FLUSH TABLES mysql.user;
 
如果使用者因密碼政策設定而遭到鎖定,請變更密碼來解鎖。變更密碼時,請務必遵守密碼政策。
移除使用者密碼政策
如果使用者採用內建驗證類型,您可以移除密碼政策。
gcloud
如要移除使用者密碼政策,請使用 
  gcloud sql users set-password-policy 指令和 --clear-password-policy 參數。
更改下列內容:
- USER_NAME:使用者名稱
 - INSTANCE_NAME:執行個體的名稱
 - HOST:使用者的主機名稱,可以是特定 IP 位址、位址範圍或任何主機 (
%) 
gcloud sql users set-password-policy USER_NAME \ --instance=INSTANCE_NAME \ --host=HOST \ --clear-password-policy
REST v1
如要移除使用者密碼政策,請使用 users:update 方法發出 PUT 要求。
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:您的專案 ID
 - INSTANCE_ID:執行個體 ID
 - USER_ID:使用者 ID
 - PASSWORD:使用者密碼
 
HTTP 方法和網址:
PUT https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users?name=USER_ID
JSON 要求主體:
{
  "name": "USER_ID",
  "password": "PASSWORD",
  "data":
  {
    "passwordValidationUserPolicy" : {}
  }
}如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
REST v1beta4
如要移除使用者密碼政策,請使用 users:update 方法發出 PUT 要求。
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:您的專案 ID
 - INSTANCE_ID:執行個體 ID
 - USER_ID:使用者 ID
 - PASSWORD:使用者密碼
 
HTTP 方法和網址:
PUT https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users?name=USER_ID
JSON 要求主體:
{
  "name": "USER_ID",
  "password": "PASSWORD",
  "data":
  {
    "passwordValidationUserPolicy" : {}
  }
}如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
移除使用者
預設使用者可以移除其他使用者。
移除使用者前,您必須捨棄該使用者擁有的所有物件或重新指派擁有權,並撤銷角色在其他物件上獲得的任何權限。
控制台
- 
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
 - 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
 - 在 SQL 導覽選單中選取「使用者」。
 - 針對要移除的使用者,按一下「更多動作」圖示 
。 - 依序選取「移除」及「移除」。
 
gcloud
使用 
  gcloud sql users delete 指令移除使用者。
更改下列內容:
- USER_NAME:使用者名稱。
 - HOST:使用者的主機名稱,可以是特定 IP 位址、位址範圍或任何主機 (
%)。 - INSTANCE_NAME:執行個體的名稱。
 
gcloud sql users delete USER_NAME \ --host=HOST \ --instance=INSTANCE_NAME
REST v1
以下要求使用 users:delete 方法刪除指定使用者帳戶。
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:您的專案 ID
 - INSTANCE_ID:所需執行個體 ID
 - USERNAME:使用者或服務帳戶的電子郵件地址
 
HTTP 方法和網址:
DELETE https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "DONE",
  "user": "[email protected]",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "DELETE_USER",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}
REST v1beta4
以下要求使用 users:delete 方法刪除指定使用者帳戶。
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:您的專案 ID
 - INSTANCE_ID:所需執行個體 ID
 - USERNAME:使用者或服務帳戶的電子郵件地址
 
HTTP 方法和網址:
DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "DONE",
  "user": "[email protected]",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "DELETE_USER",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}
mysql 用戶端
- 如要刪除使用者,請在 
mysql提示中,使用下列 DROP USER 陳述式:DROP USER 'USER_NAME'@'HOST_NAME';
 - 清除 
mysql.user表格,確保變更會持續存在:FLUSH TABLES mysql.user;
 
更新使用者屬性
如要更新使用者屬性,如主機或權限等,您必須使用mysql用戶端。詳情請參閱 MySQL 說明文件中的 MySQL 使用者帳戶管理一文。
後續步驟
- 進一步瞭解 Cloud SQL 如何與使用者搭配運作。
 - 閱讀有關建立使用者的 MySQL 說明文件。
 - 瞭解如何連線到執行個體。