本页面介绍如何启用和使用 Cloud SQL 内置身份验证。
如需查看概览,请参阅 Cloud SQL 内置数据库身份验证。创建用户之前的准备工作
- 创建 Cloud SQL 实例。如需了解详情,请参阅创建实例。
 - 为实例启用密码政策。如需了解详情,请参阅实例密码政策。
 如果您计划使用数据库的管理客户端来管理用户,请执行以下操作:
将客户端连接到实例。请参阅外部应用连接方案。
通过设置密码在实例上配置默认用户。请参阅为默认用户账号设置密码。
为默认用户账号设置密码
创建新的 Cloud SQL 实例时,您必须先为默认用户账号设置密码,然后才能连接到该实例。
对于 Cloud SQL for MySQL,默认用户为root@%。这表示具有用户名 root 的数据库用户,该用户可以从任何主机 (@%) 连接。控制台
- 
在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。
 - 如需打开实例的概览页面,请点击实例名称。
 - 从 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": "user@example.com",
  "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": "user@example.com",
  "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 实例页面。
 - 如需打开实例的概览页面,请点击实例名称。
 - 从 SQL 导航菜单中选择用户。
 - 点击添加用户账号。
  
  
在向实例添加用户账号 instance_name 页面中,您可以选择用户是使用内置数据库方法(用户名和密码)还是作为 IAM 用户进行身份验证。
 - 选择内置身份验证(默认设置),并添加以下信息:
- 用户名。
 - 可选。密码。 提供一个您能记住且安全系数高的密码。
 - 可选。用户密码政策。
 - 主机名部分的默认值为允许任何主机,这意味着用户可以从任何 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 显示“应用完成!”消息。
 - 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 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": "user@example.com",
  "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": "user@example.com",
  "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 实例页面。
 - 如需打开实例的概览页面,请点击实例名称。
 - 从 SQL 导航菜单中选择用户。
 - 点击您要更改其政策的用户的“更多操作”菜单 
。 - 选择修改密码政策。
 - 在密码政策部分中,选择以下一个或多个选项:
- 设置将来会到期的密码:指定密码将在多少天后失效并且用户需要创建新密码。
 - 失败的尝试达到规定次数后锁定用户:指定用户输入错误密码的最大次数,在此之后账户将被锁定。
        
仅受 Cloud SQL for MySQL 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 选项以使用户在尝试更改密码时必须输入其现有密码。
如需查看用户密码政策,请参阅列出用户。
列出用户
控制台
- 
在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。
 - 如需打开实例的概览页面,请点击实例名称。
 - 从 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 实例页面。
 - 如需打开实例的概览页面,请点击实例名称。
 - 从 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": "user@example.com",
  "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": "user@example.com",
  "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
如需移除用户密码政策,请将 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 响应:
移除用户
默认用户可以移除用户。
在移除用户之前,您必须先丢弃该用户拥有的所有对象或重新分配其所有权,并撤消相应角色对其他对象授予的任何权限。
控制台
- 
在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。
 - 如需打开实例的概览页面,请点击实例名称。
 - 从 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": "user@example.com",
  "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": "user@example.com",
  "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 文档。
 - 了解如何连接到实例。