- ドキュメント ホーム
- TiDBについて
- クイックスタート
- 発展させる
- 概要
- クイックスタート
- TiDB Cloud(開発者層) で TiDB クラスターを構築する
- TiDB の CRUD SQL
- TiDB でシンプルな CRUD アプリを構築する
- 応用例
- TiDB に接続する
- データベース スキーマの設計
- 書き込みデータ
- データの読み取り
- 取引
- 最適化
- トラブルシューティング
- 参照
- 書店のサンプル アプリケーション
- ガイドライン
- アーカイブされたドキュメント
- クラウドネイティブ開発環境
- サードパーティのサポート
- デプロイ
- 移行する
- 管理
- 監視と警告
- トラブルシューティング
- TiDB トラブルシューティング マップ
- 遅いクエリを特定する
- 遅いクエリを分析する
- SQL 診断
- Top SQLを使用して高価なクエリを特定する
- ログを使用して高価なクエリを特定する
- ステートメント要約表
- ホットスポットの問題のトラブルシューティング
- 増加した読み取りおよび書き込み遅延のトラブルシューティング
- クラスターのオンサイト情報の保存と復元
- クラスタ セットアップのトラブルシューティング
- 高いディスク I/O 使用率のトラブルシューティング
- ロック競合のトラブルシューティング
- TiFlash のトラブルシューティング
- オプティミスティック トランザクションでの書き込み競合のトラブルシューティング
- データとインデックス間の不一致のトラブルシューティング
- 性能チューニング
- チューニングガイド
- Configuration / コンフィグレーションのチューニング
- システムのチューニング
- ソフトウェアのチューニング
- Configuration / コンフィグレーション
- コプロセッサ キャッシュ
- SQL チューニング
- チュートリアル
- TiDB ツール
- 概要
- ユースケース
- ダウンロード
- TiUP
- ドキュメンテーション マップ
- 概要
- 用語と概念
- TiUP コンポーネントの管理
- FAQ
- トラブルシューティングガイド
- コマンドリファレンス
- 概要
- TiUP コマンド
- TiUP クラスタ コマンド
- 概要
- tiup cluster audit
- tiup cluster check
- tiup cluster clean
- tiup cluster deploy
- tiup cluster destroy
- tiup cluster disable
- tiup cluster display
- tiup cluster edit-config
- tiup cluster enable
- tiup cluster help
- tiup cluster import
- tiup cluster list
- tiup cluster patch
- tiup cluster prune
- tiup cluster reload
- tiup cluster rename
- tiup cluster replay
- tiup cluster restart
- tiup cluster scale-in
- tiup cluster scale-out
- tiup cluster start
- tiup cluster stop
- tiup cluster template
- tiup cluster upgrade
- TiUP DMコマンド
- TiDB クラスター トポロジ リファレンス
- DM クラスタ トポロジ リファレンス
- ミラー リファレンス ガイド
- TiUP コンポーネント
- PingCAPクリニック診断サービス
- TiDB Operator
- Dumpling
- TiDB Lightning
- TiDB データ移行
- バックアップと復元 (BR)
- Binlog
- TiCDC
- Dumpling
- 同期差分インスペクター
- ティスパーク
- 参照
- クラスタ アーキテクチャ
- 主な監視指標
- セキュリティ
- 権限
- SQL
- SQL 言語の構造と構文
- SQL ステートメント
ADD COLUMN
ADD INDEX
ADMIN
ADMIN CANCEL DDL
ADMIN CHECKSUM TABLE
ADMIN CHECK [TABLE|INDEX]
ADMIN SHOW DDL [JOBS|QUERIES]
ADMIN SHOW TELEMETRY
ALTER DATABASE
ALTER INDEX
ALTER INSTANCE
ALTER PLACEMENT POLICY
ALTER TABLE
ALTER TABLE COMPACT
ALTER USER
ANALYZE TABLE
BACKUP
BATCH
BEGIN
CHANGE COLUMN
COMMIT
CHANGE DRAINER
CHANGE PUMP
CREATE [GLOBAL|SESSION] BINDING
CREATE DATABASE
CREATE INDEX
CREATE PLACEMENT POLICY
CREATE ROLE
CREATE SEQUENCE
CREATE TABLE LIKE
CREATE TABLE
CREATE USER
CREATE VIEW
DEALLOCATE
DELETE
DESC
DESCRIBE
DO
DROP [GLOBAL|SESSION] BINDING
DROP COLUMN
DROP DATABASE
DROP INDEX
DROP PLACEMENT POLICY
DROP ROLE
DROP SEQUENCE
DROP STATS
DROP TABLE
DROP USER
DROP VIEW
EXECUTE
EXPLAIN ANALYZE
EXPLAIN
FLASHBACK TABLE
FLUSH PRIVILEGES
FLUSH STATUS
FLUSH TABLES
GRANT <privileges>
GRANT <role>
INSERT
KILL [TIDB]
LOAD DATA
LOAD STATS
MODIFY COLUMN
PREPARE
RECOVER TABLE
RENAME INDEX
RENAME TABLE
REPLACE
RESTORE
REVOKE <privileges>
REVOKE <role>
ROLLBACK
SELECT
SET DEFAULT ROLE
SET [NAMES|CHARACTER SET]
SET PASSWORD
SET ROLE
SET TRANSACTION
SET [GLOBAL|SESSION] <variable>
SHOW ANALYZE STATUS
SHOW [BACKUPS|RESTORES]
SHOW [GLOBAL|SESSION] BINDINGS
SHOW BUILTINS
SHOW CHARACTER SET
SHOW COLLATION
SHOW [FULL] COLUMNS FROM
SHOW CONFIG
SHOW CREATE PLACEMENT POLICY
SHOW CREATE SEQUENCE
SHOW CREATE TABLE
SHOW CREATE USER
SHOW DATABASES
SHOW DRAINER STATUS
SHOW ENGINES
SHOW ERRORS
SHOW [FULL] FIELDS FROM
SHOW GRANTS
SHOW INDEX [FROM|IN]
SHOW INDEXES [FROM|IN]
SHOW KEYS [FROM|IN]
SHOW MASTER STATUS
SHOW PLACEMENT
SHOW PLACEMENT FOR
SHOW PLACEMENT LABELS
SHOW PLUGINS
SHOW PRIVILEGES
SHOW [FULL] PROCESSSLIST
SHOW PROFILES
SHOW PUMP STATUS
SHOW SCHEMAS
SHOW STATS_HEALTHY
SHOW STATS_HISTOGRAMS
SHOW STATS_META
SHOW STATUS
SHOW TABLE NEXT_ROW_ID
SHOW TABLE REGIONS
SHOW TABLE STATUS
SHOW [FULL] TABLES
SHOW [GLOBAL|SESSION] VARIABLES
SHOW WARNINGS
SHUTDOWN
SPLIT REGION
START TRANSACTION
TABLE
TRACE
TRUNCATE
UPDATE
USE
WITH
- データ型
- 関数と演算子
- クラスタ化インデックス
- 制約
- 生成された列
- SQL モード
- テーブル属性
- 取引
- ガベージ コレクション (GC)
- ビュー
- パーティショニング
- 一時テーブル
- キャッシュされたテーブル
- 文字セットと照合順序
- SQL の配置規則
- システム テーブル
mysql
- 情報_スキーマ
- 概要
ANALYZE_STATUS
CLIENT_ERRORS_SUMMARY_BY_HOST
CLIENT_ERRORS_SUMMARY_BY_USER
CLIENT_ERRORS_SUMMARY_GLOBAL
CHARACTER_SETS
CLUSTER_CONFIG
CLUSTER_HARDWARE
CLUSTER_INFO
CLUSTER_LOAD
CLUSTER_LOG
CLUSTER_SYSTEMINFO
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
DATA_LOCK_WAITS
DDL_JOBS
DEADLOCKS
ENGINES
INSPECTION_RESULT
INSPECTION_RULES
INSPECTION_SUMMARY
KEY_COLUMN_USAGE
METRICS_SUMMARY
METRICS_TABLES
PARTITIONS
PLACEMENT_POLICIES
PROCESSLIST
REFERENTIAL_CONSTRAINTS
SCHEMATA
SEQUENCES
SESSION_VARIABLES
SLOW_QUERY
STATISTICS
TABLES
TABLE_CONSTRAINTS
TABLE_STORAGE_STATS
TIDB_HOT_REGIONS
TIDB_HOT_REGIONS_HISTORY
TIDB_INDEXES
TIDB_SERVERS_INFO
TIDB_TRX
TIFLASH_REPLICA
TIKV_REGION_PEERS
TIKV_REGION_STATUS
TIKV_STORE_STATUS
USER_PRIVILEGES
VIEWS
METRICS_SCHEMA
- UI
- TiDB ダッシュボード
- 概要
- 管理
- アクセス
- 概要ページ
- クラスター情報ページ
- Top SQLページ
- キー ビジュアライザー ページ
- メトリクス関係グラフ
- SQL ステートメントの分析
- スロークエリページ
- クラスタ診断
- 検索ログ ページ
- インスタンスのプロファイリング
- セッションの管理とConfiguration / コンフィグレーション
- FAQ
- CLI
- コマンド ライン フラグ
- Configuration / コンフィグレーションファイルのパラメーター
- システム変数
- ストレージ エンジン
- テレメトリー
- エラーコード
- テーブル フィルター
- トポロジ ラベルごとにレプリカをスケジュールする
- よくある質問
- リリースノート
- すべてのリリース
- リリースのタイムライン
- TiDB のバージョニング
- v6.1
- v6.0
- v5.4
- v5.3
- v5.2
- v5.1
- v5.0
- v4.0
- v3.1
- v3.0
- v2.1
- v2.0
- v1.0
- 用語集
TiDBクライアントとサーバー間のTLSを有効にする
TiDBのサーバーとクライアント間の暗号化されていない接続はデフォルトで許可されます。これにより、チャネルトラフィックを監視するサードパーティは、クエリコンテンツ、クエリ結果などを含むがこれらに限定されない、サーバーとクライアント間で送受信されるデータを知ることができます。 。チャネルが信頼できない場合(クライアントがパブリックネットワークを介してTiDBサーバーに接続されている場合など)、暗号化されていない接続では情報が漏洩する傾向があります。この場合、セキュリティ上の理由から、暗号化された接続を要求することをお勧めします。
TiDBサーバーは、TLS(Transport Layer Security)に基づく暗号化された接続をサポートします。プロトコルはMySQL暗号化接続と一貫性があり、MySQLクライアント、MySQLシェル、MySQLドライバーなどの既存のMySQLクライアントによって直接サポートされます。 TLSはSSL(セキュリティ Sockets Layer)と呼ばれることもあります。 SSLプロトコルには既知のセキュリティの脆弱性があるため、TiDBはSSLをサポートしていません。 TiDBは、TLSv1.0、TLSv1.1、TLSv1.2、およびTLSv1.3のプロトコルをサポートしています。
暗号化された接続を使用する場合、接続には次のセキュリティプロパティがあります。
- 機密性:トラフィックの平文は盗聴を避けるために暗号化されています
- 整合性:トラフィックの平文を改ざんすることはできません
- 認証:(オプション)クライアントはサーバーのIDを確認でき、サーバーはクライアントのIDを確認して、man-in-the-middle攻撃を回避できます。
TLSで保護された接続を使用するには、最初にTLSを有効にするようにTiDBサーバーを構成する必要があります。次に、TLSを使用するようにクライアントアプリケーションを構成する必要があります。サーバーでTLSサポートが正しく構成されている場合、ほとんどのクライアントライブラリはTLSを自動的に有効にします。
MySQLと同様に、TiDBは同じTCPポートでTLS接続と非TLS接続を許可します。 TLSが有効になっているTiDBサーバーの場合、暗号化された接続を介してTiDBサーバーに安全に接続するか、暗号化されていない接続を使用するかを選択できます。次の方法を使用して、安全な接続の使用を要求できます。
すべてのユーザーにTiDBサーバーへの安全な接続を要求するようにシステム変数
require_secure_transport
を構成します。ユーザーを作成するときは
REQUIRE SSL
を指定し(create user
)、既存のユーザーを変更するときは(alter user
)、指定したユーザーがTiDBにアクセスするために暗号化された接続を使用する必要があることを指定します。以下は、ユーザーの作成例です。CREATE USER 'u1'@'%' IDENTIFIED BY 'my_random_password' REQUIRE SSL;
ノート:
ログインユーザーがログイン用のTiDB証明書ベースの認証を使用して構成した場合、ユーザーはTiDBへの暗号化された接続を有効にする必要があります。
安全な接続を使用するようにTiDBサーバーを構成する
安全な接続を有効にするための関連パラメーターについては、以下の説明を参照してください。
auto-tls
:自動証明書生成を有効にします(v5.2.0以降)ssl-cert
:SSL証明書のファイルパスを指定しますssl-key
:証明書と一致する秘密鍵を指定しますssl-ca
:(オプション)信頼できるCA証明書のファイルパスを指定しますtls-version
:(オプション)最小TLSバージョンを指定します(例: "TLSv1.2")
auto-tls
は安全な接続を許可しますが、クライアント証明書の検証は提供しません。証明書の検証、および証明書の生成方法を制御するには、以下のssl-cert
、およびssl-key
変数の構成に関するアドバイスを参照してssl-ca
。
TiDBサーバーで独自の証明書を使用して安全な接続を有効にするには、TiDBサーバーを起動するときに、構成ファイルでssl-cert
とssl-key
の両方のパラメーターを指定する必要があります。クライアント認証用にssl-ca
パラメーターを指定することもできます( 認証を有効にするを参照)。
パラメータで指定されたすべてのファイルは、PEM(Privacy Enhanced Mail)形式です。現在、TiDBはパスワードで保護された秘密鍵のインポートをサポートしていないため、パスワードなしで秘密鍵ファイルを提供する必要があります。証明書または秘密鍵が無効な場合、TiDBサーバーは通常どおり起動しますが、クライアントは暗号化された接続を介してTiDBサーバーに接続できません。
証明書パラメーターが正しい場合、TiDBは開始時にsecure connection is enabled
を出力します。それ以外の場合は、 secure connection is NOT ENABLED
を出力します。
v5.2.0より前のバージョンのTiDBの場合、 mysql_ssl_rsa_setup --datadir=./certs
を使用して証明書を生成できます。 mysql_ssl_rsa_setup
ツールはMySQLサーバーの一部です。
暗号化された接続を使用するようにMySQLクライアントを構成する
MySQL 5.7以降のバージョンのクライアントは、デフォルトで暗号化された接続を確立しようとします。サーバーが暗号化された接続をサポートしていない場合、サーバーは自動的に暗号化されていない接続に戻ります。バージョン5.7より前のMySQLのクライアントは、デフォルトで暗号化されていない接続を使用します。
次の--ssl-mode
つのパラメータを使用して、クライアントの接続動作を変更できます。
--ssl-mode=REQUIRED
:クライアントには暗号化された接続が必要です。サーバー側が暗号化された接続をサポートしていない場合、接続を確立できません。--ssl-mode
つのパラメーターがない場合:クライアントは暗号化された接続を使用しようとしますが、サーバー側が暗号化された接続をサポートしていない場合、暗号化された接続を確立できません。次に、クライアントは暗号化されていない接続を使用します。--ssl-mode=DISABLED
:クライアントは暗号化されていない接続を使用します。
MySQL 8.0クライアントには、このパラメーターに加えて2つのSSLモードがあります。
--ssl-mode=VERIFY_CA
:--ssl-ca
を必要とするCAに対して、サーバーからの証明書を検証します。--ssl-mode=VERIFY_IDENTITY
:VERIFY_CA
と同じですが、接続先のホスト名が証明書と一致するかどうかも検証します。
詳細については、MySQLの暗号化された接続のクライアント側のConfiguration / コンフィグレーションを参照してください。
認証を有効にする
TiDBサーバーまたはMySQLクライアントでssl-ca
パラメーターが指定されていない場合、クライアントまたはサーバーはデフォルトで認証を実行せず、man-in-the-middle攻撃を防ぐことができません。たとえば、クライアントは偽装されたクライアントに「安全に」接続する場合があります。サーバーとクライアントでの認証用にssl-ca
のパラメーターを構成できます。通常、サーバーを認証するだけで済みますが、クライアントを認証してセキュリティをさらに強化することもできます。
MySQLクライアントからTiDBサーバーを認証するには:
- TiDBサーバーで
ssl-cert
とssl-key
のパラメーターを指定します。 - MySQLクライアントで
--ssl-ca
つのパラメーターを指定します。 - 少なくともMySQLクライアントでは
--ssl-mode
からVERIFY_CA
を指定します。 - TiDBサーバーで構成された証明書(
ssl-cert
)が、クライアント--ssl-ca
パラメーターで指定されたCAによって署名されていることを確認してください。それ以外の場合、認証は失敗します。
- TiDBサーバーで
TiDBサーバーからMySQLクライアントを認証するには:
- TiDBサーバーで
ssl-cert
、およびssl-key
パラメーターを指定しssl-ca
。 - クライアントで
--ssl-cert
と--ssl-key
のパラメーターを指定します。 - サーバー構成の証明書とクライアント構成の証明書の両方が、サーバーによって指定された
ssl-ca
によって署名されていることを確認してください。
- TiDBサーバーで
- 相互認証を実行するには、上記の両方の要件を満たします。
デフォルトでは、サーバーからクライアントへの認証はオプションです。クライアントがTLSハンドシェイク中に識別証明書を提示しなくても、TLS接続を確立できます。また、ユーザーの作成時( create user
)、権限の付与時( grant
)、または既存のユーザーの変更時( alter user
)にrequire x509
を指定して、クライアントの認証を要求することもできます。以下は、ユーザーの作成例です。
create user 'u1'@'%' require x509;
ノート:
ログインユーザーがログイン用のTiDB証明書ベースの認証を使用して構成した場合、ユーザーはTiDBへの暗号化された接続を有効にする必要があります。
現在の接続が暗号化を使用しているかどうかを確認します
SHOW STATUS LIKE "%Ssl%";
ステートメントを使用して、暗号化が使用されているかどうか、暗号化された接続で使用されている暗号化プロトコル、TLSバージョン番号など、現在の接続の詳細を取得します。
暗号化された接続での結果の次の例を参照してください。結果は、クライアントがサポートするさまざまなTLSバージョンまたは暗号化プロトコルに応じて変わります。
mysql> SHOW STATUS LIKE "%Ssl%";
......
| Ssl_verify_mode | 5 |
| Ssl_version | TLSv1.2 |
| Ssl_cipher | ECDHE-RSA-AES128-GCM-SHA256 |
......
公式のMySQLクライアントの場合、 STATUS
または\s
ステートメントを使用して接続ステータスを表示することもできます。
mysql> \s
...
SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
...
サポートされているTLSバージョン、鍵交換プロトコル、および暗号化アルゴリズム
TiDBでサポートされているTLSバージョン、鍵交換プロトコル、および暗号化アルゴリズムは、公式のGolangライブラリによって決定されます。
オペレーティングシステムと使用しているクライアントライブラリの暗号化ポリシーも、サポートされているプロトコルと暗号スイートのリストに影響を与える可能性があります。
サポートされているTLSバージョン
- TLSv1.0(デフォルトでは無効)
- TLSv1.1
- TLSv1.2
- TLSv1.3
tls-version
構成オプションを使用して、使用できるTLSバージョンを制限できます。
使用できる実際のTLSバージョンは、OS暗号化ポリシー、MySQLクライアントのバージョン、およびクライアントが使用するSSL/TLSライブラリによって異なります。
サポートされている鍵交換プロトコルと暗号化アルゴリズム
- TLS_RSA_WITH_AES_128_CBC_SHA
- TLS_RSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_128_GCM_SHA256
- TLS_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
証明書、キー、およびCAをリロードします
証明書、キー、またはCAを置き換えるには、最初に対応するファイルを置き換え、次に実行中のTiDBインスタンスでALTER INSTANCE RELOAD TLS
ステートメントを実行して、元の構成から証明書( ssl-cert
)、キー( ssl-key
)、およびCA( ssl-ca
)を再ロードします。道。このように、TiDBインスタンスを再起動する必要はありません。
新しくロードされた証明書、キー、およびCAは、ステートメントが正常に実行された後に確立された接続で有効になります。ステートメントの実行前に確立された接続は影響を受けません。
モニタリング
TiDB v5.2.0以降、 Ssl_server_not_after
およびSsl_server_not_before
ステータス変数を使用して、証明書の有効性の開始日と終了日を監視できます。
SHOW GLOBAL STATUS LIKE 'Ssl\_server\_not\_%';
+-----------------------+--------------------------+
| Variable_name | Value |
+-----------------------+--------------------------+
| Ssl_server_not_after | Nov 28 06:42:32 2021 UTC |
| Ssl_server_not_before | Aug 30 06:42:32 2021 UTC |
+-----------------------+--------------------------+
2 rows in set (0.0076 sec)