Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 17 additions & 17 deletions docs/cn/guides/56-security/access-control/02-roles.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: 角色
---

Databend 中的角色在简化权限管理方面起着关键作用。当多个用户需要相同的权限集时,单独授予权限可能很麻烦。角色提供了一种解决方案,允许将一组权限分配给一个角色,然后可以轻松地将该角色分配给多个用户
角色在 Databend 的权限管理中起着关键作用。当多个用户需要相同的权限时,逐一授权会非常繁琐。通过角色,我们可以将一组权限打包,然后轻松地将其分配给多个用户

:::note
目前,Databend 默认不对用户定义函数 (UDF) 和 Stage 强制执行基于角色的访问控制 (RBAC) 检查。但是,如果您需要对这些对象执行 RBAC,您可以选择手动设置 `SET GLOBAL enable_experimental_rbac_check=1` 来全局启用它。
Expand All @@ -14,9 +14,9 @@ Databend 中的角色在简化权限管理方面起着关键作用。当多个

## 继承角色 & 建立层级结构

角色授予使一个角色能够继承另一个角色的权限和职责。这有助于创建灵活的层级结构,类似于组织结构,其中存在两个 [内置角色](#built-in-roles):最高的是 `account-admin`,最低的是 `public`。
角色授予允许一个角色继承另一个角色的权限。这有助于构建灵活的层级结构(类似于组织架构)。Databend 主要包含两个[内置角色](#built-in-roles):最高层级的 `account-admin` 和最低层级的 `public`。

考虑创建三个角色的场景:_manager_、_engineer_ 和 _intern_。在此示例中,_intern_ 角色被授予给 _engineer_ 角色。因此,_engineer_ 不仅拥有自己的权限集,还继承了与 _intern_ 角色相关的权限。进一步扩展此层级结构,如果将 _engineer_ 角色授予给 _manager_, _manager_ 现在获得 _engineer_ 和 _intern_ 角色的固有权限
假设我们创建了三个角色:_manager_、_engineer_ 和 _intern_。如果我们把 _intern_ 角色授予 _engineer_,那么 _engineer_ 不仅拥有自己的权限,还会继承 _intern_ 的权限。以此类推,如果把 _engineer_ 角色授予 _manager_,那么 _manager_ 将同时获得 _engineer_ 和 _intern_ 的所有权限

![Alt text](/img/guides/access-control-4.png)

Expand All @@ -26,14 +26,14 @@ Databend 附带以下内置角色:

| 内置角色 | 描述 |
| ------------- | -------------------------------------------------------------------------- |
| account-admin | 拥有所有权限,充当所有其他角色的父角色,并能够无缝切换到租户中的任何角色。 |
| public | 不继承任何权限,将所有角色视为其父角色,并允许任何角色切换到 public 角色。 |
| account-admin | 拥有所有权限,是所有其他角色的父角色,可以无缝切换为租户内的任何角色。 |
| public | 不继承任何权限,所有其他角色都是它的父角色。任何角色都可以切换为 public 角色。 |

要在 Databend Cloud 中将 `account-admin` 角色分配给用户,请在邀请用户时选择该角色。您也可以在用户加入后将该角色分配给用户。如果您使用的是 Databend Community Edition 或 Enterprise Edition,请首先在部署期间配置 `account-admin` 用户,然后根据需要将该角色分配给其他用户。有关配置管理员用户的更多信息,请参阅 [配置管理员用户](../../10-deploy/04-references/01-admin-users.md)。
Databend Cloud 中,您可以在邀请用户时直接分配 `account-admin` 角色,或者在用户加入后进行分配。如果您使用的是 Databend 社区版或企业版,请在部署时先配置好 `account-admin` 用户,然后再按需分配给其他用户。关于管理员用户的配置详情,请参阅[配置管理员用户](../../10-deploy/04-references/01-admin-users.md)。

## 设置默认角色

当用户被授予多个角色时,您可以使用 [CREATE USER](/sql/sql-commands/ddl/user/user-create-user) 或 [ALTER USER](/sql/sql-commands/ddl/user/user-alter-user) 命令为该用户设置默认角色。默认角色确定在会话开始时自动分配给用户的角色
当用户拥有多个角色时,可以使用 [CREATE USER](/sql/sql-commands/ddl/user/user-create-user) 或 [ALTER USER](/sql/sql-commands/ddl/user/user-alter-user) 命令设置默认角色。默认角色是用户登录会话时自动生效的角色

```sql title='Example:'
-- 显示系统中现有的角色
Expand All @@ -57,33 +57,33 @@ GRANT ROLE account_admin TO eric;
ALTER USER eric WITH DEFAULT_ROLE = 'account_admin';
```

- 用户可以使用 [SET ROLE](/sql/sql-commands/ddl/user/user-set-role) 命令灵活地在会话中切换到其他角色
- 用户可以使用 [SHOW ROLES](/sql/sql-commands/ddl/user/user-show-roles) 命令检查其当前角色并查看授予给他们的所有角色
- 如果您没有为用户显式设置默认角色,Databend 将默认使用内置角色 `public` 作为默认角色
- 用户可以在会话中使用 [SET ROLE](/sql/sql-commands/ddl/user/user-set-role) 命令灵活切换角色
- 用户可以使用 [SHOW ROLES](/sql/sql-commands/ddl/user/user-show-roles) 命令查看当前的活跃角色以及所有被授予的角色
- 如果未显式设置默认角色,Databend 将默认使用内置角色 `public`。

## 激活角色 & 辅助角色

可以向用户授予 Databend 中的多个角色。这些角色分为激活角色和辅助角色
Databend 中,用户可以被授予多个角色。这些角色分为激活角色(Active Role)和辅助角色(Secondary Roles)

- 激活角色是用户当前会话的激活主角色,可以使用 [SET ROLE](/sql/sql-commands/ddl/user/user-set-role) 命令进行设置
- **激活角色**:用户当前会话中正在使用的主角色,可通过 [SET ROLE](/sql/sql-commands/ddl/user/user-set-role) 命令进行切换

- 辅助角色是提供额外权限的其他角色,默认情况下处于激活状态。用户可以使用 [SET SECONDARY ROLES](/sql/sql-commands/ddl/user/user-set-2nd-roles) 命令激活或停用辅助角色,以临时调整其权限范围
- **辅助角色**:提供额外权限的角色,默认处于激活状态。用户可以使用 [SET SECONDARY ROLES](/sql/sql-commands/ddl/user/user-set-2nd-roles) 命令来启用或禁用这些角色,从而临时调整权限范围

## 账单角色

除了标准的内置角色之外,您还可以在 Databend Cloud 中创建一个名为 `billing` 的自定义角色,专门满足财务人员的需求。角色 `billing` 仅提供对与账单相关的信息的访问权限,确保财务人员可以查看必要的财务数据,而无需访问其他与业务相关的页面
除了标准的内置角色,Databend Cloud 还支持创建名为 `billing` 的自定义角色,专为财务人员设计。`billing` 角色仅拥有账单信息的访问权限,确保财务人员在查看财务数据时,无法访问其他业务页面

要设置和使用角色 `billing`,您可以使用以下命令创建它
要设置和使用 `billing` 角色,可以使用以下命令创建

```sql
CREATE ROLE billing;
```

角色名称不区分大小写,因此 `billing` 和 `Billing` 被认为是相同的。有关设置和分配角色 `billing` 的详细步骤,请参阅 [授予财务人员访问权限](/guides/cloud/manage/costs#granting-access-to-finance-personnel)。
角色名称不区分大小写,`billing` 和 `Billing` 视为相同。关于该角色的设置和分配步骤,请参阅[授予财务人员访问权限](/guides/cloud/manage/costs#granting-access-to-finance-personnel)。

## 使用示例

此示例展示了基于角色的权限管理。最初,创建一个“writer角色并授予权限。随后,这些权限被分配给用户“eric”,他继承了这些权限。最后,从角色中撤销权限,展示了它们对用户权限的影响
此示例展示了基于角色的权限管理。首先创建一个 `writer` 角色并授予权限,然后将这些权限授予用户 `eric`,使其继承这些权限。最后,撤销角色的权限,演示其对用户权限的影响

```sql title='Example:'
-- 创建一个名为 'writer' 的新角色
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,25 @@ import FunctionDescription from '@site/src/components/FunctionDescription';

<FunctionDescription description="引入或更新于:v1.2.696"/>

一个只读的内存表,用于存储所有查询日志。有关查询日志中可用字段的具体信息,请参阅[示例](#examples)部分。
这是一个只读的内存表,用于存储所有的查询日志。关于查询日志中可用字段的具体信息,请参阅[示例](#examples)部分。

## 设置会话标签

可以选择为会话(Session)分配一个标签,便于根据分配的会话标签在日志表中筛选日志。例如,以下命令为当前会话分配标签`eric`:
您可以为会话(Session)设置标签,以便在日志表中通过标签筛选日志。例如,使用以下命令为当前会话分配标签 `eric`:

```sql
set session query_tag='eric';
```

随后,运行查询(Query)并使用分配的标签从日志表中检索日志
然后,运行查询(Query)并使用该标签在日志表中检索对应的日志记录

```sql
show users;

select query_tag, query_text from system.query_log where query_tag='eric' limit 1;
```

返回结果中可找到该查询的记录,标签为'eric'
结果将显示带有 `eric` 标签的查询记录

```sql
-[ RECORD 1 ]-----------------------------------
Expand All @@ -34,7 +34,7 @@ select query_tag, query_text from system.query_log where query_tag='eric' limit

## 示例

`system.query_log`表存储已执行查询的详细日志。以下是日志条目的示例
`system.query_log` 表存储了已执行查询的详细日志。以下是一个日志条目的示例

```sql
SELECT * FROM system.query_log;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ import FunctionDescription from '@site/src/components/FunctionDescription';
- [REVOKE](11-revoke.md)
- [SHOW GRANTS](22-show-grants.md)

> 使用 `GRANT``REVOKE` 变更角色与权限后,执行 [SYSTEM FLUSH PRIVILEGES](../../50-administration-cmds/flush-privileges.md) 可立即让所有查询节点刷新缓存。
## Syntax

### Granting Privileges
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
title: SYSTEM FLUSH PRIVILEGES
---

`SYSTEM FLUSH PRIVILEGES` 会向每个查询节点广播刷新请求,使其立即从 Meta 服务重新加载角色与权限缓存。执行 `GRANT` 或 `REVOKE` 之后如果希望变更立刻在整个集群生效,可以使用该命令,而不用等待默认 15 秒的缓存刷新周期。

参见:

- [GRANT](../00-ddl/02-user/10-grant.md)
- [REVOKE](../00-ddl/02-user/11-revoke.md)

## 语法

```sql
SYSTEM FLUSH PRIVILEGES
```

## 使用说明

- 需要具备能够执行系统管理命令的角色,例如 `ACCOUNT ADMIN`。
- 该命令仅刷新节点本地缓存,不会修改角色或授权内容本身。
- 已经在运行的语句会继续沿用启动时解析到的权限,若要使用最新权限,请在刷新之后重新执行语句。

## 示例

下面的示例为角色授予数据库访问权限,并立即刷新缓存,使所有查询节点都能看到新的权限:

```sql
GRANT SELECT ON DATABASE marketing TO ROLE analyst;

SYSTEM FLUSH PRIVILEGES;
```


刷新完成后,继承 `analyst` 角色的新查询无需等待缓存失效即可获得更新后的权限。
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ title: 管理命令
| **[KILL](01-kill.md)** | 终止正在运行的查询或连接 |
| **[RUST BACKTRACE](rust-backtrace.md)** | 调试 Rust 堆栈跟踪 |

## 访问控制

| 命令 | 说明 |
|---------|-------------|
| **[FLUSH PRIVILEGES](flush-privileges.md)** | 让每个查询节点立即重新加载角色与权限缓存 |

## 配置管理

| 命令 | 说明 |
Expand Down Expand Up @@ -43,4 +49,4 @@ title: 管理命令

| 命令 | 说明 |
|---------|-------------|
| **[EXECUTE IMMEDIATE](execute-immediate.md)** | 执行动态构造的 SQL 语句 |
| **[EXECUTE IMMEDIATE](execute-immediate.md)** | 执行动态构造的 SQL 语句 |
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ See also:
- [REVOKE](11-revoke.md)
- [SHOW GRANTS](22-show-grants.md)

> After changing privileges or roles with `GRANT`, run [SYSTEM FLUSH PRIVILEGES](../../50-administration-cmds/flush-privileges.md) to broadcast the updates to every query node immediately.
## Syntax

### Granting Privileges
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
title: SYSTEM FLUSH PRIVILEGES
---

`SYSTEM FLUSH PRIVILEGES` broadcasts a refresh request to every query node so each node immediately reloads privilege and role metadata from the Meta service. Run the command after `GRANT` or `REVOKE` statements when you need the changes to take effect across the cluster without waiting for the default 15-second role-cache interval.

See also:

- [GRANT](../00-ddl/02-user/10-grant.md)
- [REVOKE](../00-ddl/02-user/11-revoke.md)

## Syntax

```sql
SYSTEM FLUSH PRIVILEGES
```

## Usage Notes

- Requires a role that is allowed to execute system administration commands, such as `ACCOUNT ADMIN`.
- Refreshes cached privilege metadata only; it does not alter roles or grants by itself.
- Statements that are already running keep using the privileges that were resolved when they started. Re-run the statement after the flush to pick up the changes.

## Example

The following sequence grants a role access to a database and immediately flushes the caches so the new privilege is visible from every query node:

```sql
GRANT SELECT ON DATABASE marketing TO ROLE analyst;

SYSTEM FLUSH PRIVILEGES;
```

After the flush completes, any new query that runs under the `analyst` role receives the updated privilege set without waiting for the cache to expire.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ This page provides reference information for the system administration commands
| **[KILL](01-kill.md)** | Terminate running queries or connections |
| **[RUST BACKTRACE](rust-backtrace.md)** | Debug Rust stack traces |

## Access Control

| Command | Description |
|---------|-------------|
| **[FLUSH PRIVILEGES](flush-privileges.md)** | Force every query node to reload role and privilege metadata |

## Configuration Management

| Command | Description |
Expand Down Expand Up @@ -43,4 +49,4 @@ This page provides reference information for the system administration commands

| Command | Description |
|---------|-------------|
| **[EXECUTE IMMEDIATE](execute-immediate.md)** | Execute dynamically constructed SQL statements |
| **[EXECUTE IMMEDIATE](execute-immediate.md)** | Execute dynamically constructed SQL statements |
Loading