2016-04-15 35 views
5

JWT belirtecini depolamak için en iyi MYSQL veya Maria DB veri türü hangisidir?

Ben güvenli başardı ben

aşağıdaki teknoloji yığını

  • laravel 5.2
  • MySQL kullanıyorum ve güvenlik için ben JWT (JSON Web Simgeleri) kullanıyorum JWT kullanarak benim uygulamalarım.

    JWT belirtecini mysql veritabanında depolamak istiyorum.

    SORU Aşağıdaki veri tiplerinden hangisi MySQL DB'deki JWT jetonunu saklamaktır?

    1. VARCHAR
    2. CLOB
    3. METİN
    4. UZUN METİN başka bir şey olduğu gibi
+0

Bir JWT'nin amacı veritabanında saklanması gerekmiyor mu? – ceejayoz

+0

@ceejayoz Yenileme jetonları da JWT'ler olabilir ve bir veri deposunda saklamak gerektiğine inanıyorum. – georaldc

cevap

5

, cevap "değişir" dir.

Öncelikle, tam olarak kodlanmış JWT'yi saklanması doğru çözüm olup olmadığını belirlemek gerekir. JWT dizesini saklamamaya ve JWT'yi oluşturmak için kullanılan iddiaları saklamaktayım, bu da veritabanında bir ton oda biriktirecek. Eğer JWT'yi saklamak doğru yöntem olduğuna karar verirseniz

, o zaman seçenekleriniz bakabilirsiniz.

METİN ve LONGTEXT CLOB sadece türleri, bu yüzden Şunu göz ardı edebilirsiniz.

METİN VE VARCHAR'ın her ikisi de 64kb değerine sahiptir, bu nedenle yukarıdaki herhangi bir şey LONGTEXT (veya bahsetmediğiniz ancak bir seçenek olan MEDIUMTEXT) gerektirir.

METİN ve VARCHAR arasındaki fark VARCHAR satır depolanır, ancak METİN temelde bir işaretçi olmasıdır. Eğer JWT'yi sıklıkla okuyorsanız, VARCHAR daha hızlı olacaktır, ancak daha büyük dizeler her bir satırın daha büyük olmasına neden olacak ve bu da bir performans isabeti olacaktır.

JWTS olma eğilimi kadar büyük, ben o METİN veritabanında JWTS depolamak için oldukça iyi bir seçim olduğunu söyleyebilirim. JWT'lerin çok küçük kalacağından kesinlikle eminseniz, o zaman bir VARCHAR daha iyi bir okuma performansı üretebilir, ancak emin olmak için gerçek dünya verileriyle test etmek en iyisi olur. Eğer METİN daha büyük bir alan sağlayabilir gerekiyorsa

, o zaman kodlanmış JWT'yi depolamak önlemek için benim tavsiye yinelemek, ama LONGTEXT orada bir seçenektir.

+0

Michael'ın tavsiyesini tekrar almaya karar verdim: talep verilerini saklamak. "Jti" alanı bunun için yapılmış gibi görünüyor - http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#RegisteredClaimName – user2426679

1

örneğin dayanarak, bir 'kodlanmış' base64 belirteci için tavsiye olacaktır: Genel olarak

TEXT CHARACTER SET ascii COLLATE ascii_bin 

JSON CHARACTER SET utf8 veya utf8mb4 ile TEXT veya VARCHAR bazı boyutta olmalıdır. (COLLATION'un büyük olasılıkla ilgisi yoktur.

TEXT, 64KB ile sınırlıdır; Daha küçük bir VARCHAR kullanmanın pek bir avantajı yoktur.

Re: "TEXT sadece bir işaretçi" - Çok doğru değil. InnoDB'deki bazı ROW_FORMATs'da, TEXT veya VARCHAR, satırdaki bir uzantının işaretçisi olabilir. Eylem, çoğunlukla veri türü değil, ROW_FORMAT bağlıdır.