運用內建驗證機制管理使用者

本頁面說明如何啟用並使用 Cloud SQL 內建驗證機制。

如需總覽,請參閱「Cloud SQL 內建資料庫驗證機制」。

建立使用者前

  1. 建立 Cloud SQL 執行個體。詳情請參閱「建立執行個體」。
  2. 為執行個體啟用密碼政策。詳情請參閱「執行個體密碼政策」。
  3. 如果您打算使用資料庫的管理員用戶端來管理使用者,請執行下列操作:

    1. 將用戶端連線至執行個體。請參閱「外部應用程式的連線選項」。

    2. 設定密碼,即可在執行個體上設定預設使用者。請參閱「為預設使用者帳戶設定密碼」。

設定預設使用者帳戶的密碼

建立新的 Cloud SQL 執行個體時,您必須先為預設使用者帳戶設定密碼,才能連線至執行個體。

若使用 MySQL 適用的 Cloud SQL,預設使用者是 root@%。這表示資料庫使用者具有 root 使用者名稱,可從任何主機 (@%) 連線。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中選取「Users」
  4. 找出 root 使用者,然後從「更多動作」選單 更多動作圖示。 中選取「變更密碼」

    請參考列出的密碼規定,這些規定是根據為執行個體設定的密碼政策衍生而來。

  5. 提供你能記住的高強度密碼,然後按一下「確定」

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

如要更新預設使用者帳戶的密碼,請使用 PUT 要求搭配 users:update 方法。

使用任何要求資料之前,請先替換以下項目:

  • 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"
}

新增使用者

設定預設使用者帳戶後,您可以建立其他使用者。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中選取「Users」
  4. 按一下「新增使用者帳戶」

    在「在執行個體 instance_name 中新增使用者帳戶」頁面,您可以選擇使用者要以內建資料庫方法 (使用者名稱和密碼) 驗證,還是以IAM 使用者身分驗證。

  5. 選取「內建驗證」 (預設),然後新增下列資訊:
    • 「User name」(使用者名稱)
    • (非必要) 「密碼」。請提供您能記住的高強度密碼。
    • (非必要) 使用者密碼政策
    • 在「主機名稱」部分,預設值為「允許任何主機」,表示使用者可從任何 IP 位址連線。您可以選擇選取「依 IP 位址或位址範圍限制主機」,然後在「主機」部分輸入 IP 位址或位址範圍。這樣一來,使用者只能透過指定的 IP 位址或位址連線。
  6. 按一下「新增」。

在使用 MySQL 8.0 以上版本和 Cloud SQL 驗證方法的執行個體上建立的使用者,會自動獲得 cloudsqlsuperuser 角色,並具備與此角色相關聯的下列權限:CREATEROLECREATEDBLOGIN

在使用 MySQL 5.7 和 Cloud SQL 驗證方法的執行個體上建立的使用者,會自動獲得 FILESUPER 以外的所有權限。如果您需要變更這些使用者的權限,請在 mysql 用戶端中使用 GRANTREVOKE 指令。

如要進一步瞭解這些使用者帳戶和權限,請參閱「 其他 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 角色,並具備與此角色相關聯的下列權限:CREATEROLECREATEDBLOGIN

在使用 MySQL 5.7 和 Cloud SQL 驗證方法的執行個體上建立的使用者,會自動獲得 FILESUPER 以外的所有權限。如果您需要變更這些使用者的權限,請在 mysql 用戶端中使用 GRANTREVOKE 指令。

如要進一步瞭解這些使用者帳戶和權限,請參閱「 其他 MySQL 使用者帳戶」。

Cloud SQL 的使用者名稱長度限制與內部部署 MySQL 相同,MySQL 8.0 以上版本為 32 個字元,較舊版本則為 16 個字元。

建立使用者時,您可以新增使用者密碼政策參數。

Terraform

如要建立使用者,請使用 Terraform 資源

resource "random_password" "pwd" {
  length  = 16
  special = false
}

resource "google_sql_user" "user" {
  name     = "user"
  instance = google_sql_database_instance.instance.name
  password = random_password.pwd.result
}

套用變更

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節中的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell
  2. 設定要套用 Terraform 設定的預設 Google Cloud 專案。

    您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確的值,系統就會覆寫環境變數。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

  1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須包含 .tf 副檔名,例如 main.tf。在本教學課程中,檔案稱為 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在參考教學課程,可以複製各個章節或步驟中的程式碼範例。

    將範例程式碼複製到新建立的 main.tf 中。

    您可以視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。

  3. 查看並修改要套用至環境的範例參數。
  4. 儲存變更。
  5. 初始化 Terraform。這項操作只需對每個目錄執行一次。
    terraform init

    如要使用最新版的 Google 供應器,請視需要加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 檢查設定,並確認 Terraform 要建立或更新的資源是否符合您的預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,即可套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」(套用完成) 訊息。

  3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

刪除變更

如要刪除變更,請按照下列步驟操作:

  1. 如要停用防刪除功能,請在 Terraform 設定檔中將 deletion_protection 引數設為 false
    deletion_protection =  "false"
  2. 執行下列指令,並在提示中輸入 yes,即可套用更新的 Terraform 設定:
    terraform apply
  1. 如要移除先前透過 Terraform 設定套用的資源,請執行下列指令,並在提示中輸入 yes

    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 角色,並具備與此角色相關聯的下列權限:CREATEROLECREATEDBLOGIN

在使用 MySQL 5.7 和 Cloud SQL 驗證方法的執行個體上建立的使用者,會自動獲得 FILESUPER 以外的所有權限。如果您需要變更這些使用者的權限,請在 mysql 用戶端中使用 GRANTREVOKE 指令。

如要進一步瞭解這些使用者帳戶和權限,請參閱「 其他 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 角色,並具備與此角色相關聯的下列權限:CREATEROLECREATEDBLOGIN

在使用 MySQL 5.7 和 Cloud SQL 驗證方法的執行個體上建立的使用者,會自動獲得 FILESUPER 以外的所有權限。如果您需要變更這些使用者的權限,請在 mysql 用戶端中使用 GRANTREVOKE 指令。

如要進一步瞭解這些使用者帳戶和權限,請參閱「 其他 MySQL 使用者帳戶」。

Cloud SQL 的使用者名稱長度限制與內部部署 MySQL 相同,MySQL 8.0 以上版本為 32 個字元,較舊版本則為 16 個字元。

建立使用者時,您可以新增使用者密碼政策參數。

MySQL 用戶端

  1. 如要建立使用者,請在 mysql 提示中使用下列 CREATE USER 陳述式:
      CREATE USER 'USER_NAME'@'%'
         IDENTIFIED BY 'PASSWORD';
      

    視需要加入使用者密碼政策參數。

  2. 您可以顯示使用者資料表以確認建立使用者:
    SELECT user, host FROM mysql.user;
    對於第二代執行個體,輸出內容會類似以下範例:
    +----------+-----------+
    | user     | host      |
    +----------+-----------+
    | root     | %         |
    | newuser  | %         |
    +----------+-----------+
    1 row in set (0.01 sec)
    
  3. 透過 GRANT 陳述式授予使用者權限。詳情請參閱「MySQL 提供的權限」。
  4. 清除 mysql.user 表格,確保變更內容持續存在:
      FLUSH TABLES mysql.user;

設定使用者密碼政策

您可以使用內建的驗證類型設定密碼政策。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中選取「Users」
  4. 針對您要變更政策的使用者,按一下「更多動作」圖示 更多動作圖示。
  5. 選取「編輯密碼政策」
  6. 在「密碼政策」部分,選取一或多個下列選項:
    • 設定密碼到期日:指定密碼到期後,使用者需要建立新密碼的天數。
    • 失敗後鎖定:指定使用者輸入密碼錯誤次數上限,超過此限制後,系統就會鎖定帳戶。

      僅支援 MySQL 適用的 Cloud SQL 8.0 以上版本。

    • 變更密碼時,必須提供目前的密碼:要求使用者在嘗試變更密碼時輸入現有密碼。

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

如要設定使用者密碼政策,請使用 PUT 要求搭配 users:update 方法。

使用任何要求資料之前,請先替換以下項目:

  • 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

如要設定使用者密碼政策,請使用 PUT 要求搭配 users:update 方法。

使用任何要求資料之前,請先替換以下項目:

  • 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 選項,讓使用者在嘗試變更密碼時,必須輸入現有密碼。

如要查看使用者密碼政策,請參閱「列出使用者」。

列出使用者

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中選取「Users」

    清單會顯示每位使用者的 User nameHost nameAuthentication 類型。

    此外,如果是內建驗證類型,也會顯示 Password status

gcloud

使用 gcloud sql users list 指令,列出這個執行個體的使用者:

gcloud sql users list \
--instance=INSTANCE_NAME

這個指令會傳回每位使用者的 NameHost 和驗證 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 使用者執行個體的使用者。這個使用者可以從任何主機 (%) 連線。密碼欄位會顯示密碼的雜湊值。

變更使用者密碼

您可以透過下列其中一種方式變更使用者密碼。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中選取「Users」
  4. 針對您要更新的使用者,按一下「更多動作」圖示 更多動作圖示。
  5. 選取「變更密碼」
  6. 指定新密碼。

    此外,如果您想繼續使用舊密碼,請選取「保留目前密碼」核取方塊。

  7. 按一下「確定」

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 用戶端

  1. 如要變更密碼,請在 mysql 提示中使用下列 SET PASSWORD 陳述式:
    SET PASSWORD FOR USER_NAME = PASSWORD('auth_string');
  2. 清除 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

如要移除使用者密碼政策,請使用 PUT 要求搭配 users:update 方法。

使用任何要求資料之前,請先替換以下項目:

  • 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

如要移除使用者密碼政策,請使用 PUT 要求搭配 users:update 方法。

使用任何要求資料之前,請先替換以下項目:

  • 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 回應:

移除使用者

預設使用者可以移除使用者。

在移除使用者之前,您必須先刪除該使用者擁有的所有物件,或重新指派其擁有權,並撤銷該角色在其他物件上已授予的任何權限。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中選取「Users」
  4. 針對要移除的使用者,按一下「更多動作」圖示 更多動作圖示。
  5. 依序選取「移除」和「移除」

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 用戶端

  1. 如要刪除使用者,請在 mysql 提示中使用下列 DROP USER 陳述式:
    DROP USER 'USER_NAME'@'HOST_NAME';
  2. 清除 mysql.user 表格,確保變更內容持續存在:
    FLUSH TABLES mysql.user;

更新使用者屬性

如要更新使用者屬性,如主機或權限等,您必須使用 mysql 用戶端。詳情請參閱 MySQL 說明文件中的「MySQL 使用者帳戶管理」一文。

後續步驟