常见的访问管理查询
如果您正在使用自管理的 ClickHouse,请查看 SQL 用户和角色。
本文展示了定义 SQL 用户和角色的基础知识,以及如何将这些权限应用于数据库、表、行和列。
管理员用户
ClickHouse Cloud 服务有一个管理员用户,default
,在服务创建时会被创建。密码在服务创建时提供,并且可以由具有 Admin 角色的 ClickHouse Cloud 用户重置。
当您为 ClickHouse Cloud 服务添加额外的 SQL 用户时,他们将需要一个 SQL 用户名和密码。如果您希望他们拥有管理级别的权限,则将新用户分配到角色 default_role
。例如,添加用户 clickhouse_admin
:
使用 SQL 控制台时,您的 SQL 语句不会以 default
用户身份运行。相反,语句将以名为 sql-console:${cloud_login_email}
的用户身份运行,其中 cloud_login_email
是当前运行查询的用户的电子邮件。
这些自动生成的 SQL 控制台用户具有 default
角色。
无密码认证
SQL 控制台有两个可用角色:sql_console_admin
(与 default_role
权限相同)和 sql_console_read_only
(仅具有只读权限)。
管理员用户默认分配 sql_console_admin
角色,因此他们没有变化。然而,sql_console_read_only
角色允许非管理员用户被授予任意实例的只读或完全访问权限。管理员需要配置此访问。可以使用 GRANT
或 REVOKE
命令调整这些角色,以更好地满足实例特定的要求,对这些角色所做的任何修改都将被持久化。
精细的访问控制
此访问控制功能也可以手动配置,以实现用户级的细粒度控制。在将新的 sql_console_*
角色分配给用户之前,应创建与命名空间 sql-console-role:<email>
匹配的 SQL 控制台用户特定数据库角色。例如:
当检测到匹配的角色时,将为用户分配该角色,而不是模板角色。这引入了更复杂的访问控制配置,例如创建角色 sql_console_sa_role
和 sql_console_pm_role
,并将其授予特定用户。例如:
测试管理员权限
退出用户 default
并以用户 clickhouse_admin
重新登录。
以下所有操作应该成功:
非管理员用户
用户应该具备必要的权限,并且并非所有用户都是管理员用户。本文档的其余部分提供了示例场景和所需角色。
准备工作
创建这些表和用户以供示例使用。
创建示例数据库、表和行
-
创建测试数据库
-
创建一个表
-
用示例行填充表
-
验证表:
-
创建常规用户以演示限制对某些列的访问:
-
创建常规用户以演示限制对特定值的行的访问:
创建角色
通过这一组示例:
- 将为不同权限(例如列和行)创建角色
- 将权限授予角色
- 将用户分配给每个角色
角色用于定义某些权限的用户组,而不是单独管理每个用户。
-
创建一个角色,以限制该角色的用户仅能在数据库
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 中的角色
显示策略
查看策略如何定义及当前权限
管理角色、策略和用户的示例命令
以下命令可用于:
- 删除权限
- 删除策略
- 撤销用户角色
- 删除用户和角色
以管理员用户或 default
用户身份运行这些命令
从角色中移除权限
删除策略
撤销用户角色
删除角色
删除用户
总结
本文演示了创建 SQL 用户和角色的基础知识,并提供了为用户和角色设置和修改权限的步骤。有关每个部分的更详细信息,请参阅我们的用户指南和参考文档。