> ## Documentation Index
> Fetch the complete documentation index at: https://auth0.generaltranslation.app/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/ja-jp/manage-users/user-accounts/user-profiles/normalized-user-profiles)」をお読みください。ユーザープロファイルの更新については、「[データベースでユーザープロファイルを更新する](/docs/ja-JP/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/ja-jp/troubleshoot/customer-support/operational-policies/rate-limit-policy)の適用対象となります。

<Card title="ネットワークのファイアウォール">
  ファイアウォールの内側にいる場合、この機能を正しく動作させるには、適切なAuth0のIPアドレスをAllow List（許可リスト）に追加する必要があるかもしれません。
</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（DB接続の作成）］** を選択します。
2. 接続の設定を構成し、**［Create（作成）］** をクリックします。

<table class="table">
  <thead>
    <tr>
      <th><strong>パラメーター</strong></th>
      <th><strong>定義</strong></th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><strong>Name（名前）</strong></td>
      <td>接続の名前です。名前の先頭と末尾には英数字を使用し、英数字とダッシュのみを含め、35文字以内で指定する必要があります。</td>
    </tr>

    <tr>
      <td><strong>Requires Username（ユーザー名を要求する）</strong></td>
      <td>登録でユーザー名<em>と</em>メールアドレスの入力をユーザーに強制します。</td>
    </tr>

    <tr>
      <td><strong>Username Length（ユーザー名の長さ）</strong></td>
      <td>ユーザー名の最小と最大の長さを設定します。</td>
    </tr>

    <tr>
      <td><strong>Disable Sign Ups（サインアップを無効にする）</strong></td>
      <td>アプリケーションへのサインアップを抑止します。API資格情報またはAuth0 Dashboardを使ってこれまでと変わりなく、ユーザーを作成することができます。</td>
    </tr>
  </tbody>
</table>

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

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

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

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

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

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

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

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

<table class="table">
  <thead>
    <tr>
      <th><strong>名前</strong></th>
      <th><strong>説明</strong></th>
      <th><strong>パラメーター</strong></th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><strong>Login（ログイン）</strong> <br /><span class="label label-danger">必須</span></td>
      <td>ユーザーがログインを試みるたびに実行します。</td>
      <td>`email`、`password`</td>
    </tr>

    <tr>
      <td><strong>Create（作成）</strong></td>
      <td>ユーザーがサインアップするときに実行します。</td>
      <td>`user`</td>
    </tr>

    <tr>
      <td><strong>Verify（検証）</strong></td>
      <td>ユーザーが検証リンクに従った後に実行します。</td>
      <td>`email`</td>
    </tr>

    <tr>
      <td><strong>Change Password（パスワード変更）</strong></td>
      <td>パスワードのリセット要求後にユーザーが確認リンクをクリックすると実行します。</td>
      <td>`email`、`newPassword`</td>
    </tr>

    <tr>
      <td><strong>Get User（ユーザー取得）</strong></td>
      <td>ユーザーを認証することなく、データベースからユーザープロファイルを取得します。</td>
      <td>`email`</td>
    </tr>

    <tr>
      <td><strong>Delete（削除）</strong></td>
      <td>APIまたはAuth0 Dashboardを使用してユーザーが削除されると実行します。</td>
      <td>`id`</td>
    </tr>
  </tbody>
</table>

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

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

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

  複数のカスタムデータベース接続を使っている場合には、ユーザーIDの衝突を避けるために、`id`の値がすべてのカスタムデータベース接続で一意でなくてはなりません。`id`の値には、接続名をプレフィックス（スペースは削除）として追加することをお勧めします。ユーザーIDの詳細については、「[ユーザーを識別する](/docs/ja-JP/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/generaltranslationinc/pgNtkB0vi40DIRw0/docs/images/ja-jp/cdy7uua7fh8z/8uBGZhHYZwOcO19ljJNNp/00adb32987a0558dbdff53d6c96f6743/Try_the_Login_Script_-_Japanese.png?fit=max&auto=format&n=pgNtkB0vi40DIRw0&q=85&s=34bdd30ebb08979a74b6ef3ea501fc4f" 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（保存）］\*\* を少なくとも一度はクリックする必要があります。

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

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

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

コンテキストオブジェクトが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>

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

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