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. ナビゲーション メニューから [ユーザー] を選択します。
  4. % (any host) のホスト値で root ユーザーを検索し、その他の操作メニュー その他アイコン から [パスワードを変更] を選択します。
  5. 覚えやすく強力なパスワードを指定し、[OK] をクリックします。

gcloud

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

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

REST v1beta4

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

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

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

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

HTTP メソッドと URL:

PUT https://www.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://www.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://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

ユーザーを作成する

ユーザーを作成するには、次のようにします。

Console

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

    [Cloud SQL インスタンス] ページに移動

  2. インスタンスを選択して [概要] ページを開きます。
  3. ナビゲーション メニューから [ユーザー] を選択します。
  4. [ユーザーを追加] をクリックします。
  5. [ユーザー アカウントをインスタンス instance_name に追加] ページで、次の情報を追加します。
    • ユーザー名
    • パスワード
    • ホスト(オプション)

      デフォルトは '%' です。これは、ホストリストが制限されていないことを意味します。IP アドレスまたは IP アドレスの範囲を指定することもできます。この場合、これらのアドレスから接続しているユーザーだけがデータベースにアクセスできます。

  6. [作成] をクリックします。

Cloud SQL を使用して作成されたユーザーには、cloudsqlsuperuser ロールと関連付けられている権限(CREATEROLECREATEDBLOGIN)があります。これらのユーザーによって作成されたユーザーは、データベース接続権限を持つことができます。これにより、ユーザーが削除されるのを防ぐことができます。

Cloud SQL を使用して作成されたユーザーは、FILESUPER を除くすべての権限を持っています。ユーザーの権限を変更する必要がある場合は、mysql クライアントで GRANT コマンドまたは REVOKE コマンドを使用します。

gcloud

ユーザーを作成します。

gcloud sql users create [user_name] \
   --host=[HOST] --instance=[INSTANCE_NAME] --password=[PASSWORD]

Cloud SQL を使用して作成されたユーザーには、cloudsqlsuperuser ロールと関連付けられている権限(CREATEROLECREATEDBLOGIN)があります。これらのユーザーによって作成されたユーザーは、データベース接続権限を持つことができます。これにより、ユーザーが削除されるのを防ぐことができます。

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://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users

JSON 本文のリクエスト:

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

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

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://www.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://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Cloud SQL を使用して作成されたユーザーには、cloudsqlsuperuser ロールと関連付けられている権限(CREATEROLECREATEDBLOGIN)があります。これらのユーザーによって作成されたユーザーは、データベース接続権限を持つことができます。これにより、ユーザーが削除されるのを防ぐことができます。

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. ナビゲーション メニューから [ユーザー] を選択します。
  4. 更新するユーザーのその他アイコン その他アイコン をクリックします。
  5. [パスワードを変更] を選択し、新しいパスワードを指定して、[OK] をクリックします。

gcloud

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

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

REST v1beta4

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

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

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

HTTP メソッドと URL:

PUT https://www.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://www.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://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

MySQL クライアント

  1. mysql プロンプトで、パスワードを変更します。
    SET PASSWORD FOR [USER] = PASSWORD('auth_string');
    
  2. mysql.user テーブルをフラッシュして、変更が反映されていることを確認します。
    FLUSH TABLES mysql.user;
    

ユーザーの更新

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

ユーザーを一覧表示する

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

Console

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

    [Cloud SQL インスタンス] ページに移動

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

gcloud

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

gcloud sql users list --instance=[INSTANCE_NAME]

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

REST v1beta4

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

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

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

HTTP メソッドと URL:

GET https://www.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. ナビゲーション メニューから [ユーザー] を選択します。
  4. 削除するユーザーのその他アイコン その他アイコン をクリックします。
  5. [削除] を選択し、[OK] をクリックします。

gcloud

ユーザーを削除します。

gcloud sql users delete [USER_NAME] --host=[HOST] --instance=[INSTANCE_NAME]

REST v1beta4

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

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

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

HTTP メソッドと URL:

DELETE https://www.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://www.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://www.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;
    

次のステップ