opengauss教程FG011-openGauss用户与权限管理
目录大纲
Part01-基础概念与理论知识
1.1 用户管理概述
用户管理是openGauss数据库安全的重要组成部分,了解用户管理的概念和方法对于数据库的安全运行至关重要。风哥教程参考opengauss官方文档,用户管理涉及以下几个核心概念:
- 用户:数据库的访问主体,通过用户名和密码进行认证
- 角色:权限的集合,可以授予用户或其他角色
- 权限:用户或角色对数据库对象的操作权限
- 认证:验证用户身份的过程
1.2 权限体系
openGauss的权限体系包括以下几个层次:
- 系统权限:对数据库系统级别的操作权限,如创建数据库、创建用户等
- 对象权限:对数据库对象(如表、视图、函数等)的操作权限
- 语句权限:执行特定SQL语句的权限
- 默认权限:新创建对象的默认权限
1.3 角色管理
角色是权限的集合,通过角色管理可以更方便地管理权限:
- 预定义角色:openGauss内置的角色,如sysadmin、monitoradmin等
- 自定义角色:用户创建的角色,用于管理特定的权限集合
- 角色继承:角色可以继承其他角色的权限
- 角色授权:将角色授予用户或其他角色
风哥提示:合理的角色管理可以简化权限管理,提高安全性。
Part02-生产环境规划与建议
2.1 用户规划
生产环境用户规划
- 管理员用户:
- 超级用户:具有所有权限,用于系统管理
- 数据库管理员:负责数据库的日常管理
- 应用用户:
- 应用连接用户:应用程序连接数据库使用的用户
- 只读用户:只具有查询权限的用户
- 读写用户:具有查询和修改权限的用户
- 监控用户:
- 用于监控数据库状态的用户
- 只具有监控相关权限
2.2 权限设计
生产环境的权限设计建议:
- 最小权限原则:只授予用户必要的权限
- 权限分离:将不同职责的权限分离到不同角色
- 定期审查:定期审查用户权限,确保权限设置合理
- 权限回收:当用户不再需要某些权限时,及时回收
2.3 安全策略
生产环境的安全策略建议:
- 密码策略:
- 设置强密码策略
- 定期更换密码
- 使用密码管理工具
风哥提示:
- 认证方式:
- 使用MD5或SHA-256密码认证
- 对于远程连接,使用SSL加密
- 访问控制:
- 通过pg_hba.conf文件控制客户端访问权限
- 限制允许连接的IP地址范围
Part03-生产环境项目实施方案
3.1 用户创建与管理
# 创建用户
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss
Password for user opengauss:
gsql ((openGauss 5.0.0 build 12345) compiled at 2024-01-01 00:00:00)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type “help” for help.
postgres=# CREATE USER fgedu WITH PASSWORD ‘Fgedu@123’;
CREATE ROLE
postgres=# CREATE USER fgedu_readonly WITH PASSWORD ‘Fgedu@123’;
CREATE ROLE
学习交流加群风哥微信: itpux-com
postgres=# CREATE USER fgedu_admin WITH PASSWORD ‘Fgedu@123’;
CREATE ROLE
# 修改用户密码
postgres=# ALTER USER fgedu WITH PASSWORD ‘Fgedu@456’;
ALTER ROLE
# 锁定用户
postgres=# ALTER USER fgedu_readonly ACCOUNT LOCK;
ALTER ROLE
# 解锁用户
postgres=# ALTER USER fgedu_readonly ACCOUNT UNLOCK;
ALTER ROLE
# 删除用户
postgres=# DROP USER IF EXISTS fgedu_test;
DROP ROLE
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss
Password for user opengauss:
gsql ((openGauss 5.0.0 build 12345) compiled at 2024-01-01 00:00:00)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type “help” for help.
postgres=# CREATE USER fgedu WITH PASSWORD ‘Fgedu@123’;
CREATE ROLE
postgres=# CREATE USER fgedu_readonly WITH PASSWORD ‘Fgedu@123’;
CREATE ROLE
学习交流加群风哥微信: itpux-com
postgres=# CREATE USER fgedu_admin WITH PASSWORD ‘Fgedu@123’;
CREATE ROLE
# 修改用户密码
postgres=# ALTER USER fgedu WITH PASSWORD ‘Fgedu@456’;
ALTER ROLE
# 锁定用户
postgres=# ALTER USER fgedu_readonly ACCOUNT LOCK;
ALTER ROLE
# 解锁用户
postgres=# ALTER USER fgedu_readonly ACCOUNT UNLOCK;
ALTER ROLE
# 删除用户
postgres=# DROP USER IF EXISTS fgedu_test;
DROP ROLE
3.2 权限授予与回收
# 授予数据库权限
postgres=# GRANT CONNECT ON DATABASE fgedudb TO fgedu;
GRANT
postgres=# GRANT ALL PRIVILEGES ON DATABASE fgedudb TO fgedu_admin;
GRANT
# 授予模式权限
postgres=# GRANT USAGE ON SCHEMA public TO fgedu;
GRANT
postgres=# GRANT CREATE ON SCHEMA public TO fgedu_admin;
GRANT
# 授予表权限
postgres=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO fgedu_readonly;
GRANT
postgres=# GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO fgedu;
GRANT
# 回收权限
postgres=# REVOKE DELETE ON ALL TABLES IN SCHEMA public FROM fgedu;
REVOKE
postgres=# GRANT CONNECT ON DATABASE fgedudb TO fgedu;
GRANT
postgres=# GRANT ALL PRIVILEGES ON DATABASE fgedudb TO fgedu_admin;
GRANT
# 授予模式权限
postgres=# GRANT USAGE ON SCHEMA public TO fgedu;
GRANT
postgres=# GRANT CREATE ON SCHEMA public TO fgedu_admin;
GRANT
# 授予表权限
postgres=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO fgedu_readonly;
GRANT
postgres=# GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO fgedu;
GRANT
# 回收权限
postgres=# REVOKE DELETE ON ALL TABLES IN SCHEMA public FROM fgedu;
REVOKE
3.3 角色管理实施
学习交流加群风哥QQ113257174
# 创建角色
postgres=# CREATE ROLE fgedu_role_read;
CREATE ROLE
postgres=# CREATE ROLE fgedu_role_write;
CREATE ROLE
postgres=# CREATE ROLE fgedu_role_admin;
CREATE ROLE
# 授予角色权限
postgres=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO fgedu_role_read;
GRANT
postgres=# GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO fgedu_role_write;
GRANT
postgres=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO fgedu_role_admin;
GRANT
# 将角色授予用户
postgres=# GRANT fgedu_role_read TO fgedu_readonly;
GRANT
postgres=# GRANT fgedu_role_write TO fgedu;
GRANT
postgres=# GRANT fgedu_role_admin TO fgedu_admin;
GRANT
# 查看角色权限
postgres=# \du
# 创建角色
postgres=# CREATE ROLE fgedu_role_read;
CREATE ROLE
postgres=# CREATE ROLE fgedu_role_write;
CREATE ROLE
postgres=# CREATE ROLE fgedu_role_admin;
CREATE ROLE
# 授予角色权限
postgres=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO fgedu_role_read;
GRANT
postgres=# GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO fgedu_role_write;
GRANT
postgres=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO fgedu_role_admin;
GRANT
# 将角色授予用户
postgres=# GRANT fgedu_role_read TO fgedu_readonly;
GRANT
postgres=# GRANT fgedu_role_write TO fgedu;
GRANT
postgres=# GRANT fgedu_role_admin TO fgedu_admin;
GRANT
# 查看角色权限
postgres=# \du
Part04-生产案例与实战讲解
4.1 用户管理实战
# 查看所有用户
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “\du”
Password for user opengauss:
List of roles
Role name | Attributes | Member of
———–+————————————————————+———–
fgedu | | {}
fgedu_admin | | {}
fgedu_readonly | | {}
opengauss | Superuser, Create role, Create DB, Replication, Administer audit | {}
# 创建用户并设置有效期
更多视频教程www.fgedu.net.cn
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “CREATE USER fgedu_temp WITH PASSWORD ‘Fgedu@123’ VALID UNTIL ‘2024-12-31′”
Password for user opengauss:
CREATE ROLE
# 查看用户有效期
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “SELECT usename, valuntil FROM pg_user;
“
Password for user opengauss:
usename | valuntil
————+———————
opengauss |
fgedu |
fgedu_admin |
fgedu_readonly |
fgedu_temp | 2024-12-31 00:00:00
(5 rows)
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “\du”
Password for user opengauss:
List of roles
Role name | Attributes | Member of
———–+————————————————————+———–
fgedu | | {}
fgedu_admin | | {}
fgedu_readonly | | {}
opengauss | Superuser, Create role, Create DB, Replication, Administer audit | {}
# 创建用户并设置有效期
更多视频教程www.fgedu.net.cn
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “CREATE USER fgedu_temp WITH PASSWORD ‘Fgedu@123’ VALID UNTIL ‘2024-12-31′”
Password for user opengauss:
CREATE ROLE
# 查看用户有效期
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “SELECT usename, valuntil FROM pg_user;
“
Password for user opengauss:
usename | valuntil
————+———————
opengauss |
fgedu |
fgedu_admin |
fgedu_readonly |
fgedu_temp | 2024-12-31 00:00:00
(5 rows)
4.2 权限管理实战
# 创建测试表
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “CREATE TABLE fgedu_test (id serial primary key, name varchar(50));
“
Password for user opengauss:
CREATE TABLE
# 插入测试数据
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “INSERT INTO fgedu_test (name) VALUES (‘test1’), (‘test2’), (‘test3’);
“
Password for user opengauss:
INSERT 0 3
# 测试只读用户权限
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu_readonly -c “SELECT * FROM fgedu_test;
“
Password for user fgedu_readonly:
id | name
—-+——
1 | test1
2 | test2
3 | test3
(3 rows)
# 测试只读用户插入权限(应该失败)
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu_readonly -c “INSERT INTO fgedu_test (name) VALUES (‘test4’);
“
Password for user fgedu_readonly:
ERROR: permission denied for relation fgedu_test
# 测试普通用户权限
更多学习教程公众号风哥教程itpux_com
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu -c “INSERT INTO fgedu_test (name) VALUES (‘test4’);
“
Password for user fgedu:
INSERT 0 1
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu -c “SELECT * FROM fgedu_test;
“
Password for user fgedu:
id | name
—-+——
1 | test1
2 | test2
3 | test3
4 | test4
(4 rows)
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “CREATE TABLE fgedu_test (id serial primary key, name varchar(50));
“
Password for user opengauss:
CREATE TABLE
# 插入测试数据
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “INSERT INTO fgedu_test (name) VALUES (‘test1’), (‘test2’), (‘test3’);
“
Password for user opengauss:
INSERT 0 3
# 测试只读用户权限
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu_readonly -c “SELECT * FROM fgedu_test;
“
Password for user fgedu_readonly:
id | name
—-+——
1 | test1
2 | test2
3 | test3
(3 rows)
# 测试只读用户插入权限(应该失败)
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu_readonly -c “INSERT INTO fgedu_test (name) VALUES (‘test4’);
“
Password for user fgedu_readonly:
ERROR: permission denied for relation fgedu_test
# 测试普通用户权限
更多学习教程公众号风哥教程itpux_com
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu -c “INSERT INTO fgedu_test (name) VALUES (‘test4’);
“
Password for user fgedu:
INSERT 0 1
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu -c “SELECT * FROM fgedu_test;
“
Password for user fgedu:
id | name
—-+——
1 | test1
2 | test2
3 | test3
4 | test4
(4 rows)
4.3 角色管理实战
# 创建角色并授予权限
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “CREATE ROLE fgedu_role_developer;
“
Password for user opengauss:
CREATE ROLE
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “GRANT fgedu_role_read, fgedu_role_write TO fgedu_role_developer;”
Password for user opengauss:
GRANT
# 创建新用户并授予角色
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “CREATE USER fgedu_dev WITH PASSWORD ‘Fgedu@123’;
“
Password for user opengauss:
CREATE ROLE
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “GRANT fgedu_role_developer TO fgedu_dev;”
Password for user opengauss:
GRANT
from DB视频:www.itpux.com
# 测试新用户权限
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu_dev -c “SELECT * FROM fgedu_test;
“
Password for user fgedu_dev:
id | name
—-+——
1 | test1
2 | test2
3 | test3
4 | test4
(4 rows)
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu_dev -c “INSERT INTO fgedu_test (name) VALUES (‘test5’);
“
Password for user fgedu_dev:
INSERT 0 1
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “CREATE ROLE fgedu_role_developer;
“
Password for user opengauss:
CREATE ROLE
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “GRANT fgedu_role_read, fgedu_role_write TO fgedu_role_developer;”
Password for user opengauss:
GRANT
# 创建新用户并授予角色
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “CREATE USER fgedu_dev WITH PASSWORD ‘Fgedu@123’;
“
Password for user opengauss:
CREATE ROLE
[opengauss@fgedu.net.cn ~]$ gsql -d postgres -U opengauss -c “GRANT fgedu_role_developer TO fgedu_dev;”
Password for user opengauss:
GRANT
from DB视频:www.itpux.com
# 测试新用户权限
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu_dev -c “SELECT * FROM fgedu_test;
“
Password for user fgedu_dev:
id | name
—-+——
1 | test1
2 | test2
3 | test3
4 | test4
(4 rows)
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U fgedu_dev -c “INSERT INTO fgedu_test (name) VALUES (‘test5’);
“
Password for user fgedu_dev:
INSERT 0 1
Part05-风哥经验总结与分享
5.1 用户与权限管理最佳实践
- 用户管理:
- 使用统一的命名规范
- 设置合理的密码策略
- 定期清理不需要的用户
- 为用户设置有效期
- 权限管理:
- 遵循最小权限原则
- 使用角色管理权限
- 定期审查用户权限
- 及时回收不需要的权限
- 角色管理:
- 根据职责创建角色
- 使用角色继承简化管理
- 为角色设置描述
5.2 安全管理要点
- 认证安全:
- 使用强密码策略
- 启用SSL加密连接
- 限制登录尝试次数
- 授权安全:
- 定期审查权限设置
- 使用角色管理权限
- 避免直接授予用户系统权限
- 审计安全:
- 启用审计日志
- 监控用户登录和权限变更
- 定期检查审计日志
5.3 常见问题与解决方案
常见用户与权限问题及解决方法
- 问题1:用户无法登录
- 症状:用户登录时提示密码错误或认证失败
- 解决方案:检查密码是否正确,检查用户是否被锁定,检查pg_hba.conf配置
- 问题2:权限不足
- 症状:用户执行操作时提示权限不足
- 解决方案:检查用户权限,授予必要的权限
- 问题3:角色权限不生效
- 症状:用户被授予角色,但角色权限不生效
- 解决方案:检查角色权限是否正确,检查角色继承关系
- 问题4:无法删除用户
- 症状:删除用户时提示用户正在使用
- 解决方案:断开用户的所有连接,然后删除用户
风哥提示:用户与权限管理是数据库安全的核心,合理的用户管理和权限设置可以有效防止未授权访问和数据泄露。在生产环境中,应该建立完善的用户和权限管理体系,定期审查和更新权限设置,确保数据库的安全运行。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
