管理员用户
default,会在服务创建时自动创建。密码会在创建服务时提供,并且拥有 Admin 角色的 ClickHouse Cloud 用户可以重置该密码。
当你为 ClickHouse Cloud 服务添加额外的 SQL 用户时,他们需要提供 SQL 用户名和密码。如果你希望他们拥有管理员级别的特权,请为这些新用户分配 default_role 角色。例如,添加用户 clickhouse_admin:
default 用户身份执行。相反,这些语句会以名为 sql-console:${cloud_login_email} 的用户身份执行,其中 cloud_login_email 是当前运行查询的用户的电子邮件地址。这些自动生成的 SQL 控制台用户具有 default 角色。无密码身份验证
sql_console_admin,其 权限 与 default_role 完全一致;以及 sql_console_read_only,具有只读权限。
Admin 用户默认会被分配 sql_console_admin 角色,因此对他们来说无需做任何更改。不过,sql_console_read_only 角色使非 Admin 用户也可以被授予任意 instance 的只读或完全访问权限。此类访问需要由 Admin 配置。可以使用 GRANT 或 REVOKE 命令调整这些角色,以更好地满足特定 instance 的需求,并且对这些角色所做的任何修改都会被保留。
细粒度访问控制
sql_console_* 角色之前,应先创建与命名空间 sql-console-role:<email> 对应的 SQL 控制台用户专用数据库角色。例如:
sql_console_sa_role 和 sql_console_pm_role 这类角色,并将其授予特定用户。例如:
测试管理员权限
default 用户登录,然后使用 clickhouse_admin 用户重新登录。
以下所有操作都应成功:
非管理员用户
准备工作
创建示例数据库、表和数据行
创建测试数据库
创建表
向表中插入示例行
验证表
创建 column_user
创建 row_user
创建角色
- 创建具有不同权限的角色,例如针对列和行的角色
- 为角色授予权限
- 将用户分配给各个角色
创建一个角色,将该角色的用户限制为只能查看数据库 db1 中 table1 表的 column1:
设置权限,允许查看 column1
将用户 column_user 添加到角色 column1_users
创建一个角色,将该角色的用户限制为只能查看选定的行;在本例中,仅能查看 column1 中包含 A 的行
将 row_user 添加到角色 A_rows_users
创建一条策略,仅允许查看 column1 值为 A 的行
为数据库和表设置权限
为其他角色授予显式权限,使其仍可访问所有行
验证
使用列受限用户测试角色权限
使用 clickhouse_admin 用户登录 ClickHouse 客户端
验证管理员用户对数据库、表和所有行的访问权限。
使用 column_user 用户登录 ClickHouse 客户端
测试使用所有列执行 SELECT
id 和 column1 的访问权限,因此访问被拒绝。验证仅查询已指定且允许访问的列的 SELECT 查询:
使用行级受限用户测试角色权限
使用 row_user 登录 ClickHouse 客户端
查看可访问的行
column1 中值为 B 的行应被排除。修改用户和角色
role1 只允许查询 column1,而 role2 允许查询 column1 和 column2,那么该用户将有权访问这两列。
使用管理员账户,创建一个按行和列限制且带默认角色的新用户
移除 A_rows_users 角色先前的权限
仅允许 A_row_users 角色查询 column1
使用 row_and_column_user 登录 ClickHouse 客户端
使用所有列进行测试:
使用受限的允许列进行测试:
故障排查
列出用户的授权和角色
查看 ClickHouse 中的角色
查看策略
查看策略定义及当前权限
管理角色、策略和用户的示例命令
- 删除权限
- 删除策略
- 将用户从角色中移除
- 删除用户和角色