通常,授权是控制谁(用户、角色)可以对哪些资源或目标(数据库、函数、表、集群、模式、行)执行哪些操作(例如读取、写入、更新、删除、授予等)、用户、工作等)。
在hubble中,角色或用户之间没有技术上的区别。角色或者用户支持以下操作:
SQL语句CREATE USER
和CREATE ROLE
将创建相同的实体,在整个文档中,我们将根据实体的预期目的来引用“用户”或“角色”。
SQL用户可以使用内置的SQL shell或通过应用程序与hubble数据库进行交互。
使用CREATE USER
和DROP USER
语句创建和删除用户,使用ALTER USER
语句添加或更改用户的密码和角色选项,使用GRANT
和REVOKE
语句管理用户权限,使用SHOW USERS
语句列出用户。
必须为新用户授予该用户需要访问的每个数据库和表所需的权限。
默认情况下,新用户属于该public角色,除了分配给该public角色的权限外,没有其他权限。
默认情况下root为每个集群创建用户。root用户被分配给admin角色并拥有整个集群的所有权限。
对于安全集群,除了为用户生成客户端证书外,还可以使用语句root为用户分配或更改密码。
角色是一组用户和或其他角色,可以将其作为一个整体授予或撤销权限。要简化访问管理,请创建一个角色并向该角色授予权限,然后创建 SQL用户并向他们授予该角色的成员资格。
admin角色是默认创建的,不能删除。属于该admin角色的用户拥有集群中所有数据库对象的所有权限。root用户默认属于该角色。
admin用户是admin角色的成员。只有admin用户可以使用CREATE ROLE
和DROP ROLE
。
将用户分配给admin角色:
GRANT admin TO <username>;
默认情况下,所有新用户和角色都属于该public角色。您可以授予和撤销public角色的权限。
角色管理员
Role admin是一个角色选项,允许给定的用户或角色通过授予和撤销其他用户和角色来管理自己。
要创建admin角色,请使用WITH ADMIN OPTION
语句。
grant admin to username with admin option;
所有hubble对象(例如数据库、表、模式和类型)都必须有所有者。创建该对象的用户是该对象的默认所有者,并且对该对象具有ALL特权。同样,作为所有者角色成员的任何角色也拥有对象的所有特权。
当用户通过内置 SQL客户端或客户端驱动程序连接到数据库时,hubble会检查用户和角色对每个执行语句的权限。如果用户没有足够的权限执行语句,hubble会报错。
角色和用户可以被授予以下权限:
权限 | 形式 |
---|---|
ALL | 数据库、模式、表、类型 |
CREATE | 数据库、模式、表 |
DROP | 数据库、表 |
GRANT | 数据库、模式、表、类型 |
CONNECT | 数据库 |
SELECT | 表 |
INSERT | 表 |
DELETE | 表 |
UPDATE | 表 |
默认情况下,hubble授予当前角色、用户对他们创建的对象的所有权限。
要查看一个角色或一组角色的默认权限,请使用该SHOW DEFAULT PRIVILEGES
语句。
要更改用户创建的对象的默认权限,请使用该ALTER DEFAULT PRIVILEGES
语句。
使用GRANT
和EVOKE
语句来管理用户和角色的权限。
在向角色和用户授予权限时,请考虑以下几点:
授权用户是否可以执行以下操作:
我们推荐以下最佳实践来为集群设置访问控制: