Skip to content

Commit 8eb4a07

Browse files
author
github-actions
committed
update MD by dispatch event pingcap/docs-cn release-8.5
1 parent 202bda9 commit 8eb4a07

File tree

63 files changed

+878
-190
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+878
-190
lines changed

markdown-pages/zh/tidb/release-8.5/TOC.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -633,6 +633,7 @@
633633
- 权限
634634
- [与 MySQL 安全特性差异](/security-compatibility-with-mysql.md)
635635
- [权限管理](/privilege-management.md)
636+
- [列级权限管理](/column-privilege-management.md)
636637
- [TiDB 用户账户管理](/user-account-management.md)
637638
- [TiDB 密码管理](/password-management.md)
638639
- [基于角色的访问控制](/role-based-access-control.md)

markdown-pages/zh/tidb/release-8.5/basic-features.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ summary: 了解 TiDB 的功能概览。
258258
| [Green GC](/system-variables.md#tidb_gc_scan_lock_mode-从-v50-版本开始引入) | E | E | E | E | E | E | E |
259259
| [资源管控 (Resource Control)](/tidb-resource-control-ru-groups.md) | Y | Y | Y | Y | N | N | N |
260260
| [Runaway Queries 自动管理](/tidb-resource-control-runaway-queries.md) | Y | Y | E | N | N | N | N |
261-
| [后台任务资源管控](/tidb-resource-control-background-tasks.md) | E | E | E | N | N | N | N |
261+
| [后台任务资源管控](/tidb-resource-control-background-tasks.md) | Y | E | E | N | N | N | N |
262262
| [TiFlash 存算分离架构与 S3 支持](/tiflash/tiflash-disaggregated-and-s3.md) | Y | Y | Y | E | N | N | N |
263263
| [选择执行分布式执行框架任务的 TiDB 节点](/system-variables.md#tidb_service_scope-从-v740-版本开始引入) | Y | Y | Y | N | N | N | N |
264264
| 通过系统变量 [`tidb_enable_tso_follower_proxy`](/system-variables.md#tidb_enable_tso_follower_proxy-从-v530-版本开始引入) 控制 PD Follower Proxy 功能 | Y | Y | Y | Y | Y | Y | Y |

markdown-pages/zh/tidb/release-8.5/br/backup-and-restore-use-cases.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ summary: 介绍 TiDB 备份与恢复的具体使用示例,包括推荐环境
1616

1717
## 部署 TiDB 集群和 br 命令行工具
1818

19-
使用 PITR 功能,需要部署 v6.2.0 或以上版本的 TiDB 集群,并且更新 br 命令行工具到与 TiDB 集群相同的版本,本文假设使用的是 v8.5.5 版本。
19+
使用 PITR 功能,需要部署 v6.2.0 或以上版本的 TiDB 集群,并且更新 br 命令行工具到与 TiDB 集群相同的版本,本文假设使用的是 v8.5.6 版本。
2020

2121
下表介绍了在 TiDB 集群中使用日志备份功能的推荐配置。
2222

@@ -43,13 +43,13 @@ summary: 介绍 TiDB 备份与恢复的具体使用示例,包括推荐环境
4343
- 安装:
4444

4545
```shell
46-
tiup install br:v8.5.5
46+
tiup install br:v8.5.6
4747
```
4848

4949
- 升级:
5050

5151
```shell
52-
tiup update br:v8.5.5
52+
tiup update br:v8.5.6
5353
```
5454

5555
## 配置备份存储 (Amazon S3)

markdown-pages/zh/tidb/release-8.5/certificate-authentication.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ mysql -u test -h 0.0.0.0 -P 4000 --ssl-cert /path/to/client-cert.new.pem --ssl-k
308308

309309
```
310310
--------------
311-
mysql Ver 8.5.5 for Linux on x86_64 (MySQL Community Server - GPL)
311+
mysql Ver 8.5.6 for Linux on x86_64 (MySQL Community Server - GPL)
312312
313313
Connection id: 1
314314
Current database: test
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
---
2+
title: 列级权限管理
3+
summary: TiDB 支持兼容 MySQL 的列级权限管理机制。你可以通过 `GRANT` 或 `REVOKE` 在指定表上对指定列授予或回收 `SELECT`、`INSERT`、`UPDATE`、`REFERENCES` 权限,实现更细粒度的访问控制。
4+
---
5+
6+
# 列级权限管理
7+
8+
从 v8.5.6 版本开始,TiDB 支持兼容 MySQL 的列级权限管理机制。通过列级权限,你可以在指定表上对指定列授予或回收 `SELECT``INSERT``UPDATE``REFERENCES` 权限,从而实现更细粒度的数据访问控制。
9+
10+
> **注意:**
11+
>
12+
> 虽然 MySQL 语法允许 `REFERENCES(col_name)` 这种列级写法,但 `REFERENCES` 本身属于数据库/表级权限,用于外键相关的权限检查。因此,列级 `REFERENCES` 在 MySQL 中不会带来实际的列级权限效果。TiDB 的行为与 MySQL 保持一致。
13+
14+
## 语法
15+
16+
列级权限的授予和回收语法与表级权限类似,区别如下:
17+
18+
- 列名列表写在**权限类型**后面,而不是写在**表名**后面。
19+
- 多个列名之间使用逗号(`,`)分隔。
20+
21+
```sql
22+
GRANT priv_type(col_name [, col_name] ...) [, priv_type(col_name [, col_name] ...)] ...
23+
ON db_name.tbl_name
24+
TO 'user'@'host';
25+
26+
REVOKE priv_type(col_name [, col_name] ...) [, priv_type(col_name [, col_name] ...)] ...
27+
ON db_name.tbl_name
28+
FROM 'user'@'host';
29+
```
30+
31+
其中:
32+
33+
* `priv_type` 支持 `SELECT``INSERT``UPDATE``REFERENCES`
34+
* `ON` 后必须指定具体表,例如 `test.tbl`
35+
* 同一条 `GRANT``REVOKE` 语句可以包含多个权限项,每个权限项都可以指定自己的列名列表。
36+
37+
例如,以下语句表示将 `col1``col2``SELECT` 权限和 `col3``UPDATE` 权限授予用户:
38+
39+
```sql
40+
GRANT SELECT(col1, col2), UPDATE(col3) ON test.tbl TO 'user'@'host';
41+
```
42+
43+
## 授予列级权限示例
44+
45+
以下示例将表 `test.tbl``col1``col2``SELECT` 权限授予用户 `newuser`,并将 `col3``UPDATE` 权限授予该用户:
46+
47+
```sql
48+
CREATE DATABASE IF NOT EXISTS test;
49+
USE test;
50+
51+
DROP TABLE IF EXISTS tbl;
52+
CREATE TABLE tbl (col1 INT, col2 INT, col3 INT);
53+
54+
DROP USER IF EXISTS 'newuser'@'%';
55+
CREATE USER 'newuser'@'%';
56+
57+
GRANT SELECT(col1, col2), UPDATE(col3) ON test.tbl TO 'newuser'@'%';
58+
SHOW GRANTS FOR 'newuser'@'%';
59+
```
60+
61+
```
62+
+---------------------------------------------------------------------+
63+
| Grants for newuser@% |
64+
+---------------------------------------------------------------------+
65+
| GRANT USAGE ON *.* TO 'newuser'@'%' |
66+
| GRANT SELECT(col1, col2), UPDATE(col3) ON test.tbl TO 'newuser'@'%' |
67+
+---------------------------------------------------------------------+
68+
```
69+
70+
除了使用 `SHOW GRANTS`,你还可以通过查询 `INFORMATION_SCHEMA.COLUMN_PRIVILEGES` 查看列级权限信息。
71+
72+
## 回收列级权限示例
73+
74+
以下示例从用户 `newuser` 收回列 `col2``SELECT` 权限:
75+
76+
```sql
77+
REVOKE SELECT(col2) ON test.tbl FROM 'newuser'@'%';
78+
SHOW GRANTS FOR 'newuser'@'%';
79+
```
80+
81+
```
82+
+---------------------------------------------------------------+
83+
| Grants for newuser@% |
84+
+---------------------------------------------------------------+
85+
| GRANT USAGE ON *.* TO 'newuser'@'%' |
86+
| GRANT SELECT(col1), UPDATE(col3) ON test.tbl TO 'newuser'@'%' |
87+
+---------------------------------------------------------------+
88+
```
89+
90+
## 列级权限访问控制示例
91+
92+
在授予或回收列级权限后,TiDB 会对 SQL 中引用的列进行权限检查。例如:
93+
94+
* `SELECT` 语句:`SELECT` 列权限会影响 `SELECT` 列表以及 `WHERE``ORDER BY` 等子句中引用的列。
95+
* `UPDATE` 语句:`SET` 子句中被更新的列需要 `UPDATE` 列权限。在表达式、条件中被读取的列通常还需要 `SELECT` 列权限。
96+
* `INSERT` 语句:被写入的列需要 `INSERT` 列权限。`INSERT INTO t VALUES (...)` 等价于按表定义顺序向所有列写入值。
97+
98+
以下示例中,用户 `newuser` 仅能查询 `col1`,并更新 `col3`
99+
100+
```sql
101+
-- 以 newuser 登录执行
102+
SELECT col1 FROM tbl;
103+
SELECT * FROM tbl; -- 报错(缺少 col2、col3 的 SELECT 列权限)
104+
105+
UPDATE tbl SET col3 = 1;
106+
UPDATE tbl SET col1 = 2; -- 报错(缺少 col1 的 UPDATE 列权限)
107+
108+
UPDATE tbl SET col3 = col1;
109+
UPDATE tbl SET col3 = col3 + 1; -- 报错(缺少 col3 的 SELECT 列权限)
110+
UPDATE tbl SET col3 = col1 WHERE col1 > 0;
111+
```
112+
113+
## 与 MySQL 的兼容性差异
114+
115+
TiDB 的列级权限整体与 MySQL 兼容,但在以下场景存在差异:
116+
117+
| 场景 | TiDB | MySQL |
118+
| :----------------------- | :-------------------------- | :---------------------------- |
119+
| 收回用户未被授予的列级权限 | `REVOKE` 可以成功执行 | 在未使用 `IF EXISTS` 时,`REVOKE` 会报错 |
120+
| 列裁剪与 `SELECT` 列权限检查的执行顺序 | 先检查 `SELECT` 列权限,再进行列裁剪。例如,执行 `SELECT a FROM (SELECT a, b FROM t) s` 需要同时拥有 `t.a``t.b``SELECT` 列权限。 | 先进行列裁剪,再检查 `SELECT` 列权限。例如,执行 `SELECT a FROM (SELECT a, b FROM t) s` 只需要 `t.a``SELECT` 列权限。 |
121+
122+
### 视图场景的列裁剪与权限检查
123+
124+
在对视图进行 `SELECT` 权限检查时,MySQL 和 TiDB 存在以下差异:
125+
126+
- MySQL 会先对视图内部查询做列裁剪,再检查内部表的列权限,因此在某些场景下检查相对宽松。
127+
- TiDB 不会在权限检查之前做列裁剪,因此可能需要额外的列权限。
128+
129+
```sql
130+
-- 以 root 登录准备环境
131+
DROP USER IF EXISTS 'u'@'%';
132+
CREATE USER 'u'@'%';
133+
134+
DROP TABLE IF EXISTS t;
135+
CREATE TABLE t (a INT, b INT, c INT, d INT);
136+
137+
DROP VIEW IF EXISTS v;
138+
CREATE SQL SECURITY INVOKER VIEW v AS SELECT a, b FROM t WHERE c = 0 ORDER BY d;
139+
140+
GRANT SELECT ON v TO 'u'@'%';
141+
142+
-- 以 u 登录
143+
SELECT a FROM v;
144+
-- MySQL:报错,缺少对 t.a、t.c、t.d 的访问权限
145+
-- TiDB:报错,缺少对 t.a、t.b、t.c、t.d 的访问权限
146+
147+
-- 以 root 登录
148+
GRANT SELECT(a, c, d) ON t TO 'u'@'%';
149+
150+
-- 以 u 登录
151+
SELECT a FROM v;
152+
-- MySQL:成功(会将内部查询裁剪为 `SELECT a FROM t WHERE c = 0 ORDER BY d`)
153+
-- TiDB:报错,缺少对 t.b 的访问权限
154+
155+
SELECT * FROM v;
156+
-- MySQL:报错,缺少对 t.b 的访问权限
157+
-- TiDB:报错,缺少对 t.b 的访问权限
158+
159+
-- 以 root 登录
160+
GRANT SELECT(b) ON t TO 'u'@'%';
161+
162+
-- 以 u 登录
163+
SELECT * FROM v;
164+
-- MySQL:成功
165+
-- TiDB:成功
166+
```
167+
168+
## 另请参阅
169+
170+
* [权限管理](/privilege-management.md)
171+
* [`GRANT <privileges>`](/sql-statements/sql-statement-grant-privileges.md)
172+
* [`REVOKE <privileges>`](/sql-statements/sql-statement-revoke-privileges.md)

markdown-pages/zh/tidb/release-8.5/dashboard/dashboard-slow-query.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ summary: 了解如何在 TiDB Dashboard 中查看慢查询。
6161

6262
>**注意:**
6363
>
64-
> 记录在 `Query` 中的查询的长度会受到 [`tidb_stmt_summary_max_sql_length`](/system-variables.md#tidb_stmt_summary_max_sql_length-从-v40-版本开始引入) 系统变量的限制。
64+
> - 记录在 `Query` 中的查询的长度会受到 [`tidb_stmt_summary_max_sql_length`](/system-variables.md#tidb_stmt_summary_max_sql_length-从-v40-版本开始引入) 系统变量的限制。
65+
> - 对于预处理语句,参数会在查询末尾列出,例如:`[arguments: "foo", 123]`。不可打印的参数会以十六进制字面量显示,例如 `0x01`
6566
6667
点击**展开** (**Expand**) 可以展开相应项的完整内容,点击**复制** (**Copy**) 可以复制内容到剪贴板。
6768

0 commit comments

Comments
 (0)