MySQL ユーザーの作成と管理

このページでは、Cloud SQL インスタンスに対して次の操作を行う方法について説明します。

  • デフォルトのユーザー アカウントを構成します。
  • 他のユーザー アカウントを作成、削除、更新します。

Cloud SQL でのユーザーの詳細については、MySQL ユーザーをご覧ください。

始める前に

以下のタスクを完了する前に、Cloud SQL インスタンスを作成します。詳細については、インスタンスの作成をご覧ください。

データベースの管理クライアントを使用してユーザーを管理する場合は、インスタンスでデフォルト ユーザーを構成しておく必要があります。詳細については、デフォルトのアカウントの構成をご覧ください。

また、インスタンスに接続された管理クライアントを構成しておく必要があります。詳細については、外部アプリケーションのための接続オプションをご覧ください。

デフォルト ユーザー アカウントの構成

新しい Cloud SQL インスタンスを作成する場合、インスタンスに接続するには、デフォルト ユーザー アカウントを構成しておく必要があります。

Cloud SQL for MySQL では、デフォルト ユーザーは root@% です。

デフォルト ユーザーを構成するには:

Console

  1. Google Cloud Console で、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンス名をクリックして [概要] ページを開きます。
  3. SQL ナビゲーション メニューから [ユーザー] を選択します。
  4. root ユーザーを検索し、その他の操作メニュー その他アイコン から [パスワードを変更] を選択します。
  5. 覚えやすく強力なパスワードを指定し、[OK] をクリックします。

gcloud

デフォルト ユーザーのパスワードを設定します。

gcloud sql users set-password root \
--host=% \
--instance=INSTANCE_NAME \
--prompt-for-password

REST v1

次のリクエストでは、users:update メソッドを使用して、root ユーザー アカウント

'root'@'%')を更新します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • password: ユーザーのパスワード

HTTP メソッドと URL:

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

次のリクエストでは、users:update メソッドを使用して、root ユーザー アカウント

'root'@'%')を更新します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • password: ユーザーのパスワード

HTTP メソッドと URL:

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

ユーザーを作成する

Console

  1. Google Cloud Console で、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンス名をクリックして [概要] ページを開きます。
  3. SQL ナビゲーション メニューから [ユーザー] を選択します。
  4. [ユーザー アカウントを追加] をクリックします。

    [ユーザー アカウントをインスタンス instance_name に追加] ページで、ユーザーが組み込みのデータベース メソッド(ユーザー名とパスワード)を使用して認証を行うか、IAM ユーザーとして認証を行うかを選択できます。

    • [組み込み認証](デフォルト)を選択した場合は、次の情報を追加します。
      • ユーザー名
      • パスワード(省略可)
      • [ホスト名] セクションのデフォルト値は [すべてのホストを許可] です。つまり、ユーザーは任意の IP アドレスから接続できます。

        必要に応じて、[IP アドレスまたはアドレス範囲でホストを制限する] を選択し、[ホスト] セクションに IP アドレスまたはアドレス範囲を入力します。これで、ユーザーは指定した IP アドレスからのみ接続できます。

    • [Cloud IAM] を選択した場合は、[メンバー] フィールドに、ユーザーと関連付ける Google Cloud プロジェクトの既存の IAM メンバーのメールアドレスを入力する必要があります。
  5. [追加] をクリックします。

MySQL 8.0 と Cloud SQL の認証方法を使用するインスタンス上に作成されたユーザーには、cloudsqlsuperuser ロールが自動的に付与されます。このロールに関連付けられている権限は、CREATEROLECREATEDBLOGIN です。

MySQL 5.7 と Cloud SQL の認証方法を使用して作成されたインスタンスには、FILESUPER を除くすべての権限が自動的に付与されます。これらのユーザーの権限を変更する必要がある場合は、mysql クライアントで GRANT コマンドまたは REVOKE コマンドを使用します。

gcloud

ユーザーを作成します。

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 クライアントで GRANT コマンドまたは REVOKE コマンドを使用します。

Cloud SQL のユーザー名の長さの上限は、オンプレミス MySQL と同じで、MySQL 8.0 では 32 文字、それ以前のバージョンでは 16 文字です。

REST v1

以下のリクエストでは、users:insert メソッドを使用してユーザー アカウント「user_name」を作成します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • user-id: ユーザーの ID
  • password: ユーザーのパスワード

HTTP メソッドと URL:

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 ロールが自動的に付与されます。このロールに関連付けられている権限は、CREATEROLECREATEDBLOGIN です。

MySQL 5.7 と Cloud SQL の認証方法を使用して作成されたインスタンスには、FILESUPER を除くすべての権限が自動的に付与されます。これらのユーザーの権限を変更する必要がある場合は、mysql クライアントで GRANT コマンドまたは REVOKE コマンドを使用します。

Cloud SQL のユーザー名の長さの上限は、オンプレミス MySQL と同じで、MySQL 8.0 では 32 文字、それ以前のバージョンでは 16 文字です。

REST v1beta4

以下のリクエストでは、users:insert メソッドを使用してユーザー アカウント「user_name」を作成します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • user-id: ユーザーの ID
  • password: ユーザーのパスワード

HTTP メソッドと URL:

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 ロールが自動的に付与されます。このロールに関連付けられている権限は、CREATEROLECREATEDBLOGIN です。

MySQL 5.7 と Cloud SQL の認証方法を使用して作成されたインスタンスには、FILESUPER を除くすべての権限が自動的に付与されます。これらのユーザーの権限を変更する必要がある場合は、mysql クライアントで GRANT コマンドまたは REVOKE コマンドを使用します。

Cloud SQL のユーザー名の長さの上限は、オンプレミス MySQL と同じで、MySQL 8.0 では 32 文字、それ以前のバージョンでは 16 文字です。

mysql クライアント

  1. mysql プロンプトで、ユーザーを作成します。
      CREATE USER 'USER_NAME'@'%'
         IDENTIFIED BY 'PASSWORD';
      
  2. ユーザー テーブルを表示することによって、ユーザーの作成を確認できます。
    SELECT user, host FROM mysql.user;
    
    第 2 世代インスタンスの場合、出力は次の例のようになります。
    +----------+-----------+
    | user     | host      |
    +----------+-----------+
    | root     | %         |
    | newuser  | %         |
    +----------+-----------+
    1 row in set (0.01 sec)
    
  3. GRANT ステートメントでユーザーに権限を付与します。詳細については、MySQL によって提供される権限をご覧ください。
  4. mysql.user テーブルをフラッシュして、変更が反映されていることを確認します。
      FLUSH TABLES mysql.user;
    

ユーザーのパスワードの変更

ユーザーのパスワードを変更するには:

Console

  1. Google Cloud Console で、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンス名をクリックして [概要] ページを開きます。
  3. SQL ナビゲーション メニューから [ユーザー] を選択します。
  4. 更新するユーザーのその他アイコン その他アイコン をクリックします。
  5. [パスワードを変更] を選択し、新しいパスワードを指定して、[OK] をクリックします。

gcloud

パスワードを更新します。

gcloud sql users set-password USER_NAME \
--host=HOST \
--instance=INSTANCE_NAME \
--prompt-for-password

REST v1

次のリクエストでは、users:update メソッドを使用して、ユーザー アカウント user_name'@'%' のパスワードを更新します。ユーザーが別のホストを使用している場合は、その正しいホストで呼び出しを変更する必要があります。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • user-id: ユーザーの ID
  • password: ユーザーのパスワード

HTTP メソッドと URL:

PUT https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users?name=user-id

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: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 メソッドを使用して、ユーザー アカウント user_name'@'%' のパスワードを更新します。ユーザーが別のホストを使用している場合は、その正しいホストで呼び出しを変更する必要があります。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • user-id: ユーザーの ID
  • password: ユーザーのパスワード

HTTP メソッドと URL:

PUT https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users?name=user-id

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: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 FOR USER_NAME = PASSWORD('auth_string');
    
  2. mysql.user テーブルをフラッシュして、変更が反映されていることを確認します。
    FLUSH TABLES mysql.user;
    

ユーザーの更新

ホストや権限などのユーザー プロパティを更新するには、mysql クライアントを使用する必要があります。詳細については、MySQL のドキュメントの MySQL ユーザー アカウント管理をご覧ください。

ユーザーを一覧表示する

ユーザーを一覧表示するには:

Console

  1. Google Cloud Console で、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンス名をクリックして [概要] ページを開きます。
  3. SQL ナビゲーション メニューから [ユーザー] を選択します。

gcloud

このインスタンスのユーザーを一覧表示します。

gcloud sql users list \
--instance=INSTANCE_NAME

このコマンドのパラメータの完全なリストについては、gcloud sql users list のリファレンス ページをご覧ください。

REST v1

次のリクエストでは、users:list メソッドを使用して、インスタンスに定義されているユーザーを一覧表示します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID

HTTP メソッドと URL:

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"
        ]
      }
    },
    {
      ...
    },
    {
      ...
    }
  ]
}

REST v1beta4

次のリクエストでは、users:list メソッドを使用して、インスタンスに定義されているユーザーを一覧表示します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID

HTTP メソッドと URL:

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"
        ]
      }
    },
    {
      ...
    },
    {
      ...
    }
  ]
}

mysql クライアント

mysql のプロンプトで、MySQL ユーザーを一覧表示します。

SELECT user, host FROM mysql.user;

root ユーザー アカウントのみが構成されている第 2 世代インスタンスの場合、出力は次の例のようになります。

+------+-----------+
| user | host      |
+------+-----------+
| root | %         |
+------+-----------+
1 row in set (0.01 sec)

この例では、ユーザー 'root'@'%' を追加したインスタンスのユーザーが示されています。パスワード フィールドには、パスワードのハッシュが表示されています。

ユーザーの削除

ユーザーを削除するには:

ユーザーを削除する前に、そのユーザーが所有するすべてのオブジェクトを削除するか、ユーザーの所有権の割り当てを変更して、他のオブジェクトにロールが付与されている権限をすべて取り消す必要があります。

Console

  1. Google Cloud Console で、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンス名をクリックして [概要] ページを開きます。
  3. SQL ナビゲーション メニューから [ユーザー] を選択します。
  4. 削除するユーザーのその他アイコン その他アイコン をクリックします。
  5. [削除] を選択して、もう一度 [削除] を選択します。

gcloud

ユーザーを削除します。

gcloud sql users delete USER_NAME \
--host=HOST \
--instance=INSTANCE_NAME

REST v1

以下のリクエストでは、users:delete メソッドを使用して、指定したユーザー アカウントを削除します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • user-id: ユーザーの ID

HTTP メソッドと URL:

DELETE https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users?host=&name=user-id

JSON 本文のリクエスト:

{
  "name": "user-id",
  "host": ""
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような 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
  • user-id: ユーザーの ID

HTTP メソッドと URL:

DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users?host=&name=user-id

JSON 本文のリクエスト:

{
  "name": "user-id",
  "host": ""
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような 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 クライアント

  1. mysql プロンプトで、ユーザーを削除します。
    DROP USER 'USER_NAME'@'HOST_NAME';
    

    DROP USER ステートメントの詳細については、MySQL のドキュメントをご覧ください。

  2. mysql.user テーブルをフラッシュして、変更が反映されていることを確認します。
    FLUSH TABLES mysql.user;
    

次のステップ