当前位置: 首页 > news >正文

实验十八 GaussDB安全管理实验

实验环境准备:

su - Ruby
source /home/Ruby/gauss_env_file
cm_ctl query -Cvgsql -d postgres  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -r
create database security_db;

一、登录认证与口令安全

1.配置访问gs_hba规则

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -r
CREATE USER security_test_role password 'Gauss@123';

2.使用gs_guc工具在gs_hba.conf中新增访问规则。

增加规则1:目标数据库为security_db,用户为security_test_role,客户端IP为192.168.3.60(通过ifconfig查看客户端IP),认证方式为sha256。

gs_guc -U root -K Huawei@1234 reload -Z datanode -N all -I all -h "host  security_db  security_test_role  0.0.0.0/0  sha256"

3.通过gsql使用security_test_role访问数据库security_db,目标IP为192.168.3.60。

gsql -p 30100 -d security_db -r -U security_test_role -W Gauss@123 -h 192.168.3.60

4.配置gs_hba.conf访问黑名单。

gs_guc -U root -K Huawei@1234  reload -Z datanode -N all -I all -h "host  security_db  security_test_role  0.0.0.0/0  reject"

5.使用security_test_role登录数据库security_db失败,并返回如下报错信息。

gsql -p30100 -d security_db -r -U security_test_role -W Gauss@123 -h 192.168.3.60

返回两行报错原因是环境变量PGSSLMODE默认为prefer,会先尝试SSL连接,失败后再尝试非SSL连接。

6.配置GUC参数password_encryption_type为3,即采用SM3方式对密码加密。

gs_guc -U root -K Huawei@1234  reload -Z datanode -N all -I all -c "password_encryption_type=3"

7.使用gsql,以管理员用户登录security_db数据库,创建普通用户test_user,此时使用sm3方式对密码加密。使用test_user连接数据库失败。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -r
CREATE USER test_user password 'Gauss@123';
gsql -p 30100 -d security_db -r -U test_user -W Gauss@123 -h 192.168.3.60

8.配置gs_hba.conf支持国密SM3算法。

目标数据库为security_db,用户为test_user,客户端IP为192.168.3.60(通过ifconfig查看客户端IP),认证方式为SM3,即配置国密算法。

gs_guc -U root -K Huawei@1234 reload -Z datanode -N all -I all -h "host  security_db  test_user  192.168.3.60/32  sm3"

9.通过gsql使用test_user访问数据库security_db,目标IP为192.168.3.60

gsql -p 30100 -d security_db -r -U test_user -W Gauss@123 -h 192.168.3.60

10.使用gs_guc工具删除gs_hba.conf中的访问规则。

gs_guc -U root -K Huawei@1234 reload -Z datanode -N all -I all -h "host  security_db  security_test_role  192.168.3.60/32"
gs_guc -U root -K Huawei@1234 reload -Z datanode -N all -I all -h "host  security_db  test_user  192.168.3.60/32"
gs_guc -U root -K Huawei@1234 reload -Z datanode -N all -I all -h "host  all  all  192.168.3.60/32"
gs_guc -U root -K Huawei@1234 reload -Z datanode -N all -I all -c "password_encryption_type=2"

二、配置SSL连接。

1.确保数据库服务端ssl已开启,并且正确配置ssl证书。

集群安装时,默认会生成自签名SSL证书,并存放在$GAUSSHOME/share/sslcert/gsql目录下,包括服务端证书和客户端证书,其中服务端证书会拷贝到CN和DN的数据目录下并在数据库初始化时加载。此步骤默认证书已生成,并确保以下GUC参数配置正确。

查看相关ssl参数配置情况。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -rshow ssl;
show ssl_ciphers;
show  ssl_cert_file;
show ssl_key_file;
show ssl_ca_file;

2.配置gsql客户端SSL环境变量,开启SSL连接。

环境变量PGSSLMODE用于设置是否和服务器进行SSL连接协商,以及指定SSL连接的优先级。如果不配置默认为prefer,表示首先尝试SSL连接,如果连接失败,将尝试非SSL连接。

执行如下命令,配置环境变量PGSSLMODE为require,表示只尝试SSL连接。使用gsql进行SSL连接。

export PGSSLMODE="require"
gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -r

注意:

(1)连接信息中显示“SSL connection”表示通过SSL连接成功,cipher为本次连接使用的SSL加密套件。

(2)使用gsql连接时需要使用-h参数通过远程TCP连接才可以支持SSL连接。

(3)可以自己尝试配置环境变量PGSSLMODE为disable、allow、verify-ca、verify-full。

(4)恢复参数PGSSLMODE的值为prefer,export PGSSLMODE="prefer"。

三、账户锁定与解锁

1.设置GUC参数failed_login_attempts。

gs_guc -U root -K Huawei@1234 reload -Z datanode -N all -I all -c "failed_login_attempts=3"

设置GUC参数failed_login_attempts为3,如果用户输入密码次数超过此设置次数则系统将自动锁定该账户。

2.使用管理员用户登录数据库security_db,查看参数failed_login_attempts,并创建用户security_user2。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -rshow failed_login_attempts;
CREATE USER security_user2 password 'Gauss@123';

3.使用security_user2登录数据库security_db,连续3次输入错误密码后账户锁定。

gsql -p 30100 -d security_db -r -U security_user2 -W Test@234 -h 192.168.3.60 -r

4.使用管理员用户登录数据库security_db,对security_user2解锁。

查询security_user2的用户状态,rolestatus为1时表示锁定,0表示解锁;并对security_user2解锁:

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -rselect rolname,failcount,rolstatus from pg_user_status a, pg_roles b where a.roloid=b.oid and b.rolname='security_user2';alter user security_user2 account unlock;select rolname,failcount,rolstatus from pg_user_status a, pg_roles b where a.roloid=b.oid and b.rolname='security_user2';

5.再次使用security_user2登录数据库security_db,输入正确密码登录成功。

gsql -p 30100 -d security_db -r -U security_user2 -W Gauss@123  -h 192.168.3.60 -r

四、密码复杂度校验。

1.使用管理员用户登录数据库security_db,使用不同复杂度的密码创建用户security_user3。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -r
CREATE USER security_user3 password 'test123';
CREATE USER security_user3 password 'test12345';
CREATE USER security_user3 password 'Gauss@123';

前两次不满足密码复杂度校验创建用户失败,第3次创建成功。

2.使用security_user3登录数据库security_db后,修改security_user3密码,回显 ALTER ROLE ,表示修改成功。

alter user security_user3 password 'test@5678';
alter user security_user3 identified by 'Gauss@123' replace 'Gauss@123';
alter user security_user3 identified by 'Gauss@1234' replace 'Gauss@123';
\q

3.使用管理员用户登录数据库security_db后删除用户security_user2、security_user3、security_test_role、test_user,清理环境。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -r
drop user security_user2;
drop user security_user3;
drop user security_test_role;
drop user test_user;

五、GaussDB数据库权限管理。

1.用户/角色管理

步骤1、创建角色role1和角色role2,密码设定为Gauss@123。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -rCREATE ROLE role1 WITH password 'Gauss@123';
CREATE ROLE role2 WITH password 'Gauss@123';

步骤2、修改角色role1具有CREATEDB和LOGIN属性,角色role2为默认权限。

ALTER ROLE role1 WITH CREATEDB;
ALTER ROLE role1 WITH LOGIN;

步骤3、查看系统表系统视图pg_roles获取角色的相关信息。

SELECT oid, rolname, rolcreatedb, rolcanlogin FROM pg_roles WHERE rolname='role1' or rolname='role2';

步骤4、使用gsql,以用户role1登录security_db数据库。

gsql -d security_db -p 30100 -r -h 192.168.3.60 -U role1 -W Gauss@123

步骤5、通过以下命令创建数据库test_db,显示CREATE DATABASE表示创建成功。

create database test_db;

步骤6、将角色role1权限授予角色role2,则角色role2继承role1的相关对象权限。

GRANT role1 TO role2;

步骤7、查看系统表pg_auth_members获取角色成员关系。

SELECT * FROM pg_auth_members;

步骤8、使用gsql,以管理员用户root登录security_db数据库。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -r

步骤9、删除数据库test_db,删除角色role1和role2。

DROP DATABASE test_db;
DROP ROLE role1,role2;

2.对象权限的授予和回收

步骤1、创建用户user1和用户user2,密码设定为Gauss@123。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -rCREATE USER user1 password 'Gauss@123';
CREATE USER user2 password 'Gauss@123';

步骤2、使用gsql,以用户user2登录security_db数据库。

gsql -d security_db -p 30100 -r -h 192.168.3.60 -U user2 -W Gauss@123

步骤3、创建用户表tbl,将用户user2的USAGE权限授予用户user1,将对表tbl进行SELECT的权限授予用户user1。

CREATE TABLE user2.tbl(id int, name varchar(5));
GRANT USAGE ON SCHEMA user2 TO user1;
GRANT SELECT ON TABLE user2.tbl TO user1;

步骤4、使用gsql,以用户user1登录security_db数据库。

gsql -d security_db -p 30100 -r -h 192.168.3.60 -U user1 -W Gauss@123

步骤5、用户user1查询用户表tbl成功,插入用户表tbl权限不足失败。

SELECT * FROM user2.tbl;
INSERT INTO user2.tbl VALUES (1,'TOM');

步骤6、使用gsql,以用户user2登录security_db数据库。

gsql -d security_db -p 30100 -r -h 192.168.3.60 -U user2 -W Gauss@123

步骤7、撤销用户user1对表tbl进行select的权限,将对表tbl进行insert的权限授予用户user1。

REVOKE SELECT ON TABLE user2.tbl FROM user1;
GRANT INSERT ON TABLE user2.tbl TO user1;

步骤8、使用gsql,以用户user1登录security_db数据库。

gsql -d security_db -p 30100 -r -h 192.168.3.60 -U user1 -W Gauss@123

步骤9、查询用户表tbl权限不足失败,插入用户表tbl成功。

SELECT * FROM user2.tbl;
INSERT INTO user2.tbl VALUES (1,'TOM');

步骤10、使用gsql,以管理员用户root登录security_db数据库。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -r

步骤11、清理环境。

DROP USER user1, user2 CASCADE;

3.行级访问控制策略的创建和使用

步骤1、创建用户Mary和用户Tom,创建信息表pat_info。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -rCREATE USER "Mary" PASSWORD 'Gauss@123';
CREATE USER "Tom" PASSWORD 'Gauss@123';
CREATE TABLE pat_info (patient varchar(10), doctor varchar(10), age int);

步骤2、向信息表pat_info中插入测试数据。

INSERT INTO pat_info VALUES('Peter','Mary',25);
INSERT INTO pat_info VALUES('Bob','Mary',56);
INSERT INTO pat_info VALUES('Julie','Tom',38);

步骤3、查看信息表pat_info,将信息表pat_info的SELECT权限授予用户Mary和Tom。

SELECT * FROM pat_info;
GRANT SELECT ON TABLE pat_info TO "Mary","Tom";

步骤4、使用gsql,以用户Mary登录security_db数据库。

gsql -d security_db -p 30100 -r -h 192.168.3.60 -U Mary -W Gauss@123

步骤5、查询信息表pat_info。

SELECT * FROM pat_info;

步骤6、使用gsql,以用户Tom登录security_db数据库。

gsql -d security_db -p 30100 -r -h 192.168.3.60 -U Tom -W Gauss@123

步骤7、查询信息表pat_info。

SELECT * FROM pat_info;

步骤8、使用gsql,以管理员用户root登录security_db数据库。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -r

步骤9、创建行级访问控制策略,使得doctor只能查看属于自己的patient信息,并打开表上的行级访问控制开关。

CREATE ROW LEVEL SECURITY POLICY rl_select ON pat_info FOR select USING(doctor=current_user);
ALTER TABLE pat_info ENABLE ROW LEVEL SECURITY;

步骤10、使用gsql,以用户Mary登录security_db数据库。

gsql -d security_db -p 30100 -r -h 192.168.3.60 -U Mary -W Gauss@123

步骤11、查询信息表pat_info。

SELECT * FROM pat_info;

步骤12、使用gsql,以用户Tom登录security_db数据库。

gsql -d security_db -p 30100 -r -h 192.168.3.60 -U Tom -W Gauss@123

步骤13、查询信息表pat_info。

SELECT * FROM pat_info;

步骤14、使用gsql,以管理员用户root登录security_db数据库。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -r

步骤15、清理环境。

DROP TABLE pat_info;
DROP USER "Mary","Tom";

六、数据库审计。

1.传统审计

(1)修改审计对象GUC参数audit_system_object的值为12,表示审计TABLE和USER对象的CREATE、DROP、ALTER操作。

gs_guc -U root -K Huawei@1234 reload -Z datanode  -N all -I all -c "audit_system_object=12"

(2)root用户通过hccde_client客户端gsql登录客户端。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -r

(3)查看audit_system_object值返回12即修改成功。

show audit_system_object;

(4)root用户创建审计管理员audit_user和普通用户uesr1,audit_user用于查询审计日志,创建普通用户user1用于执行SQL操作。

CREATE USER auditadmin with AUDITADMIN password 'Gauss@123';
CREATE USER audit_t1 password 'Gauss@123';

(5)使用audit_t1登录数据库,创建数据表t1并插入数据然后添加一列name,再删除t1。

gsql -d security_db -p 30100 -r -h 192.168.3.60 -U audit_t1 -W Gauss@123create table t1 (id int);
insert into t1 values(123);
alter table t1 add column name varchar(20);
drop table t1;

(6)登录root用户删除普通用户audit_t1。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -r
drop user audit_t1;

(7)使用auditadmin登录数据库查询审计日志。

gsql -d security_db -p 30100 -r -h 192.168.3.60 -U auditadmin -W Gauss@123

按起止时间查询审计日志,并查询用户audit_t1执行的ddl_table操作,root用户的ddl_user操作,例如:

SELECT * from pg_query_audit(sysdate-0.1, sysdate) where username='audit_t1' and type='ddl_table';SELECT * from pg_query_audit(sysdate-0.1, sysdate) where username='root' and type='ddl_user' and  object_name='audit_t1';

(8)恢复环境,恢复审计GUC参数。

gs_guc -U root -K Huawei@1234 reload -Z datanode  -N all -I all -c "audit_system_object=67121159"

(9)恢复环境,使用root用户登录数据库,删除用户auditadmin。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -rdrop user auditadmin;

2.统一审计。

(1)修改安全策略GUC参数。

gs_guc -U root -K Huawei@1234 reload -Z datanode -N all -I all -c "enable_security_policy=on"

(2)修改/etc/rsyslog.conf。

vi /etc/rsyslog.conf末尾添加:
local0.* /var/log/localmessages

(3)修改/etc/rsyslog.conf中字段,设置为以下内容。

module(load="imuxsock"
SysSock.Use="on")

(4) 创建统一审计记录文件并设置文件权限范围。

touch /var/log/localmessages
chmod 600 /var/log/localmessages

(5)重启rsyslog服务使配置生效。

systemctl restart rsyslog

(6)root用户通过hccde_client客户端gsql登录客户端。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -r

(7)查询enable_security_policy已打开。

show enable_security_policy;

(8)创建安全策略管理员pol_user_adt用于配置资源标签和审计策略。

CREATE USER pol_user_adt with poladmin password 'Gauss@123';

(9)创建普通用户adt_user1、adt_user2用于执行SQL操作。

CREATE USER adt_user1 password 'Gauss@123';
CREATE USER adt_user2 password 'Gauss@123';

(10)在public模式下创建表tb_for_audit,并授予adt_user1对此表的所有操作权限。

CREATE TABLE public.tb_for_audit(col1 text, col2 text, col3 text);
GRANT ALL PRIVILEGES on public.tb_for_audit to adt_user1 WITH GRANT OPTION;

(11)使用pol_user_adt登录数据库。

gsql -d security_db -p 30100 -r -h 192.168.3.60 -U pol_user_adt -W Gauss@123

(12)在表public.tb_for_audit上创建资源标签lab1。

CREATE RESOURCE LABEL lab1 ADD TABLE(public.tb_for_audit);

(13)创建审计策略,审计用户adt_user1在资源标签lab1上的所有DDL、DML操作。

CREATE AUDIT POLICY pol1 PRIVILEGES all on LABEL(lab1) FILTER ON ROLES(adt_user1);
CREATE AUDIT POLICY pol2 ACCESS all on LABEL(lab1) FILTER ON ROLES(adt_user1);

(14)使用adt_user1登录数据库。

gsql -d security_db -p 30100 -r -h 192.168.3.60 -U adt_user1 -W Gauss@123

(15)执行DDL操作,触发审计策略记录审计日志。

GRANT INSERT ON TABLE public.tb_for_audit to adt_user2;
REVOKE INSERT ON TABLE public.tb_for_audit from adt_user2;

(16)执行DML操作,触发审计策略记录审计日志。

insert into public.tb_for_audit values('11', '22', '33');
update public.tb_for_audit set col3='55' where col1='11';
select * from public.tb_for_audit;
delete from public.tb_for_audit where col1='11';

(17)重复步骤1,登录server端设备后台,用操作系统root用户查看审计日志。

执行如下命令查看审计日志记录。

cat /var/log/localmessages

也可以查看adt_user1相关的审计日志:

cat /var/log/localmessages | grep adt_user1

(18)登录hccde_client客户端使用pol_user_adt登录数据库,删除审计策略和资源标签。

gsql -d security_db -p 30100 -r -h 192.168.3.60 -U pol_user_adt -W Gauss@123
DROP AUDIT POLICY pol1;
DROP AUDIT POLICY pol2;
DROP RESOURCE LABEL lab1;

(19)使用root登录数据库,删除用户pol_user_adt、adt_user1和adt_user2,删除表public.tb_for_audit。

gsql -d security_db  -h 192.168.3.60 -U root -W Huawei@1234 -p 30100 -r
drop user pol_user_adt;
drop user adt_user1 cascade;
drop user adt_user2 cascade;
drop table public.tb_for_audit;

http://www.dtcms.com/a/450246.html

相关文章:

  • 登录注册入口鹤岗网站seo
  • window系统搭建nginx图片存储服务器
  • AI与敏捷开发管理系列5:AI敏捷项目管理的实施路线图
  • 网站建设哪家好知道万维科技网站开发制作心得
  • leetcode 417 太平洋大西洋水流问题
  • 网站域名每年费用李勇seo博客
  • 【FPGA+DSP系列】——(4)EPWM学习(实现呼吸灯实验)
  • 【数据结构】搜索二叉树是啥树?有啥用?
  • 2025-10-06 Python不基础 15——metaclass
  • 淘宝客必须做网站吗建筑网站排行
  • Python高阶技巧:使用functools.partial减少函数参数个数完全指南
  • 2025年--Lc163--H58.最后一个单词的长度(数组和字符串)--Java版
  • 酒店如何做团购网站app界面设计模板图片
  • 长沙h5网站建设天津网站建站公司
  • 购物网站开发目的网页设计与制作作业成品
  • RNN在自然语言处理中的应用:文本分类实战(代码演示)
  • 嵌入式开发面试八股文详解教程
  • 图形打印方法:从正方形到三角形的编程实践(洛谷P5725)
  • 阿里云对象存储做静态网站成都装修公司哪家口碑最好
  • kanass入门到实战(9) - 如何自定义事项类型,满足个性化需求
  • 企业商城网站建设在哪里买域名
  • 【11408学习记录】考研数学核心突破:线性代数之线性方程组深度解析
  • 舟山网站建设哪家好网站建设者
  • 个人网站备案简介wordpress alipay
  • 王野电动车名风seo软件
  • 彩网站开发天琥设计
  • 大型网站开发工具洛阳小程序开发公司
  • 一个虚拟空间做两个网站中国建设工程造价管理系统
  • 网站开发与网页制作的区别自助企业建站模板
  • 【LeetCode热题100(35/100)】LRU 缓存