2016-04-15 57 views
5

JWTトークンを格納するのに最適なMYSQLまたはMaria DBデータ型は何ですか?

は私が確保することができた私は

次のテクノロジ・スタック

  • Laravel 5.2
  • MySQLを使用していますし、セキュリティのために私はJWT(JSONウェブトークン)を使用しています私のアプリケーションはJWTを使用しています。

    私はmysqlデータベースにJWTトークンを保存したいと思います。

    質問MySQLデータベースにJWTトークンを保存するのに最適なデータ型はどれですか。何か他のものと同様に

    1. VARCHAR
    2. CLOB
    3. TEXT
    4. LONG TEXT
+0

データベースに格納する必要がないJWTのポイントではありませんか? – ceejayoz

+0

@ceejayozリフレッシュトークンはJWT自体でもあり、データストアに格納する必要があると私は信じています。 – georaldc

答えて

5

、答えは "それが依存" です。

まず、完全にエンコードされたJWTを格納することが正しい解決策であるかどうかを判断する必要があります。私はJWT文字列を保存せず、代わりにJWTを構築するために使用された主張を格納する傾向があります。これにより、データベースに1トンのスペースを節約します。

あなたがJWTの保管が正しい方法であると判断した場合は、あなたのオプションを見ることができます。

TEXTとLONGTEXTはCLOBの型にすぎません。そのため、無視できます。

TEXTとVARCHARにはどちらも64kbという制限があります。そのため、上記のものにはLONG​​TEXT(またはMEDIUMTEXT)が必要ですが、これはオプションではありません。

TEXTとVARCHARの違いは、VARCHARが行に格納されていますが、TEXTは基本的にポインタです。 JWTを頻繁に読もうとするとVARCHARは高速になりますが、文字列が大きくなると個々の行が大きくなり、パフォーマンスが低下します。

JWTと同じくらいの大きさで、私はTEXTがJWTをデータベースに格納するのに適していると言います。 JWTが非常に小さいと確信しているなら、VARCHARはより良い読み込み性能を生み出すかもしれませんが、実際のデータで確かめてテストするのが最善でしょう。

TEXTが提供できるフィールドよりも大きなフィールドが必要な場合は、エンコードされたJWTの格納を避けるために推奨を繰り返しますが、LONGTEXTはオプションです。

+0

私は、クレームデータを保存するというマイケルのアドバイスを取ることにしました。 "jti"フィールドはこのために作成されたようです - http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#RegisteredClaimName – user2426679

1

例に基づいて、私は「エンコード」base64でトークンのためにこれをお勧めします:一般的に

TEXT CHARACTER SET ascii COLLATE ascii_bin 

、JSONはCHARACTER SET utf8utf8mb4TEXTまたはVARCHARのいくつかの大きさでなければなりません。 (COLLATIONは無関係です。)

TEXTは64KBに制限されています。 VARCHARを小さくすることにはあまり効果がありません。

Re:「TEXTは単なるポインタです」 - 正しくはありません。 InnoDBのROW_FORMATsでは、TEXTまたはVARCHARのいずれかが行の拡張子へのポインタになることがあります。アクションは、ほとんどがデータ型ではなくROW_FORMATに依存します。

関連する問題