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

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

# カスタムデータベース接続の作成

独自のユーザーデータベースがある場合は、それを Auth0 の <Tooltip tip="IDプロバイダー（IdP）: デジタルアイデンティティを保存および管理するサービス。" cta="用語集を見る" href="/ja/docs/glossary?term=identity+provider">IDプロバイダー</Tooltip> として使用して、ユーザーを認証できます。以下の手順に従って、カスタムデータベース接続を作成し、データベース アクションスクリプトを作成して、設定パラメーターを追加してください。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  データベースに、`id`、`nickname`、`email`、`password` などの [ユーザープロファイル属性](/ja/docs/manage-users/user-accounts/user-profiles/user-profile-structure#user-profile-attributes) を保存するための適切なフィールドがあることを確認してください。Auth0 のユーザープロファイルスキーマについては、[Normalized User Profiles](/ja/docs/manage-users/user-accounts/user-profiles/normalized-user-profiles) を参照してください。ユーザープロファイルの更新の詳細については、[Update User Profiles Using Your Database](/ja/docs/manage-users/user-accounts/user-profiles/update-user-profiles-using-your-database) を参照してください。
</Callout>

Auth0 では、一般的によく使われるほとんどのデータベース向けに、接続とスクリプトを作成できます。以下が含まれます。

* ASP.NET Identity
* MongoDB
* MySQL
* PostgreSQL
* SQLServer
* Windows Azure SQL Database
* Basic Auth 経由でアクセスする Web サービス

適切に設定されたカスタムスクリプトを使用すれば、あらゆる種類のデータベースや Web サービスに接続できます。入力値のサニタイズはお客様側で行う必要がある点に注意してください。Auth0 は、カスタムデータベースから渡される username/password の組み合わせをサニタイズまたは検証しません。Custom Database スクリプトには、Auth0 の [Rate Limit Policy](/ja/docs/troubleshoot/customer-support/operational-policies/rate-limit-policy) が適用されます。

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

<div id="create-the-connection-in-the-auth0-dashboard">
  ## Auth0 Dashboard で接続を作成する
</div>

1. [Auth0 Dashboard > Authentication > Database](https://manage.auth0.com/#/connections/database) に移動し、**Create DB Connection** を選択します。
2. 接続の設定を行い、**Create** を選択します。

| パラメーター                                                | 説明                                                                                                                             |
| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| **Name**                                              | 接続の名前です。名前は英数字で始まり、英数字で終わる必要があります。また、使用できるのは英数字とダッシュのみで、35 文字以内である必要があります。                                                     |
| **Choose one or more attributes as user identifiers** | 接続の[識別子属性](/ja/docs/authenticate/database-connections/activate-and-configure-attributes-for-flexible-identifiers)を 1 つ以上選択します。 |
| **Choose one or more authentication methods**         | ユーザーに提示する認証方法を選択します。                                                                                                           |
| **Use my own database**                               | Auth0 に接続する独自のデータベースがある場合は、オンにします。                                                                                             |
| **Disable Sign Ups**                                  | 公開エンドポイントからの新規ユーザー登録を無効にします。                                                                                                   |
| **Promote Connection to Domain Level**                | この接続をドメインレベルに昇格して、サードパーティアプリケーションで使用できるようにします。                                                                                 |

Auth0 で接続が作成されると、次のビューが表示されます (**Settings** ビューに加えて) 。

* Attributes
  * Authentication Methods
  * Custom Database
  * Applications

3. **Custom Database** ビューを選択し、**Use my own database** スイッチを有効にします。

   <Frame>
     <img src="https://mintcdn.com/translations/3nS3prIggmJG9TUI/docs/images/cdy7uua7fh8z/3kgHDpBFdVWNq9XOfhsTXI/2efa43e44793b8dd69b9f9e8b54bf752/2025-02-25_10-20-20.png?fit=max&auto=format&n=3nS3prIggmJG9TUI&q=85&s=7aabe24b2fa1559facd2651d06d2fcc2" alt="Enable Custom Database Use My Own Database Option" width="680" height="259" data-path="docs/images/cdy7uua7fh8z/3kgHDpBFdVWNq9XOfhsTXI/2efa43e44793b8dd69b9f9e8b54bf752/2025-02-25_10-20-20.png" />
   </Frame>

<div id="create-database-action-scripts">
  ## データベースアクションスクリプトを作成する
</div>

**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`                   |

スクリプトの詳細については、[Custom Database Action Script Templates](/ja/docs/authenticate/database-connections/custom-db/templates) および [Custom Database Action Script Execution Best Practices](/ja/docs/authenticate/database-connections/custom-db/custom-database-connections-scripts/execution) を参照してください。

<div id="create-a-login-script">
  ### Login スクリプトを作成する
</div>

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

  複数のカスタムデータベース接続を使用している場合は、ユーザー ID の衝突を避けるため、`id` の値がすべてのカスタムデータベース接続で一意である必要があります。推奨される方法は、`id` の値の先頭に接続名 (空白は削除) を付けることです。ユーザー ID の詳細については、[Identify Users](/ja/docs/manage-users/user-accounts/identify-users) を参照してください。
</Card>

以下の手順では、MySQL データベース用の Login スクリプトの例を使用します。

1. **Use my own database** スイッチをオンにすると、**Database Action Scripts** 領域が有効になります。**Login** タブが選択されていることを確認してください。
2. **Templates** ドロップダウンを使用して、MySQL データベーススクリプトテンプレートを選択します。

   ```javascript lines expandable 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, {
             // この接頭辞（独自のカスタム DB 名に置き換えてください）は、
             // 衝突の可能性がある場合（たとえば、ユーザー ID がメールアドレスや整数の場合）に、
             // 異なるカスタム DB 間で一意性を確保します
             id: 'MyConnection1|' + user.id.toString(),
             nickname: user.nickname,
             email: user.email
           });
         }
       });
     });
   }
   ```

   上記のスクリプトは MySQL データベースに接続し、`email == user.email` に一致する最初のユーザーを取得するクエリを実行します。
   次に、`bcrypt.compareSync` メソッドを使用してパスワードが一致することを検証し、一致した場合は `id`、`nickname`、`email` を含むユーザープロファイル情報を格納したオブジェクトを返します。
   このスクリプトは、これらの列を含む `users` テーブルが存在することを前提としています。Login スクリプトから返された `id` は、ユーザープロファイルのユーザー ID 属性の構築に使用されます。
3. **Save and Try** を選択します。
4. ポップアップモーダルでメールアドレスとパスワードを入力し、**Try** をクリックします。利用可能なランタイムの一覧から選択できるドロップダウンが表示され、現在のランタイムが先頭に表示されます。

   <Frame>
     <img src="https://mintcdn.com/translations/c0RQ9V0YAcT0-8l5/docs/images/cdy7uua7fh8z/8uBGZhHYZwOcO19ljJNNp/ccd69d84fdbdff90dc779a6b1ea8a6fd/db-connection-try-login-script.png?fit=max&auto=format&n=c0RQ9V0YAcT0-8l5&q=85&s=ec2a8cb2d4ce996d1671554ebf503413" alt="Login スクリプトを試すためのモーダル。" width="496" height="360" data-path="docs/images/cdy7uua7fh8z/8uBGZhHYZwOcO19ljJNNp/ccd69d84fdbdff90dc779a6b1ea8a6fd/db-connection-try-login-script.png" />
   </Frame>

スクリプトテンプレートは、**Save** または **Try** を選択するまで Auth0 では使用されません。これは、1 つのスクリプトだけを変更し、ほかのスクリプトに変更を加えていない場合でも同様です。すべてのスクリプトを反映するには、少なくとも 1 回 **Save** を選択する必要があります。

<div id="custom-database-support-for-organizations">
  ## 組織向けカスタムデータベースのサポート
</div>

組織と併用してカスタムデータベース接続を使用する場合は、スクリプトシグネチャの `context` パラメーターを使うことで、`id`、`name`、`metadata` などの組織の詳細をカスタムデータベースのアクションスクリプトで利用できるようになります。関連するアクションが組織のコンテキストで発生すると、組織データは `context` オブジェクトを通じて渡されます。たとえば、ユーザーが組織のログインプロンプトで認証すると、`login` アクションスクリプトにそのデータが渡されます。詳しくは、[Database Connections](/ja/docs/authenticate/database-connections) を参照してください。

<div id="enable-context-object">
  ### コンテキストオブジェクトを有効にする
</div>

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>
4. 確認のプロンプトで **Confirm** を選択します。

<div id="use-organization-context">
  ### 組織コンテキストを使用する
</div>

Dashboard でコンテキストオブジェクトを有効にすると、callback パラメーターの直前に挿入される `context` オブジェクトをカスタムデータベースアクションスクリプトに追加できます。イベントが組織コンテキストで発生すると、対応するデータが以下の形式でカスタムデータベースアクションスクリプトから利用できるようになります。

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

<div id="add-configuration-parameters">
  ## 設定パラメーターを追加する
</div>

データベースへの接続に必要な認証情報などのパラメーターは、スクリプトエディターの下にある**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'
  });
}
```

<div id="learn-more">
  ## 詳細
</div>

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