前言
在数字化浪潮中,数据安全愈发重要。对于利用 NebulaGraph 3.8.0 图数据库的用户而言,保障数据安满是构建可靠体系的关键环节。本日,小支童鞋就来为大家详细梳理怎样启用和设置用户认证,并实施用户权限的三权分立,以满意国家信息安全品级保护(等保)要求,让友友们的 NebulaGraph 应用更加安全可靠。
NebulaGraph 作为一款高性能分布式图数据库,在大规模数据存储和复杂查询场景中表现卓越。但在生产环境下,若不重视安全设置,数据安全将面临巨大挑战。启用用户认证并实现用户权限三权分立,是提拔 NebulaGraph 安全性、符合等保要求的须要之举。接下来,我将一步步带领大家深入了解并实践这些关键安全步伐。
一 、身份验证
当客户端连接到 NebulaGraph 时,NebulaGraph 会创建一个会话,会话中存储连接的各种信息,如果开启了身份验证,就会将会话映射到对应的用户。
NebulaGraph 支持两种身份验证方式:本地身份验证和 LDAP 验证。
1、默认设置的风险
默认环境下,NebulaGraph 的认证功能是关闭的,这意味着任何用户都可以利用 root 用户名和恣意暗码连接到数据库。这在测试环境中可能是方便的,但在生产环境中是不安全的。如果你发现可以利用随意的暗码登录,阐明认证尚未启用。
1.1 登录
默认暗码就能登录
- [root@instance2 ~]# cd /opt/app/nebula-graph
- [root@instance2 nebula-graph]# ls
- bin cluster.id data etc logs nebula-console pids scripts share
- [root@instance2 nebula-graph]# ./nebula-console --addr 127.0.0.1 --port 9669 -u root -p nebula
- Welcome!
- (root@nebula) [(none)]>
复制代码
随意暗码也能登录
- [root@instance2 nebula-graph]# ./nebula-console --addr 127.0.0.1 --port 9669 -u root -p 1234
- Welcome!
- (root@nebula) [(none)]>
复制代码
2、本地身份验证
本地身份验证是指在服务器本地存储用户名、加密暗码,当用户尝试访问 NebulaGraph 时,将举行身份验证。
2.1 启用本地身份验证
编辑设置文件nebula-graphd.conf(默认目录为/usr/local/nebula/etc/),设置如下参数:
○ --enable_authorize:是否启用身份验证,可选值:true、false。
○ Note
■ 默认环境下,身份验证功能是关闭的,用户可以利用root用户名和恣意暗码连接到 NebulaGraph。
■ 开启身份验证后,默认的 God 脚色账号为root,暗码为nebula。脚色详情请拜见内置脚色权限。
○ --failed_login_attempts:可选项,需要手动添加该参数。单个 Graph 节点允许一连输入错误暗码的次数。超过该次数时,账户会被锁定。如果有多个 Graph 节点,允许的次数为节点数 * 次数。
○ --password_lock_time_in_secs:可选项,需要手动添加该参数。多次输入错误暗码后,账户被锁定的时间。单位:秒。
- [root@instance2 nebula-graph]# ls
- bin cluster.id data etc logs nebula-console pids scripts share
- [root@instance2 nebula-graph]# cd etc/
- [root@instance2 etc]# ls
- nebula-graphd.conf nebula-metad.conf.default nebula-storaged.conf.production
- nebula-graphd.conf.default nebula-metad.conf.production nebula-storaged-listener.conf.production
- nebula-graphd.conf.production nebula-storaged.conf
- nebula-metad.conf nebula-storaged.conf.default
- [root@instance2 etc]# vim nebula-graphd.conf
- [root@instance2 etc]#
复制代码
2.2 修改后的认证参数
- # Enable authorization
- --enable_authorize=true
复制代码
3、重启 NebulaGraph 服务
- [root@instance2 nebula-graph]# cd scripts/
- [root@instance2 scripts]# ls
- meta-transfer-tools.sh nebula-metad.service nebula-storaged-listener.service utils.sh
- nebula-graphd.service nebula.service nebula-storaged.service
- [root@instance2 scripts]# bash nebula.service restart all
- [INFO] Stopping nebula-metad...
- [INFO] Done
- [INFO] Starting nebula-metad...
- [INFO] Done
- [INFO] Stopping nebula-graphd...
- [INFO] Done
- [INFO] Starting nebula-graphd...
- [INFO] Done
- [INFO] Stopping nebula-storaged...
- [INFO] Done
- [INFO] Starting nebula-storaged...
- [INFO] Done
- [root@instance2 scripts]#
复制代码
4、登录进入 Nebula Console
- [root@instance2 nebula-graph]# ls
- bin cluster.id data etc logs nebula-console pids scripts share
- [root@instance2 nebula-graph]# ./nebula-console --addr 127.0.0.1 --port 9669 -u root -p nebula
- Welcome!
- (root@nebula) [(none)]>
复制代码
5、查看用户列表(SHOW USERS)
- (root@nebula) [(none)]> show users;
- +---------+
- | Account |
- +---------+
- | "root" |
- +---------+
- Got 1 rows (time spent 1.987ms/3.031978ms)
- Mon, 13 Jan 2025 17:02:53 CST
- (root@nebula) [(none)]>
复制代码
6、修改root用户暗码(ALTER USER)
一旦启用了认证,你应该立即修改 root 用户的默认暗码。
执行ALTER USER语句可以修改用户暗码,修改时不需要提供旧暗码。当前仅 God 脚色用户(即root用户)能够执行ALTER USER语句。
- (root@nebula) [(none)]>
- (root@nebula) [(none)]> ALTER USER root WITH PASSWORD 'Nebula2024';
- Execution succeeded (time spent 1.651ms/2.240427ms)
- Tue, 14 Jan 2025 14:24:27 CST
- (root@nebula) [(none)]>
复制代码
7、退出登录,再次登录
- (root@nebula) [(none)]> exit
- Bye root!
- Tue, 14 Jan 2025 14:25:02 CST
- [root@instance2 nebula-graph]# ./nebula-console --addr 127.0.0.1 --port 9669 -u root -p nebula
- 2025/01/14 14:25:36 Fail to create a new session from connection pool
- Error:
- failed to authenticate, error code: -1001, error msg: Invalid password
- [root@instance2 nebula-graph]# ./nebula-console --addr 127.0.0.1 --port 9669 -u root -p 1234
- 2025/01/14 14:25:46 Fail to create a new session from connection pool
- Error:
- failed to authenticate, error code: -1001, error msg: Invalid password
- [root@instance2 nebula-graph]#
复制代码
默认暗码报错了,已经无法登录。
8、验证更改后的暗码登录:
尝试用新的凭据重新连接到 Nebula Graph,确认暗码更改已见效。
- [root@instance2 nebula-graph]#
- [root@instance2 nebula-graph]# ./nebula-console --addr 127.0.0.1 --port 9669 -u root -p Nebula2024
- Welcome!
- (root@nebula) [(none)]>
复制代码
修改后的暗码测试可以登录
二、创建用户
1、创建用户(CREATE USER)
执行CREATE USER语句可以创建新的 NebulaGraph 用户。当前仅 God 脚色用户(即root用户)能够执行CREATE USER语句。
● 语法
CREATE USER [IF NOT EXISTS] <user_name> [WITH PASSWORD ‘’];
○ IF NOT EXISTS:检测待创建的用户名是否存在,只有不存在时,才会创建新用户。
○ user_name:待创建的用户名。
○ password:用户名对应的暗码。
执行GRANT ROLE语句可以将指定图空间的内置脚色权限授予用户。当前仅 God 脚色用户和 Admin 脚色用户能够执行GRANT ROLE语句。脚色权限的阐明,请拜见内置脚色权限。nebula> GRANT ROLE admin ON biao_test TO admin;
God 初始最高权限脚色,拥有全部利用的权限
Admin 对权限内的图空间拥有 Schema 和 data 的读写权限
DBA 对权限内的图空间拥有 Schema 和 data 的读写权限。
User 对权限内的图空间拥有 Schema 的只读权限。
Guest 对权限内的图空间拥有 Schema 和 data 的只读权限。
2、查看用户
创建用户前我们先查看有那些用户;
- (root@nebula) [(none)]> show users;
- +---------+
- | Account |
- +---------+
- | "root" |
- +---------+
- Got 1 rows (time spent 1.666ms/2.577728ms)
- Tue, 14 Jan 2025 14:29:14 CST
- (root@nebula) [(none)]>
复制代码
查看后,目前只有Root用户
3、创建利用员:operator
- (root@nebula) [(none)]> CREATE USER operator WITH PASSWORD 'Nebula2023';
- Execution succeeded (time spent 1.614ms/2.128208ms)
- Tue, 14 Jan 2025 15:37:00 CST
- (root@nebula) [(none)]>
复制代码
4、创建审计管理员:sysaudit
- (root@nebula) [(none)]> CREATE USER sysaudit WITH PASSWORD 'Nebula2024';
- Execution succeeded (time spent 1.741ms/2.349151ms)
- Tue, 14 Jan 2025 15:37:52 CST
- (root@nebula) [(none)]>
复制代码
5、创建安全管理员:sysadmin
- (root@nebula) [(none)]> CREATE USER sysadmin WITH PASSWORD 'Nebula2025';
- Execution succeeded (time spent 1.743ms/2.32076ms)
- Tue, 14 Jan 2025 15:38:14 CST
- (root@nebula) [(none)]>
复制代码
6、再次查看用户列表(SHOW USERS)
- (root@nebula) [(none)]> show users;
- +------------+
- | Account |
- +------------+
- | "root" |
- | "operator" |
- | "sysaudit" |
- | "sysadmin" |
- +------------+
- Got 4 rows (time spent 1.589ms/2.312696ms)
- Tue, 14 Jan 2025 15:38:42 CST
- (root@nebula) [(none)]>
复制代码
三、管理用户
1、创建示例空间
创建用户授权前,我们先创建示例空间;
- (root@nebula) [(none)]> CREATE SPACE IF NOT EXISTS space1 (vid_type=FIXED_STRING(30));
- Execution succeeded (time spent 1.542ms/2.076204ms)
- Tue, 14 Jan 2025 14:39:50 CST
- (root@nebula) [(none)]> CREATE SPACE IF NOT EXISTS space2 (vid_type=FIXED_STRING(30));
- Execution succeeded (time spent 1.165ms/1.730596ms)
- Tue, 14 Jan 2025 14:40:02 CST
- (root@nebula) [(none)]>
复制代码
2、查看空间 SHOW SPACES;
- (root@nebula) [(none)]> SHOW SPACES;
- +----------+
- | Name |
- +----------+
- | "space1" |
- | "space2" |
- +----------+
- Got 2 rows (time spent 1.452ms/2.197014ms)
- Tue, 14 Jan 2025 14:40:45 CST
- (root@nebula) [(none)]>
复制代码
3、授权用户(GRANT ROLE)
执行GRANT ROLE语句可以将指定图空间的内置脚色权限授予用户。当前仅 God 脚色用户和 Admin 脚色用户能够执行GRANT ROLE语句。脚色权限的阐明,请拜见内置脚色权限。nebula> GRANT ROLE admin ON biao_test TO admin;
3.1 sysaudit用户授权空间1 为USER脚色
- (root@nebula) [(none)]>
- (root@nebula) [(none)]> GRANT ROLE USER ON space1 TO sysaudit;
- Execution succeeded (time spent 1.773ms/2.34586ms)
- Tue, 14 Jan 2025 14:42:19 CST
- (root@nebula) [(none)]>
复制代码
User 对权限内的图空间拥有 Schema 的只读权限。
3.2 sysadmin用户授权空间2 为ADMIN脚色
- (root@nebula) [(none)]> GRANT ROLE ADMIN ON space2 TO sysadmin;
- Execution succeeded (time spent 1.422ms/2.008812ms)
- Tue, 14 Jan 2025 14:43:28 CST
- (root@nebula) [(none)]>
复制代码
Admin 对权限内的图空间拥有 Schema 和 data 的读写权限
4、测试 sysadmin 安全管理员 ADMIN脚色授权空间1和空间2
- [root@instance2 nebula-graph]# ./nebula-console --addr 127.0.0.1 --port 9669 -u sysadmin -p Nebula2025
- Welcome!
- (sysadmin@nebula) [(none)]> SHOW SPACES;
- +----------+
- | Name |
- +----------+
- | "space2" |
- +----------+
- Got 1 rows (time spent 1.606ms/2.585068ms)
- Tue, 14 Jan 2025 14:45:13 CST
- (sysadmin@nebula) [(none)]>
复制代码
sysadmin 安全管理员能看到,并读写空间2
5、测试 sysaudit 审计管理员 USER脚色授权空间1和空间2
- [root@instance2 nebula-graph]# ./nebula-console --addr 127.0.0.1 --port 9669 -u sysaudit -p Nebula2024
- Welcome!
- (sysaudit@nebula) [(none)]> SHOW SPACES;
- +----------+
- | Name |
- +----------+
- | "space1" |
- +----------+
- Got 1 rows (time spent 1.329ms/2.212657ms)
- Tue, 14 Jan 2025 14:46:42 CST
- (sysaudit@nebula) [(none)]>
复制代码
sysaudit 审计管理员 只能看到读空间1,不能写空间1
6、删除用户(DROP USER)
执行DROP USER语句可以删除用户。当前仅 God 脚色用
- (root@nebula) [(none)]> DROP USER sysadmin;
- Execution succeeded (time spent 2.054ms/2.764438ms)
- Tue, 14 Jan 2025 14:54:08 CST
- (root@nebula) [(none)]> DROP USER sysaudit;
- Execution succeeded (time spent 1.642ms/2.261796ms)
- Tue, 14 Jan 2025 14:54:15 CST
复制代码
7、查看用户列表(SHOW USERS)
- (root@nebula) [(none)]> show users;
- +---------+
- | Account |
- +---------+
- | "root" |
- +---------+
- Got 1 rows (time spent 1.264ms/1.875929ms)
- Tue, 14 Jan 2025 14:54:24 CST
- (root@nebula) [(none)]>
复制代码
四、用户默认暗码登录报错-故障清除
可以接纳临时禁用认证以重置暗码
如果无法通过现有凭证登录到 Nebula Console,可以考虑暂时禁用认证来重置 root 暗码。请注意,这会带来安全风险,仅应在受控环境中举行,并尽快恢复认证功能。
1. 编辑设置文件:再次打开 nebula-graphd.conf 文件,并将 --enable_authorize 设置为 false。
2. 重启服务:重启全部相关的 Nebula Graph 服务。
3. 进入 Nebula Console:利用默认凭证(如 root 和空字符串)登录。
4. 修改暗码:执行以下下令更改 root 用户的暗码。
- ALTER USER 'root' WITH PASSWORD 'Nebula2024';
复制代码 5. 恢复认证:再次编辑设置文件,将 --enable_authorize 设置回 true,并重启服务。
总结
通过上述步骤,友友们已经乐成启用了 NebulaGraph 3.8.0 的用户认证机制,并增强了体系的安全性。确保定期查察用户列表和权限,遵照最小权限原则,只为用户分配他们实际需要的权限。希望这篇指南能帮助友友们在生产环境中更好地管理和保护你的 NebulaGraph 数据库。
参考文献身份验证 - NebulaGraph Database 手册Documentation for NebulaGraph Databasehttps://docs.nebula-graph.com.cn/3.8.0/7.data-security/1.authentication/1.authentication/
如果友友们有任何题目或需要更多帮助,请查阅官方文档或接洽 NebulaGraph 的支持团队。
希望这篇征文能够清楚地指导读者完成 NebulaGraph 3.8.0 的用户认证设置,仅供参考。如果有更多详细的题目或需要进一步的帮助,请随时告知。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |