数据库运维
记录DBA学习成长历程

第8章:GBase 8c 安全特性

文章目录

1 课程目标

• 了解 GBase 8c 安全特性功能和方法,并可以熟练操作使用。
• 安全策略
• 权限控制 • 审计
• 黑名单
• 备注:该功能单机、分布式均适用

2 安全特性

—2.1 安全策略

—2.2 权限控制

管理用户对数据库的访问控制权限,涵盖数据库系统权限和对象权限。

支持基于角色的访问控制机制,将角色和权限关联起来,通过将权限赋予给对应的角色,再将角色授 予给用户,可实现用户访问控制权限管理。其中登录访问控制通过用户标识和认证技术来共同实现, 而对象访问控制则基于用户在对象上的权限,通过对象权限检查实现对象访问控制。用户为相关的数 据库用户分配完成任务所需要的最小权限从而将数据库使用风险降到最低。

支持三权分立权限访问控制模型,数据库角色可分为系统管理员、安全管理员和审计管理员。其中安 全管理员负责创建和管理用户,系统管理员负责授予和撤销用户权限,审计管理员负责审计所有用户 的行为。

默认情况下,使用基于角色的访问控制模型。客户可通过设置参数来选择是否开启三权分立控制模型。

—2.3 审计

数据库安全对数据库系统来说至关重要。
GBase 8c将用户对数据库的所有操作写入审计日志。数据库安全管理员可以利用这些日志信息,重现导致数 据库现状的一系列事件,找出非法操作的用户、时间和内容等。

常用的审计项
1)用户登录、注销审计
2)数据库启动、停止、恢复和切换审计
3)用户锁定和解锁审计
4)用户访问越权审计
5)授权和回收权限审计
6)数据库对象的CREATE,ALTER,DROP操作审计
7)具体表的INSERT、UPDATE和DELETE操作审计
8)SELECT操作审计
9)COPY审计
10)存储过程和自定义函数的执行审计
11)SET审计

—2.4 黑名单

通过进行pg_hba.conf配置对应的黑名单或白名单 查看该文件路径:
show data_directory;

METHOD can be "trust", "reject", "md5", "sha256" or "cert".

3 账户安全策略演示

—3.1 账户自动锁定

密码错误一定次数(数据库参数:failed_login_attempts)账户自动锁定

该参数也可以进行修改, 修改方法如下:

—3.2 账户自动解锁

帐户被锁定时间超过设定值(数据库参数:password_lock_time) 可通过参数查看,默认是1天

修改参数除了上一个alter system之外,还可以使用gs_guc修改
例如:
gs_guc reload -Z coordinator -N all -I all -c "password_lock_time='7d'"
其中:-Z代表分支类型,coordinator为CN节点,datanode是dn节点
-N代表节点名称,如dn1、dn2等,all 指所有节点
-I代表实例名称,默认值为all,代表所有实例(不支持单个实例指定)
-c代表修改的参数,如password_lock_time='7d'

—3.3 手动锁定账户

ALTER USER testuser ACCOUNT LOCK;

—3.4 手动解锁账户

ALTER USER testuser ACCOUNT UNLOCK;

删除不使用的账户
DROP USER testuser CASCADE;

—3.5 账户有效期

VALID BEGIN '2022-11-07 08:00:00' VALID UNTIL '2022-11-07 11:08:00';

—3.6 密码加密算法

数据库参数:password_encryption_type 值:0,1,2,3(md5/sha256/sm3)
修改使用alter system set password_encryption_type=2;修改后创建用户加密策略生效

—3.7 密码复杂度

数据库参数password_policy (1、 0),1为校验密码复杂度
• 包含大写字母(A-Z)的最少个数(password_min_uppercase)
• 包含小写字母(a-z)的最少个数(password_min_lowercase)
• 包含数字(0-9)的最少个数(password_min_digital)
• 包含特殊字符的最少个数(password_min_special)
• 密码的最小长度(password_min_length)
• 密码的最大长度(password_max_length)
• 至少包含上述四类字符中的三类。
• 不能和用户名、用户名倒写相同,本要求为非大小写敏感。
• 不能和当前密码、当前密码的倒写相同。
• 不能是弱口令

—3.8 密码重用

用户修改密码时,只有超过不可重用天数(数据库参数:password_reuse_time)或不可重用次数 (数据库参数:password_reuse_max)的密码才可以使用,也可以进行参数的修改。

—3.9 密码有效期限

数据库用户的密码都有密码有效期(password_effect_time),当达到密码到期提醒天数 (password_notify_time)时,系统会在用户登录数据库时提示用户修改密码

—3.10 设置密码失效

确保用户首次登录进行密码修改。

4 权限控制演示

grant/revoke
1)将系统权限授权给角色或用户;

例如:给用户增加DBA权限,及权限收回

2)将对象权限授权给用户或者角色
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ];

5 审计演示

—5.1 数据库参数

audit_enabled:开启审计日志开关
audit_system_object:判断是否开启审计项的值
audit_dml_state:dml语句审计
audit_dml_state_select:select 语句审计开关

—5.2 查看审计结果

select time,type,result,userid,username,database,detail_info from pg_query_audit(sysdate-1,sysdate) where database='test';
其中type代表审计类型,detail_info代表审计详细信息,database代表的数据库名称

—5.3 示例1:通过审计查看账户被锁定

通过数据库创建用户,将用户锁定,可以通过审计日志查看,test2用户是由用户gbase使用
gsql客户端连接的本地IP进行(gsql@[local])锁定
也可以通过操作对象名称object_name查看该用户下所有操作:

包括了用户test2的创建语句,修改语句,以及账号锁定的语句

—5.4 示例2:通过审计查看数据库定义语句

创建数据库和删除数据日志均可以正常记录

—5.5 示例3:通过审计查看数据库创建表、修改表的语句

数据库参数audit_system_object=127,代表开启了创建表的审计
创建表、删除表和修改表日志均可以正常记录

6 安全特性操作示例

--密码错误一定次数
show failed_login_attempts;
--帐户被锁定时间超过设定值
show password_lock_time;
---手动锁定账号
ALTER USER testuser ACCOUNT LOCK;
--手动解锁账号
ALTER USER test ACCOUNT UNLOCK;
--删除不用的账号
DROP USER test_user  CASCADE;

--设置账户有效期
alter user test_user VALID BEGIN '2022-12-19 08:00:00' VALID UNTIL '2022-12-19 14:23:00';

--密码加密策略
show password_encryption_type; ---0,1,2,3(md5/sha256/sm3)

---查看所有的账户策略信息
select* from pg_authid where rolname ='test_user';

---密码的复杂度
show password_policy; ----(1、 0)1为校验密码复杂度
--示例
create user u1 identified by '111111';
create user u1 identified by '123456qw';

---密码重用(多少次、多少天内修改的密码不能重复)
show password_reuse_time;
show password_reuse_max;
--密码的有效期限
show password_effect_time;  ---密码有效期
show password_notify_time;  ---密码到期天数提醒
--设置密码失效
create user u1 password 'Gbase_123' expired;
alter user u1 password 'Gbase_123' expired;


--用户权限
grant \ revoke
create database test_1;
create user test1 identified by 'Gbase_123';
--dba	权限
grant ALL privileges to test1;
--回收DBA权限
revoke ALL privileges from test1;
--回收publibc权限连接权限,授予链接权限
revoke connect on database test_1 from public;
grant CONNECT ON DATABASE test_1 to test1;
gsql -d test_1 -U test1 -h 172.16.5.104 -p 5432 -W Gbase_123 -r
--授权后可以可以登陆成功
revoke connect on database test_1 from test1;
gsql -d test1 -U test1 -h 172.16.5.104 -p 5432 -W Gbase_123 -r
--select/insert/update/delete表权限
create table t3(id int,name varchar(10));  --使用拥有权限的用户创建表
--登录新用户进行查询等操作
select * from t3;
insert into t3 values(1,'a');
update t3 set name='update' where id =1;
delete from t3 where id =1; 
--进行授权
grant select ON table t3 to test1;
grant insert ON table t3 to test1; 
grant update ON table t3 to test1; 
grant delete ON table t3 to test1; 
--进行查询
select * from t3;
insert into t3 values(1,'a');
update t3 set name='update' where id =1;
delete from t3 where id =1; 
--权限回收
revoke select ON table t3 from test1;
revoke insert ON table t3 from test1; 
revoke update ON table t3 from test1; 
revoke delete ON table t3 from test1;

--审计
--1打开审计日志开关
alter system set audit_enabled=on;
--2查看审计日志目录
show  audit_directory;
--查看审计日志
select detail_info,type,result from pg_query_audit(sysdate-1/3600,sysdate);
--查看审计中的锁表记录
select detail_info,type,result from pg_query_audit(sysdate-1/3600,sysdate) where type ='lock_user';
--使用审计对象进行查看
select detail_info,type,result from pg_query_audit(sysdate-1/3600,sysdate) where object_name='test1';
--使用审计查看数据库删除的操作
select detail_info,type,result from pg_query_audit(sysdate-1/3600,sysdate) where type ='ddl_database';

--查看审计内容
show audit_system_object;
alter system set audit_system_object=127;
--打开DML日志
alter system set audit_dml_state=1;
create table test3(a int);
alter table test3 add (name varchar(50));

select detail_info,type,result from pg_query_audit(sysdate-1/3600,sysdate) where object_name='test3';
--打开DQL日志
alter system set audit_dml_state_select=1;
--查看登录失败的审计记录
select detail_info,type,result from pg_query_audit(sysdate-1,sysdate)
where type='login_failed';
--查看登陆成功的审计记录
select detail_info,type,result from pg_query_audit(sysdate-1,sysdate) 
where type='login_success';
--审计删除
--1、审计文件占用的磁盘空间或者审计文件的个数超过指定的最大值时,系统将删除最早的审计文件,并记录审计文件删除信息到审计日志中
SHOW audit_space_limit;  --自动删除
--2、手动删除
SELECT pg_delete_audit('2012-09-20 00:00:00','2012-09-21 23:59:59');

 

赞(0)
MySQL学习笔记 » 第8章:GBase 8c 安全特性