MySQL とのSecurity互換性

TiDB は、 MySQL 5.7と同様のセキュリティ機能をサポートし、MySQL 8.0 のいくつかのセキュリティ機能もサポートします。 TiDB のセキュリティ機能は実装において MySQL とは異なります。

サポートされていないセキュリティ機能

  • カラムレベルの権限。
  • これらのアクセス許可属性: max_questionsmax_updated 、およびmax_user_connections
  • パスワード検証ポリシー。現在のパスワードを変更するときに、そのパスワードを検証する必要があります。
  • 二重パスワードポリシー。
  • ランダムなパスワード生成。
  • 多要素認証。

MySQLとの違い

パスワードの有効期限ポリシー

TiDB と MySQL のパスワード有効期限ポリシーには次のような違いがあります。

  • MySQL は v5.7 および v8.0 でパスワード有効期限ポリシーをサポートします。
  • TiDB は v6.5.0 からパスワード有効期限ポリシーをサポートします。

TiDB の有効期限メカニズムは、次の点で MySQL とは異なります。

  • MySQL v5.7 および v8.0 では、クライアントとサーバーの構成を組み合わせて、クライアント接続に対して「サンドボックス モード」を有効にするかどうかが決まります。
  • TiDB では、 security.disconnect-on-expired-password構成項目だけで、クライアント接続に対して「サンドボックス モード」を有効にするかどうかが決まります。

パスワードの複雑さのポリシー

TiDB と MySQL のパスワード複雑さのポリシーには次のような違いがあります。

  • MySQL v5.7 は、 validate_passwordプラグインを使用してパスワードの複雑さのポリシーを実装します。
  • MySQL v8.0 は、 validate_passwordコンポーネントを使用してパスワードの複雑さのポリシーを再実装します。
  • TiDB では、v6.5.0 以降、組み込みのパスワード複雑さ管理機能が導入されています。

機能の実装には次の違いがあります。

  • 機能を有効にします。

    • MySQL v5.7 では、この機能はvalidate_passwordプラグインを使用して実装されます。プラグインをインストールすることでこの機能を有効にできます。
    • MySQL v8.0 では、この機能はvalidate_passwordコンポーネントを使用して実装されます。この機能は、コンポーネントをインストールすることで有効にできます。
    • TiDB の場合、この機能は組み込まれています。システム変数validate_password.enableを使用してこの機能を有効にできます。
  • 辞書チェック:

    • MySQL v5.7 では、 validate_password_dictionary_file変数を使用してファイル パスを指定できます。このファイルには、パスワードに含めることが許可されていない単語のリストが含まれています。
    • MySQL v8.0 では、 validate_password.dictionary_file変数を使用してファイル パスを指定できます。このファイルには、パスワードに含めることが許可されていない単語のリストが含まれています。
    • TiDB では、 validate_password.dictionaryシステム変数を使用して文字列を指定できます。この文字列には、パスワードに含めることが許可されていない単語のリストが含まれています。

パスワード障害の追跡

TiDB と MySQL のパスワード障害追跡ポリシーには次のような違いがあります。

  • MySQL v5.7 はパスワード失敗の追跡をサポートしていません。
  • MySQL v8.0 はパスワード失敗の追跡をサポートしています。
  • TiDB は、v6.5.0 以降、パスワード障害追跡をサポートしています。

アカウントの失敗した試行回数とロック ステータスはグローバルに一貫している必要があり、分散データベースである TiDB は MySQL のように失敗した試行回数とロック ステータスをサーバーメモリに記録できないため、実装メカニズムが TiDB と TiDB で異なります。 MySQL。

  • 自動的にロックされないユーザーの場合、次のシナリオで失敗した試行回数がリセットされます。

    • MySQL 8.0:

      • サーバーが再起動されると、すべてのアカウントの失敗した試行回数がリセットされます。
      • FLUSH PRIVILEGESを実行すると、すべてのアカウントの失敗回数がリセットされます。
      • ALTER USER ... ACCOUNT UNLOCKを実行してアカウントのロックを解除すると、カウントはリセットされます。
      • アカウントが正常にログインすると、カウントはリセットされます。
    • TiDB:

      • ALTER USER ... ACCOUNT UNLOCKを実行してアカウントのロックを解除すると、カウントはリセットされます。
      • アカウントが正常にログインすると、カウントはリセットされます。
  • 自動的にロックされたユーザーの場合、次のシナリオでは試行失敗の回数がリセットされます。

    • MySQL 8.0:

      • サーバーが再起動されると、すべてのアカウントの一時的なロックがリセットされます。
      • FLUSH PRIVILEGESを実行すると、全アカウントの一時ロックが解除されます。
      • アカウントのロック時間が終了すると、次回のログイン試行時にアカウントの一時的なロックがリセットされます。
      • ALTER USER ... ACCOUNT UNLOCKを実行してアカウントのロックを解除すると、アカウントの一時的なロックがリセットされます。
    • TiDB:

      • アカウントのロック時間が終了すると、次回のログイン試行時にアカウントの一時的なロックがリセットされます。
      • ALTER USER ... ACCOUNT UNLOCKを実行してアカウントのロックを解除すると、アカウントの一時的なロックがリセットされます。

パスワード再利用ポリシー

TiDB と MySQL のパスワード再利用ポリシーには次のような違いがあります。

  • MySQL v5.7 はパスワードの再利用管理をサポートしていません。
  • MySQL v8.0 はパスワードの再利用管理をサポートしています。
  • TiDB は v6.5.0 からパスワード再利用管理をサポートします。

実装メカニズムは TiDB と MySQL の間で一貫しています。どちらもmysql.password_historyシステム テーブルを使用して、パスワード再利用管理機能を実装します。ただし、 mysql.userシステム テーブルに存在しないユーザーを削除する場合、TiDB と MySQL では動作が異なります。

  • シナリオ: ユーザー ( user01 ) は通常の方法では作成されません。代わりに、 INSERT INTO mysql.password_history VALUES (...)ステートメントを使用してuser01のレコードをmysql.password_historyシステム テーブルに追加することによって作成されます。このような場合、 mysql.userシステムテーブルにはuser01のレコードが存在しないため、 user01DROP USER実行すると、TiDB と MySQL の動作が異なります。

    • MySQL: DROP USER user01を実行すると、MySQL はmysql.usermysql.password_historyuser01見つけようとします。いずれかのシステム テーブルにuser01含まれている場合、 DROP USERステートメントは正常に実行され、エラーは報告されません。
    • TiDB: DROP USER user01を実行すると、TiDB はmysql.userの中でのみuser01を見つけようとします。関連するレコードが見つからない場合、 DROP USERステートメントは失敗し、エラーが報告されます。ステートメントを正常に実行してmysql.password_historyからuser01レコードを削除したい場合は、代わりにDROP USER IF EXISTS user01使用してください。

認証プラグインのステータス

TiDB は複数の認証方法をサポートしています。これらのメソッドは、 CREATE USERALTER USERを使用してユーザーごとに指定できます。これらのメソッドは、同じ名前の MySQL の認証メソッドと互換性があります。

次の表でサポートされている認証方法のいずれかを使用できます。クライアント/サーバー接続の確立時にサーバーがアドバタイズするデフォルトのメソッドを指定するには、変数default_authentication_pluginを設定します。 tidb_sm3_passwordは、TiDB でのみサポートされている SM3 認証方法です。したがって、この方法を使用して認証するには、 TiDB-JDBCを使用して TiDB に接続する必要があります。 tidb_auth_tokenは、 TiDB Cloudでのみ使用される JSON Web Token (JWT) ベースの認証方法です。

TLS 認証のサポートの構成は異なります。詳細については、 TiDB クライアントとサーバーの間で TLS を有効にするを参照してください。

認証方法サポートされています
mysql_native_passwordはい
sha256_passwordいいえ
caching_sha2_passwordはい、5.2.0 以降
auth_socketはい、5.3.0 以降
tidb_sm3_passwordはい、6.3.0 以降
tidb_auth_tokenはい、6.4.0 以降
authentication_ldap_saslはい、7.1.0 以降
authentication_ldap_simpleはい、7.1.0 以降
TLS証明書はい
LDAPはい、7.1.0 以降
パムいいえ
ed25519 (マリアDB)いいえ
GSSAPI (MariaDB)いいえ
フィドいいえ

このページは役に立ちましたか?