# MySQLプラグイン

{% hint style="warning" %}
パスワードのローテーションには、KeeperPAMによるゼロトラスト方式もあります。ほとんどの用途では、そちらの利用を推奨します。詳細は以下をご参照ください。

* [KeeperPAMを使用したパスワードローテーション](/keeperpam/jp/secrets-manager/password-rotation.md)
* [コマンダーのKeeperPAMコマンド](/keeperpam/jp/commander-cli/command-reference/keeperpam-commands.md)
  {% endhint %}

## 前提条件

#### PyMySQLのインストール

```
pip3 install -Iv PyMySQL==0.10.1
```

{% hint style="warning" %}
MySQLコマンダープラグインにはPyMySQLのバージョン0.10.1が必要で、それより新しいバージョンでは動作しません。
{% endhint %}

## ローテーション用のレコードを準備

### MySQLのユーザー名とパスワードを格納するレコードを作成

KeeperボルトのUIまたはKeeperコマンダーを使用してレコードを作成します。

{% tabs %}
{% tab title="ボルトUI" %}

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FaOR1UDK0dEOdAu4fn0PY%2Fimage.png?alt=media&#x26;token=53bdacc7-1c4c-4d3f-a78f-b8c17de39a6c" alt=""><figcaption><p>Keeperボルトでのレコードの作成</p></figcaption></figure>

{% hint style="info" %}
コマンダーのローテーションは、すべてのレコードタイプで利用できます。レコードには「ログイン」フィールドが必要です。
{% endhint %}

**レコードのホストとポートを設定**

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FxX06oOi3yZdI4A1yjBjb%2Fimage.png?alt=media&#x26;token=e8cc0d70-1392-4391-aaad-a8fea1101db9" alt=""><figcaption></figcaption></figure>

タイプ指定されていないレコードを使用する場合は、ホストとポートをカスタムフィールドに設定できます。以下をご参照ください。

{% hint style="info" %}
コマンダーは、ポート番号が3306のレコード、またはホスト名が「mysql//」で始まるレコードに対してmysqlプラグインを自動的に使用します
{% endhint %}

**ログインとパスワードの値を現在のデータベースユーザーの値に設定します**

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2F69ZG5UcpaanHEwCydYt5%2Fimage.png?alt=media&#x26;token=1c59b8a3-0ee1-4d87-95a3-3f130823bdd8" alt=""><figcaption><p>コマンダーは、ログインとパスワードを使用してMySQLアカウントにログインします</p></figcaption></figure>
{% endtab %}

{% tab title="コマンダー" %}

```
add type="databaseCredentials" title="MySQL Example" f.host.hostName="127.0.0.1" f.host.port="3306" f.login
="DBAdmin Smith" f.password="XXX"
```

「XXX」をこのユーザーの現在のデータベースパスワードに置き換えます
{% endtab %}
{% endtabs %}

### オプションのカスタムフィールド

<table><thead><tr><th width="185.33333333333334">ラベル</th><th width="205">値</th><th>コメント</th></tr></thead><tbody><tr><td>cmdr:plugin</td><td>mysql</td><td>MySQLローテーションを使用するようにコマンダーに指示します これは、レコードに設定するか、またはローテーションコマンドに指定する必要があります</td></tr><tr><td>cmdr:host</td><td></td><td>MySQL serverのホスト名。レコードのホストフィールドで設定されていない場合は、ここで設定できます</td></tr><tr><td>cmdr:rules</td><td><p>「大文字の数, 小文字の数, 数字の数, 記号の数」</p><p>（たとえば、4,6,3,8）</p></td><td>パスワード生成ルール</td></tr><tr><td>cmdr:port</td><td></td><td>MySQLのポート。省略した場合は3306と見なされます<br>レコードのホストフィールドで設定されていない場合は、ここで設定できます</td></tr><tr><td>cmdr:user_host</td><td></td><td>ユーザーホスト。省略した場合は「%」と見なされます</td></tr></tbody></table>

{% tabs %}
{% tab title="ボルトUI" %}

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FpNqLhiRyAOG0PRGcvs8L%2Fimage.png?alt=media&#x26;token=3597e821-0569-429c-9762-0f2de7eff1cb" alt=""><figcaption><p>ボルトのUIにカスタムフィールドを追加</p></figcaption></figure>
{% endtab %}

{% tab title="コマンダー" %}
コマンダーバージョンが4.88より新しい場合

```
 edit -r "MySQL Example" --custom '{"cmdr:plugin":"mysql", "cmdr:host":"SQL"}'
```

コマンダーバージョン4.88以前の場合

```
edit "MySQL Example" --custom '{"cmdr:plugin":"mysql", "cmdr:host":"SQL"}'
```

{% hint style="info" %}
editコマンドについて詳しくは、[こちらのページ](/keeperpam/jp/commander-cli/command-reference/record-commands.md#record-add-and-record-update-commands)をご参照ください。
{% endhint %}
{% endtab %}
{% endtabs %}

## パスワードのローテーション

### UIDレコードの取得

{% tabs %}
{% tab title="ボルトUI" %}
レコードの情報のポップアップでUIDを検索

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FooB1AuhVDU8F4JOZYu3Y%2Fimage.png?alt=media&#x26;token=664b77e3-a093-4761-a989-be439b0bbe58" alt=""><figcaption><p>UIDレコードをクリックしてクリップボードにコピー</p></figcaption></figure>
{% endtab %}

{% tab title="コマンダー" %}

```
My Vault> search "MySQL Example"

  #  Record UID              Type    Title    Login    URL
---  ----------------------  ------  -------  -------  -----
  1  am4TuwGrDpn8NhrGPBAWKw  login   rtt      rotate


                 UID: am4TuwGrDpn8NhrGPBAWKw
               Title: rtt
               Login: rotate
                text: ['mysql']
                text: ['127.0.0.1']
```

searchコマンドを使用して、レコードのUIDを検索します。 「MySQL Example」をレコードの名前に置き換えます。
{% endtab %}
{% endtabs %}

### ローテーションを実行

MySQLのパスワードをローテーションするには、コマンダーで`rotate`コマンドを使用します。 コマンドにレコードタイトルもしくはUIDを渡します (複数のレコードを1度にローテーションさせるには、正規表現で`--match`を使用します)

```
rotate "MySQL Example" --plugin mssql
```

{% hint style="info" %}
プラグインは、こちらに示すようにコマンドに指定することも、レコードのフィールドに追加することも、ポート番号や"mysql://"で始まるホストに基づいて自動的に割り当てることもできます (上記のオプションを参照)。\
レコードにプラグインタイプを追加すると、プラグインの異なる複数のレコードを1度にローテーションできます。
{% endhint %}

#### 出力

ローテーションが完了すると、新しいパスワードがレコードの`パスワード`フィールドに格納されます

## Keeperコマンダーの`connect`コマンドとの連携

| カスタムフィールド名                 | カスタムフィールド値                      |
| -------------------------- | ------------------------------- |
| connect:xxx:env:MYSQL\_PWD | ${password}                     |
| connect:xxx                | mysql -u${login} -h${cmdr:host} |

{% hint style="info" %}
`xxx`は、コマンドラインで接続する際に参照できる「分りやすい名前」を示します。
{% endhint %}

このユースケースのKeeperボルトのレコードのスクリーンショットを以下に示します。

![コマンダーの「connect」コマンドと使用するKeeperのレコードの設定](https://raw.githubusercontent.com/Keeper-Security/Commander/master/keepercommander/images/connect_mysql_screenshot.png)

{% hint style="info" %}
`connect`コマンドの詳細については、[こちらのページ](/keeperpam/jp/commander-cli/command-reference/connection-commands/connection-to-hosts.md)をご参照ください。
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/keeperpam/jp/commander-cli/command-reference/plugins/mysql-plugin.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
