> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-actions-triggers-prototype.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# カスタムデータベース接続を作成する

> データベース接続の作成方法を説明します。

<Card title="利用可能性はAuth0プランによって異なる">
  この機能が利用できるかどうかは、ご利用のAuth0プラン（または契約）によります。詳細については、「[価格設定](https://auth0.com/pricing)」をお読みください。
</Card>

独自のユーザーデータベースをお持ちの場合は、そのデータベースをIDプロバイダーに使用してユーザーを認証することができます。このプロセスでは、カスタムデータベース接続の作成、データベースアクションスクリプトの作成、構成パラメーターの追加といった操作を行います。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  データベースに、ユーザープロファイル属性を保管する`id`、`nickname`、`email`、`password`などのフィールドがあることを確認してください。Auth0のユーザープロファイルスキーマについては、「[正規化ユーザープロファイル](/docs/ja-jp/manage-users/user-accounts/user-profiles/normalized-user-profiles)」をお読みください。ユーザープロファイルの更新については、「[データベースでユーザープロファイルを更新する](/docs/ja-jp/manage-users/user-accounts/user-profiles/update-user-profiles-using-your-database)」をお読みください。
</Callout>

Auth0では、以下に示した一般に使用されるほとんどのデータベースの接続とスクリプトを作成することができます。

* ASP.NET Membership Provider
* MongoDB
* MySQL
* PostgreSQL
* SQLServer
* Windows Azure SQL Database
* 基本認証でアクセスされるWebサービス

正しく構成されたカスタムスクリプトを使用すれば、あらゆる種類のデータベースやWebサービスに接続することができます。入力値のサニタイジングは顧客側で完了しなければなりません。Auth0では、カスタムデータベースによって渡されたユーザー名/パスワードの組み合わせをサニタイズまたは検証しません。カスタムデータベーススクリプトは、Auth0の[レート制限ポリシー](/docs/ja-jp/troubleshoot/customer-support/operational-policies/rate-limit-policy)の適用対象となります。

<Card title="ネットワークのファイアウォール">
  ファイアウォールの内側にいる場合、この機能を正しく動作させるには、適切なAuth0のIPアドレスをAllow List（許可リスト）に追加する必要があるかもしれません。
</Card>

## Auth0 Dashboardで接続を作成する

1. [［Auth0 Dashboard］>［Authentication（認証）］>［Database（データベース）］](https://manage.auth0.com/#/connections/database)に移動して、**［Create DB Connection（DB接続の作成）］** を選択します。
2. 接続の設定を構成し、**［Create（作成）］** をクリックします。

| パラメーター                             | 定義                                                                               |
| ---------------------------------- | -------------------------------------------------------------------------------- |
| **Name（名前）**                       | 接続の名前です。名前の先頭と末尾には英数字を使用し、英数字とダッシュのみを含め、35文字以内で指定する必要があります。                      |
| **Requires Username（ユーザー名を要求する）**  | 登録でユーザー名*と*メールアドレスの入力をユーザーに強制します。                                                |
| **Username Length（ユーザー名の長さ）**      | ユーザー名の最小と最大の長さを設定します。                                                            |
| **Disable Sign Ups（サインアップを無効にする）** | アプリケーションへのサインアップを抑止します。API資格情報またはAuth0 Dashboardを使ってこれまでと変わりなく、ユーザーを作成することができます。 |

Auth0で接続を作成すると、（**［Settings（設定）］** ビューのほかに）以下のビューも表示されます。

* Password Policy（パスワードポリシー）
* Custom Database（カスタムデータベース）
* アプリケーション
* ［Try Connection（接続を試す）］

3. **［Custom Database（カスタムデータベース）］** ビューを選択し、**［Use my own database（独自のデータベースを使用する）］** スイッチを有効にします。

   <Frame>
     <img src="https://mintcdn.com/docs-dev-actions-triggers-prototype/lj4yKtFBkRd_2GRB/docs/images/ja-jp/cdy7uua7fh8z/3kgHDpBFdVWNq9XOfhsTXI/2b7bba3e6105a0f2ded44afe78e19ac7/2025-02-25_10-23-29.png?fit=max&auto=format&n=lj4yKtFBkRd_2GRB&q=85&s=d675901a96d175888e6ac280d6c8ca87" alt="カスタムデータベースを有効にする 独自データベース使用オプション" width="682" height="273" data-path="docs/images/ja-jp/cdy7uua7fh8z/3kgHDpBFdVWNq9XOfhsTXI/2b7bba3e6105a0f2ded44afe78e19ac7/2025-02-25_10-23-29.png" />
   </Frame>

## データベースアクションスクリプトを作成する

**［Use my own database（独自のデータベースを使用する）］** スイッチを切り替えると、**［Database Action Scripts（データベースアクションスクリプト）］** 領域が有効になり、ここでスクリプトを作成し、データベース使用時の認証の仕組みを設定します。データベースアクションスクリプトを記述するか、**［Templates（テンプレート）］** ドロップダウンからテンプレートを選択し、必要に応じて変更することができます。

`login`スクリプトは構成する**必要があります** 。ユーザー機能性のその他のスクリプトはしてもしなくても構いません。

使用できるデータベースアクションスクリプトは以下のとおりです。

| 名前                           | 説明                                          | パラメーター                |
| ---------------------------- | ------------------------------------------- | --------------------- |
| **Login（ログイン）**<br />必須      | ユーザーがログインを試みるたびに実行します。                      | `email`、`password`    |
| **Create（作成）**               | ユーザーがサインアップするときに実行します。                      | `user`                |
| **Verify（検証）**               | ユーザーが検証リンクに従った後に実行します。                      | `email`               |
| **Change Password（パスワード変更）** | パスワードのリセット要求後にユーザーが確認リンクをクリックすると実行します。      | `email`、`newPassword` |
| **Get User（ユーザー取得）**         | ユーザーを認証することなく、データベースからユーザープロファイルを取得します。     | `email`               |
| **Delete（削除）**               | APIまたはAuth0 Dashboardを使用してユーザーが削除されると実行します。 | `id`                  |

スクリプトの詳細については、「[カスタムデータベースのアクションスクリプト用テンプレート](/docs/ja-jp/authenticate/database-connections/custom-db/templates)」および「[カスタムデータベースのアクションスクリプト実行のベストプラクティス](/docs/ja-jp/authenticate/database-connections/custom-db/custom-database-connections-scripts/execution)」をお読みください。

### ログインスクリプトを作成する

<Card title="複数データベースでのユーザーIDの衝突を回避する">
  返されたユーザープロファイルにある`id`（または`user_id`）プロパティは、Auth0によってユーザーの識別に使用されます。

  複数のカスタムデータベース接続を使っている場合には、ユーザーIDの衝突を避けるために、`id`の値がすべてのカスタムデータベース接続で一意でなくてはなりません。`id`の値には、接続名をプレフィックス（スペースは削除）として追加することをお勧めします。ユーザーIDの詳細については、「[ユーザーを識別する](/docs/ja-jp/manage-users/user-accounts/identify-users)」をお読みください。
</Card>

以下の手順は、MySQLデータベースのログインスクリプトの例を示したものです。

1. **［Use my own database（独自のデータベースを使用する）］** スイッチを切り替えた後、\*\* ［Database Action Scripts（データベースアクションスクリプト）］\*\* 領域が有効になります。**［Login（ログイン）］** タブが開いていることを確認します。
2. **［Templates（テンプレート）］** ドロップダウンを使用して、MySQLデータベーススクリプト用テンプレートを選択します。

   ```javascript lines theme={null}
   function login(email, password, callback) {
     var bcrypt = require('bcrypt');
     var mysql = require('mysql');
     var connection = mysql.createConnection({
       host: 'localhost',
       user: 'me',
       password: 'secret',
       database: 'mydb'
     });
     connection.connect();
     var query = "SELECT id, nickname, email, password " +
       "FROM users WHERE email = ?";
     connection.query(query, [email], function (err, results) {
       if (err) return callback(err);
       if (results.length === 0) return callback(new WrongUsernameOrPasswordError(email));
       var user = results[0];
       bcrypt.compare(password, user.password, function (err, isValid) {
         if (err) {
           callback(err);
         } else if (!isValid) {
           callback(new WrongUsernameOrPasswordError(email));
         } else {
           callback(null, {
             // This prefix (replace with your own custom DB name)
             // ensure uniqueness across different custom DBs if there's the
             // possibility of collisions (e.g. if the user ID is an email address or an integer)
             id: 'MyConnection1|' + user.id.toString(),
             nickname: user.nickname,
             email: user.email
           });
         }
       });
     });
   }
   ```

   上記のスクリプトはMySQLデータベースに接続し、クエリーを実行して`email == user.email`を含む最初のユーザーを取得します。`bcrypt.compareSync`メソッドでは次に、パスワードが一致するかどうかを検証します。一致する場合は、`id`、`nickname`、および`email`などのユーザープロファイル情報を含むオブジェクトを返します。このスクリプトは、これらの列を含む`users`テーブルを持っていると仮定します。ログインスクリプトによって返された`id`を使って、ユーザープロファイルのユーザーID属性を構築します。
3. **［Save and Try（保存して試す）］** をクリックします。
4. **［Try（試す）］** をクリックしてスクリプトをテストします。（この手順によりスクリプトの保存も行われます。）

   <Frame>
     <img src="https://mintcdn.com/docs-dev-actions-triggers-prototype/t3dULpCfFcvDg3-K/docs/images/ja-jp/cdy7uua7fh8z/8uBGZhHYZwOcO19ljJNNp/00adb32987a0558dbdff53d6c96f6743/Try_the_Login_Script_-_Japanese.png?fit=max&auto=format&n=t3dULpCfFcvDg3-K&q=85&s=69df224233528ae6c31bbc401d9f50b4" alt="Modal to try the login script." width="722" height="562" data-path="docs/images/ja-jp/cdy7uua7fh8z/8uBGZhHYZwOcO19ljJNNp/00adb32987a0558dbdff53d6c96f6743/Try_the_Login_Script_-_Japanese.png" />
   </Frame>

**［Save（保存）］** または **［Try（試す）］** をクリックしないと、スクリプトのテンプレートはAuth0で使用されません。これは、スクリプトを1つだけ変更し、その他に変更を加えない場合にも当てはまります。すべてのスクリプトを設定するには、\*\* ［Save（保存）］\*\* を少なくとも一度はクリックする必要があります。

## Organization用カスタムデータベースのサポート

カスタムデータベース接続をOrganizationと組み合わせて使用する場合は、スクリプト署名の`context`パラメーターを使って、`id`、`name`、`metadata`のようなOrganizationの詳細をカスタムデータベースのアクションスクリプトに適用することができます。関連するアクションが組織コンテキストで実行されると、Organizationデータがコンテキストオブジェクトに渡されます。たとえば、ユーザーが組織のログインスクリプトを認証すると、ログインアクションのスクリプトが渡されます。詳細については、「[データベース接続](/docs/ja-jp/authenticate/database-connections)」をお読みください。

### コンテキストオブジェクトを有効にする

1. [［Auth0 Dashboard］>［Authentication（認証）］>［Database（データベース）］](https://manage.auth0.com/dashboard/us/#/connections/database/)の順に移動します。
2. データベース接続を選択します。
3. **［Custom Database（カスタムデータベース）］** タブで、**［Context objects in database scripts（データベーススクリプト内のコンテキストオブジェクト）］** を見つけて、\*\* ［Enable（有効にする）］\*\* を選択します。

   <Warning>
     この機能は一度有効にすると、無効にできません。
   </Warning>

### Organizationコンテキストを使用する

コンテキストオブジェクトがDashboardで有効になると、「context」オブジェクトをカスタムデータベースのアクションスクリプトに追加し、コールバックパラメーターの直前に挿入することができます。イベントがOrganizationコンテキストでトリガーされると、対応するデータを以下の形式でカスタムデータベースのアクションスクリプトで使用できるようになります。

<Tabs>
  <Tab title="ログイン">
    ```json lines theme={null}
    {
        "organization": {
            "display_name": "My Organization",
            "id": "org_XXXXXX",
            "metadata": {
                "example": "value"
            },
            "name": "my-organization"
        }
    }
    ```
  </Tab>

  <Tab title="作成">
    ```json lines theme={null}
    {
        "organization": {
            "display_name": "My Organization",
            "id": "org_XXXXXX",
            "metadata": {
                "example": "value"
            },
            "name": "my-organization"
        }
    }
    ```
  </Tab>

  <Tab title="検証">
    ```json lines theme={null}
    {
        "organization": {
            "display_name": "My Organization",
            "id": "org_XXXXXX",
            "metadata": {
                "example": "value"
            },
            "name": "my-organization"
        }
    }
    ```
  </Tab>

  <Tab title="パスワードの変更">
    ```json lines theme={null}
    {
        "organization": {
            "display_name": "My Organization",
            "id": "org_XXXXXX",
            "metadata": {
                "example": "value"
            },
            "name": "my-organization"
        }
    }
    ```
  </Tab>

  <Tab title="ユーザーの取得">
    ```json lines theme={null}
    {
        "organization": {
            "display_name": "My Organization",
            "id": "org_XXXXXX",
            "metadata": {
                "example": "value"
            },
            "name": "my-organization"
        }
    }
    ```
  </Tab>

  <Tab title="削除" />
</Tabs>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  空のコンテキストは必ず`delete`スクリプトに渡されます。
</Callout>

## 構成パラメーターを追加する

データベースへの接続に必要な資格情報といったパラメーターは、スクリプトエディターの下にある **［Settings（設定）］** セクションに保存することができます。これらのパラメーターはすべてのスクリプトに使用することができ、データベースアクションスクリプト内の`configuration`オブジェクト（`configuration.MYSQL_PASSWORD`など）を使ってパラメーター値にアクセスすることができます。

スクリプトに追加したパラメーターを使って接続を構成します。たとえば、以下をMySQL Loginスクリプトに追加することができます。

```javascript lines theme={null}
function login (username, password, callback) {
  var mysql = require('mysql');
  var connection = mysql.createConnection({
    host     : configuration.MYSQL_HOST,
    user     : 'me',
    password : configuration.MYSQL_PASSWORD,
    database : 'mydb'
  });
}
```

## もっと詳しく

* [カスタムデータベース接続とアクションスクリプトのベストプラクティス](/docs/ja-jp/authenticate/database-connections/custom-db/custom-database-connections-scripts)
* [カスタムデータベースのトラブルシューティング](/docs/ja-jp/authenticate/database-connections/custom-db/error-handling)
* [ユーザーのインポートとエクスポート](/docs/ja-jp/manage-users/user-migration)
