- TiDBについて
- クイックスタート
- 発展させる
- 概要
- クイックスタート
- TiDB CloudでTiDBクラスターを構築する(DevTier)
- TiDBのCRUDSQL
- TiDBを使用してシンプルなCRUDアプリを構築する
- アプリケーション例
- TiDBに接続する
- データベーススキーマの設計
- データの書き込み
- データの読み取り
- 取引
- 最適化
- トラブルシューティング
- 参照
- デプロイ
- 移行する
- 管理
- 監視と警告
- トラブルシューティング
- TiDBトラブルシューティングマップ
- 遅いクエリを特定する
- 遅いクエリを分析する
- SQL診断
- Top SQLを使用して高価なクエリを特定する
- ログを使用して高価なクエリを特定する
- ステートメント要約表
- ホットスポットの問題のトラブルシューティング
- 読み取りと書き込みの待ち時間の増加のトラブルシューティング
- クラスタのオンサイト情報を保存および復元する
- クラスタセットアップのトラブルシューティング
- 高いディスクI/O使用量のトラブルシューティング
- ロックの競合のトラブルシューティング
- TiFlashのトラブルシューティング
- 楽観的なトランザクションでの書き込みの競合のトラブルシューティング
- データとインデックス間の不整合のトラブルシューティング
- 性能チューニング
- チューニングガイド
- 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
- TiUPDMコマンド
- 概要
- tiup dm audit
- tiup dm deploy
- tiup dm destroy
- tiup dm disable
- tiup dm display
- tiup dm edit-config
- tiup dm enable
- tiup dm help
- tiup dm import
- tiup dm list
- tiup dm patch
- tiup dm prune
- tiup dm reload
- tiup dm replay
- tiup dm restart
- tiup dm scale-in
- tiup dm scale-out
- tiup dm start
- tiup dm stop
- tiup dm template
- tiup dm upgrade
- TiDBクラスタートポロジリファレンス
- DMクラスタートポロジリファレンス
- ミラーリファレンスガイド
- TiUPコンポーネント
- PingCAPクリニック診断サービス(テクニカルプレビュー)
- TiDB Operator
- Dumpling
- TiDB Lightning
- TiDBデータ移行
- TiDBデータ移行について
- クイックスタート
- DMクラスタをデプロイする
- チュートリアル
- 高度なチュートリアル
- シャーディングされたテーブルからのデータのマージと移行
- GH-ost/PT-oscを使用するMySQLデータベースからの移行
- より多くの列を持つダウンストリームTiDBテーブルにデータを移行する
- 管理
- 参照
- 例
- トラブルシューティング
- リリースノート
- バックアップと復元(BR)
- TiDB Binlog
- TiCDC
- Dumpling
- sync-diff-inspector
- TiSpark
- 参照
- クラスターアーキテクチャ
- 主要な監視指標
- セキュリティ
- 権限
- 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 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
- INFORMATION_SCHEMA
- 概要
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の役割ベースのアクセス制御(RBAC)システムの実装は、MySQL8.0の実装と似ています。 TiDBは、MySQLのほとんどのRBAC構文と互換性があります。
このドキュメントでは、TiDBRBAC関連の操作と実装を紹介します。
RBAC操作
ロールは、一連の特権のコレクションです。次の操作を実行できます。
- 役割を作成します。
- ロールを削除します。
- ロールに特権を付与します。
- 別のユーザーに役割を付与します。そのユーザーは、役割を有効にした後、その役割に関連する特権を取得できます。
役割を作成する
たとえば、次のステートメントを使用して、ロールapp_developer
、およびapp_read
を作成できapp_write
。
CREATE ROLE 'app_developer', 'app_read', 'app_write';
ロールの命名形式とルールについては、 TiDBユーザーアカウント管理を参照してください。
ロールはmysql.user
テーブルに格納され、ロール名のホスト名部分(省略されている場合)のデフォルトは'%'
です。作成しようとしているロールの名前は一意である必要があります。それ以外の場合は、エラーが報告されます。
ロールを作成するには、 CREATE ROLE
またはCREATE USER
の特権が必要です。
役割に特権を付与する
ロールに特権を付与する操作は、ユーザーに特権を付与する操作と同じです。詳細については、 TiDB権限管理を参照してください。
たとえば、次のステートメントを使用して、 app_read
の役割にapp_db
のデータベースを読み取る特権を付与できます。
GRANT SELECT ON app_db.* TO 'app_read'@'%';
次のステートメントを使用して、 app_write
の役割にapp_db
のデータベースにデータを書き込む特権を付与できます。
GRANT INSERT, UPDATE, DELETE ON app_db.* TO 'app_write'@'%';;
次のステートメントを使用して、 app_developer
の役割にapp_db
のデータベースに対するすべての特権を付与できます。
GRANT ALL ON app_db.* TO 'app_developer';
ユーザーに役割を付与する
ユーザーdev1
がapp_db
のすべての特権を持つ開発者の役割を持っていると仮定します。 2人のユーザーread_user1
とread_user2
は、 app_db
に対する読み取り専用特権を持っています。そして、ユーザrw_user1
は、 app_db
に対する読み取りおよび書き込み特権を有する。
CREATE USER
を使用してユーザーを作成します。
CREATE USER 'dev1'@'localhost' IDENTIFIED BY 'dev1pass';
CREATE USER 'read_user1'@'localhost' IDENTIFIED BY 'read_user1pass';
CREATE USER 'read_user2'@'localhost' IDENTIFIED BY 'read_user2pass';
CREATE USER 'rw_user1'@'localhost' IDENTIFIED BY 'rw_user1pass';
次に、 GRANT
を使用してユーザーに役割を付与します
GRANT 'app_developer' TO 'dev1'@'localhost';
GRANT 'app_read' TO 'read_user1'@'localhost', 'read_user2'@'localhost';
GRANT 'app_read', 'app_write' TO 'rw_user1'@'localhost';
別のユーザーに役割を付与したり、役割を取り消したりするには、 SUPER
の特権が必要です。
ユーザーに役割を付与することは、その役割をすぐに有効にすることを意味するわけではありません。ロールを有効にすることは別の操作です。
次の操作は「関係ループ」を形成する可能性があります。
CREATE USER 'u1', 'u2';
CREATE ROLE 'r1', 'r2';
GRANT 'u1' TO 'u1';
GRANT 'r1' TO 'r1';
GRANT 'r2' TO 'u2';
GRANT 'u2' TO 'r2';
TiDBは、このマルチレベルの認証関係をサポートしています。これを使用して、特権の継承を実装できます。
ロールの権限を確認してください
SHOW GRANTS
ステートメントを使用して、ユーザーに付与されている特権を確認できます。
別のユーザーの特権関連情報を確認するには、 mysql
のデータベースでSELECT
の特権が必要です。
SHOW GRANTS FOR 'dev1'@'localhost';
+-------------------------------------------------+
| Grants for dev1@localhost |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO `dev1`@`localhost` |
| GRANT `app_developer`@`%` TO `dev1`@`localhost` |
+-------------------------------------------------+
SHOW GRANTS
のUSING
オプションを使用して、役割の特権を確認できます。
SHOW GRANTS FOR 'dev1'@'localhost' USING 'app_developer';
+----------------------------------------------------------+
| Grants for dev1@localhost |
+----------------------------------------------------------+
| GRANT USAGE ON *.* TO `dev1`@`localhost` |
| GRANT ALL PRIVILEGES ON `app_db`.* TO `dev1`@`localhost` |
| GRANT `app_developer`@`%` TO `dev1`@`localhost` |
+----------------------------------------------------------+
SHOW GRANTS FOR 'rw_user1'@'localhost' USING 'app_read', 'app_write';
+------------------------------------------------------------------------------+
| Grants for rw_user1@localhost |
+------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `rw_user1`@`localhost` |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `app_db`.* TO `rw_user1`@`localhost` |
| GRANT `app_read`@`%`,`app_write`@`%` TO `rw_user1`@`localhost` |
+------------------------------------------------------------------------------+
SHOW GRANTS FOR 'read_user1'@'localhost' USING 'app_read';
+--------------------------------------------------------+
| Grants for read_user1@localhost |
+--------------------------------------------------------+
| GRANT USAGE ON *.* TO `read_user1`@`localhost` |
| GRANT SELECT ON `app_db`.* TO `read_user1`@`localhost` |
| GRANT `app_read`@`%` TO `read_user1`@`localhost` |
+--------------------------------------------------------+
SHOW GRANTS
またはSHOW GRANTS FOR CURRENT_USER()
を使用して、現在のユーザーの特権を確認できます。 SHOW GRANTS
とSHOW GRANTS FOR CURRENT_USER()
は、次の点で異なります。
SHOW GRANTS
は、現在のユーザーに対して有効になっているロールの特権を示します。SHOW GRANTS FOR CURRENT_USER()
は、有効なロールの特権を示しません。
デフォルトの役割を設定する
ロールがユーザーに付与された後、すぐには有効になりません。ユーザーがこのロールを有効にした後でのみ、ユーザーはロールが所有する特権を使用できます。
ユーザーのデフォルトの役割を設定できます。ユーザーがログインすると、デフォルトの役割が自動的に有効になります。
SET DEFAULT ROLE
{NONE | ALL | role [, role ] ...}
TO user [, user ]
たとえば、次のステートメントを使用して、デフォルトの役割をrw_user1@localhost
からapp_read
およびapp_write
に設定できます。
SET DEFAULT ROLE app_read, app_write TO 'rw_user1'@'localhost';
次のステートメントを使用して、デフォルトの役割dev1@localhost
をすべての役割に設定できます。
SET DEFAULT ROLE ALL TO 'dev1'@'localhost';
次のステートメントを使用して、 dev1@localhost
のすべてのデフォルトの役割を無効にすることができます。
SET DEFAULT ROLE NONE TO 'dev1'@'localhost';
ノート:
デフォルトの役割をこの役割に設定する前に、ユーザーに役割を付与する必要があります。
現在のセッションで役割を有効にする
現在のセッションでいくつかの役割を有効にすることができます。
SET ROLE {
DEFAULT
| NONE
| ALL
| ALL EXCEPT role [, role ] ...
| role [, role ] ...
}
たとえば、 rw_user1
がログインした後、次のステートメントを使用して、現在のセッションでのみ有効なロールapp_read
とapp_write
を有効にできます。
SET ROLE 'app_read', 'app_write';
次のステートメントを使用して、現在のユーザーのデフォルトの役割を有効にすることができます。
SET ROLE DEFAULT
次のステートメントを使用して、現在のユーザーに付与されているすべてのロールを有効にすることができます。
SET ROLE ALL
次のステートメントを使用して、すべての役割を無効にすることができます。
SET ROLE NONE
次のステートメントを使用して、 app_read
以外の役割を有効にできます。
SET ROLE ALL EXCEPT 'app_read'
ノート:
SET ROLE
を使用して役割を有効にする場合、この役割は現在のセッションでのみ有効です。
現在有効な役割を確認してください
現在のユーザーは、 CURRENT_ROLE()
機能を使用して、現在のユーザーによって有効にされている役割を確認できます。
たとえば、デフォルトの役割をrw_user1'@'localhost
に付与できます。
SET DEFAULT ROLE ALL TO 'rw_user1'@'localhost';
rw_user1@localhost
ログインした後、次のステートメントを実行できます。
SELECT CURRENT_ROLE();
+--------------------------------+
| CURRENT_ROLE() |
+--------------------------------+
| `app_read`@`%`,`app_write`@`%` |
+--------------------------------+
SET ROLE 'app_read'; SELECT CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| `app_read`@`%` |
+----------------+
役割を取り消す
次のステートメントを使用して、ユーザーread_user1@localhost
およびread_user2@localhost
に付与されたapp_read
の役割を取り消すことができます。
REVOKE 'app_read' FROM 'read_user1'@'localhost', 'read_user2'@'localhost';
次のステートメントを使用して、 rw_user1@localhost
のユーザーに付与されたロールapp_read
およびapp_write
を取り消すことができます。
REVOKE 'app_read', 'app_write' FROM 'rw_user1'@'localhost';
ユーザーからロールを取り消す操作はアトミックです。ロールの取り消しに失敗した場合、この操作はロールバックされます。
特権を取り消す
REVOKE
ステートメントはGRANT
と逆になります。 REVOKE
を使用して、 app_write
の特権を取り消すことができます。
REVOKE INSERT, UPDATE, DELETE ON app_db.* FROM 'app_write';
詳細については、 TiDB権限管理を参照してください。
役割を削除する
次のステートメントを使用して、役割app_read
およびapp_write
を削除できます。
DROP ROLE 'app_read', 'app_write';
この操作により、 mysql.user
表のapp_read
とapp_write
の役割レコードと許可表の関連レコードが削除され、2つの役割に関連する許可が終了します。
ロールを削除するには、 DROP ROLE
またはDROP USER
の権限が必要です。
承認テーブル
4つのシステム特権テーブルに加えて、RBACシステムは2つの新しいシステム特権テーブルを導入します。
mysql.role_edges
:ロールとユーザーの承認関係を記録します。mysql.default_roles
:各ユーザーのデフォルトの役割を記録します。
mysql.role_edges
mysql.role_edges
には次のデータが含まれます。
SELECT * FROM mysql.role_edges;
+-----------+-----------+---------+---------+-------------------+
| FROM_HOST | FROM_USER | TO_HOST | TO_USER | WITH_ADMIN_OPTION |
+-----------+-----------+---------+---------+-------------------+
| % | r_1 | % | u_1 | N |
+-----------+-----------+---------+---------+-------------------+
1 row in set (0.00 sec)
FROM_HOST
とFROM_USER
は、それぞれロールのホスト名とユーザー名を示します。TO_HOST
とTO_USER
は、ロールが付与されているユーザーのホスト名とユーザー名を示します。
mysql.default_roles
mysql.default_roles
は、各ユーザーに対してデフォルトで有効になっている役割を示します。
SELECT * FROM mysql.default_roles;
+------+------+-------------------+-------------------+
| HOST | USER | DEFAULT_ROLE_HOST | DEFAULT_ROLE_USER |
+------+------+-------------------+-------------------+
| % | u_1 | % | r_1 |
| % | u_1 | % | r_2 |
+------+------+-------------------+-------------------+
2 rows in set (0.00 sec)
HOST
とUSER
は、それぞれユーザーのホスト名とユーザー名を示します。DEFAULT_ROLE_HOST
とDEFAULT_ROLE_USER
は、それぞれデフォルトの役割のホスト名とユーザー名を示します。
参考文献
RBAC、ユーザー管理、および特権管理は密接に関連しているため、次のリソースで操作の詳細を参照できます。