文章目录
验证和授权
身份验证
身份验证用于将会话映射到特定用户,从而实现访问控制
当客户端连接到 Nebula Graph 时,Nebula Graph 会创建一个会话,会话中存储连接的各种信息,如果开启了身份验证,就会将会话映射到对应
的用户。
默认情况下,身份验证功能是关闭的,用户可以使用 root 用户名和任意密码连接到 Nebula Graph。
Nebula Graph 支持两种身份验证方式:本地身份验证和 LDAP 验证。
本地身份验证
本地身份验证是指在服务器本地存储用户名、加密密码,当用户尝试访问 Nebula Graph 时,将进行身份验证。
启用本地身份验证
- 编辑配置文件 nebula-graphd.conf (默认目录为 /usr/local/nebula/etc/ ),设置如下参数:
- –enable_authorize :是否启用身份验证,可选值: true 、 false 。
- –failed_login_attempts :可选项,需要手动添加该参数。单个 Graph 节点允许连续输入错误密码的次数。超过该次数时,账户会被锁定。如果有多个
Graph 节点,允许的次数为 节点数 * 次数 。 - –password_lock_time_in_secs :可选项,需要手动添加该参数。多次输入错误密码后,账户被锁定的时间。单位:秒。
- 重启 Nebula Graph 服务
开启身份验证后,默认的 God 角色账号为 root ,密码为 nebula 。角色详情请参见内置角色权限。
OpenLDAP 验证
OpenLDAP 是轻型目录访问协议(LDAP)的开源实现,可以实现账号集中管理
当前仅企业版支持集成 OpenLDAP 进行身份验证,详情请参见使用 OpenLDAP 进行身份验证
用户管理
用户管理是 Nebula Graph 访问控制中不可或缺的组成部分,本文将介绍用户管理的相关语法。
开启身份验证后,用户需要使用已创建的用户才能连接 Nebula Graph,而且连接后可以进行的操作也取决于该用户拥有的角色权限。
- 默认情况下,身份验证功能是关闭的,用户可以使用 root 用户名和任意密码连接到 Nebula Graph。
- 修改权限后,对应的用户需要重新登录才能生效
创建用户( CREATE USER )
执行 CREATE USER 语句可以创建新的 Nebula Graph 用户。当前仅 God 角色用户(即 root 用户)能够执行 CREATE USER 语句
CREATE USER [IF NOT EXISTS] <user_name> [WITH PASSWORD '<password>'];
CREATE USER user1 WITH PASSWORD 'nebula';
授权用户( GRANT ROLE )
执行 GRANT ROLE 语句可以将指定图空间的内置角色权限授予用户。当前仅 God 角色用户和 Admin 角色用户能够执行 GRANT ROLE 语句。角色权限的说
明,请参见内置角色权限。
GRANT ROLE <role_type> ON <space_name> TO <user_name>;
GRANT ROLE USER ON basketballplayer TO user1;
撤销用户权限( REVOKE ROLE )
执行 REVOKE ROLE 语句可以撤销用户的指定图空间的内置角色权限。当前仅 God 角色用户和 Admin 角色用户能够执行 REVOKE ROLE 语句。角色权限的
说明,请参见内置角色权限。
REVOKE ROLE <role_type> ON <space_name> FROM <user_name>;
REVOKE ROLE USER ON basketballplayer FROM user1
查看指定用户权限( DESCRIBE USER )
执行 DESCRIBE USER 语句可以查看指定用户的角色权限信息。
DESCRIBE USER <user_name>;
DESC USER <user_name>;
DESCRIBE USER user1;
+---------+--------------------+
| role | space |
+---------+--------------------+
| "ADMIN" | "basketballplayer" |
+---------+--------------------+
查看指定空间内用户权限( SHOW ROLES )
执行 SHOW ROLES 语句可以查看指定空间内的所有用户(除 root 以外)和对应角色权限的信息。
SHOW ROLES IN <space_name>;
nebula> SHOW ROLES IN basketballplayer;
+---------+-----------+
| Account | Role Type |
+---------+-----------+
| "user1" | "ADMIN" |
+---------+-----------+
修改用户密码( CHANGE PASSWORD )
执行 CHANGE PASSWORD 语句可以修改用户密码,修改时需要提供旧密码和新密码
CHANGE PASSWORD <user_name> FROM '<old_password>' TO '<new_password>';
nebula> CHANGE PASSWORD user1 FROM 'nebula' TO 'nebula123';
修改用户密码( ALTER USER )
执行 ALTER USER 语句可以修改用户密码,修改时不需要提供旧密码。当前仅 God 角色用户(即 root 用户)能够执行 ALTER USER 语句。
ALTER USER <user_name> WITH PASSWORD '<password>';
ALTER USER user1 WITH PASSWORD 'nebula';
删除用户( DROP USER )
执行 DROP USER 语句可以删除用户。当前仅 God 角色用户能够执行 DROP USER 语句
删除用户不会自动断开该用户当前会话,而且权限仍在当前会话中生效。
DROP USER [IF EXISTS] <user_name>;
DROP USER user1;
查看用户列表( SHOW USERS )
执行 SHOW USERS 语句可以查看用户列表。当前仅 God 角色用户能够执行 SHOW USERS 语句。
SHOW USERS;
SHOW USERS;
+-----------+
| Account |
+-----------+
| "test1" |
| "test2" |
| "test3" |
+-----------+
内置角色权限
所谓角色,就是一组相关权限的集合。用户可以把角色分配给创建的用户,从而实现访问控制。
内置角色
Nebula Graph 内置了多种角色,说明如下:
- God
- 初始最高权限角色,拥有所有操作的权限。类似于 Linux 中的 root 和 * * Windows 中的 administrator 。
- Meta 服务初始化时,会自动创建 God 角色用户 root ,密码为 nebula 。
请及时修改 root 用户的密码,保证数据安全
- 一个集群只能有一个 God 角色用户,该用户可以管理集群内所有图空间。
- 不支持手动授权 God 角色,只能使用默认 God 角色用户 root 。
- Admin
- 对权限内的图空间拥有 Schema 和 data 的读写权限。
- 可以将权限内的图空间授权给其他用户。
只能授权低于 ADMIN 级别的角色给其他用户
- DBA
- 对权限内的图空间拥有 Schema 和 data 的读写权限。
- 无法将权限内的图空间授权给其他用户。
- User
- 对权限内的图空间拥有 Schema 的只读权限。
- 对权限内的图空间拥有 data 的读写权限。
- Guest
- 对权限内的图空间拥有 Schema 和 data 的只读权限。
- 不支持自行创建角色,只能使用默认的内置角色。
- 一个用户在一个图空间内只能拥有一个角色权限。授权用户请参见用户管理。
角色权限
各角色的执行权限如下
Show operations 为特殊操作,只会在自身权限内执行。例如 SHOW SPACES ,每个角色都可以执行,但是只会返回自身权限内的图空间。 只有 God 角色可
以执行 SHOW USERS 和 SHOW SNAPSHOTS 语句
使用 OpenLDAP 进行身份验证
…