Postgresql 安全组件都有那些

2021-04-20 00:00:00 数据库 记录 密码 方式 添加

postgresql  安全的组件有不少,到底有那些都起到什么作用,可以在这里说一说.安全的组件,主要有以下几个方面,  1密码攻击方面的安全保护  2 审计方面的记录  3 密码方面的等级的保护, 以下截图均从 POSTGRESQL 12.2 版本来进行


1  密码攻击方面的安全保护

 这功能是从9.4.21 开始添加的功能,并不需要通过create extension来进行,在添加后直接重新启动数据库服务就可以.

打开POSTGRESQL 数据库的share_preload_librairies 数据库,在shared_preload_libraries 中添加auth_delay 并且添加    auth_dealy.milliseconds,   这里默认这个参数为0 , 这里的意思为当访问中密码错误的情况下,我们会等待多长时间对访问的连接进行回馈. 这样的方法


可以通过调高auth_delay.milliseconds来进行相关的测试,比如调整为5000 也就是密码输入错误后,需要5秒系统才能反映.


试验是通过打印当前时间,连接POSTGRESQL ,密码错误,等待时间,在打印时间组成的,这里可以看到11秒的时间,但密码输入正确则不会出现等待的问题. 输入密码正确则立即进入系统.


这样的方式保护优点是防止对数据库进行大批量的数据访问,去猜测密码的正确性. 但缺点也很明显,如果攻击的方式抓住错误密码长时间没有响应,可以发动大量的连接来连接数据库,导致正常的连接无法连入到数据库中,可以称之为数据库的DDOC攻击.


2  passwordcheck 

passworkdcheck 模块来自于passwordcheck.so 模块,它可以实现密码复杂度的要求,通过此模块可以检查密码的复杂性的要求,如果密码没有达到预定的密码的复杂度的要求,会拒绝创建数据库用户的方式来强制重新建立账号,直到达到相关的要求.  其中passwordcheck.so 是其中必然要包含的文件,如果没有则这个功能无法启动


然后在shared_preload_libraries 中加入passwordcheck 功能.


alter system set shared_preload_libraries=pg_pathman,pg_stat_statements,passwordcheck;

重启数据库系统

在添加完passwordcheck后,建立用户给出密码, 必须是少8个字符,必须包含数字,和字母,密码中不能有用户的名字

在修改密码中如果密码中只有数字的化也会无法添加,因为要求必须包含字母

用户密码中不能包含用户名




3     pgaudit  数据库的审核是数据库工作中的一项重要的工作, pgaudit是一个开源的扩展,通过日志的方式来记录postgresql 数据库详细的audit 审核的日志,主要应用与本地的日志的记录,这个工具主要是来自于二象限公司的开发者.

make install USE_PGXS=1


安装完毕

当然我们可以通过设置log_statement=all来记录PostgreSQL中的所有语句,问题是为什么要使用pgAudit,主要的问题在于postgresql 中的审计是可以针对特定的数据库以及特定的操作来进行记录, 例如SELECT COPY ,或者 Insert,update, delete 等操作,或者 DDL 等操作进行单独的记录. 并且不同的点在于他还对于谁执行的,什么时间执行的有相关的记录.

重启数据库服务器  在需要执行audit的数据库打开 create extension pgaudit

对audit 设置中可以通过命令的方式来进行设置

确认当前数据库是否安装了

 

SELECT * FROM pg_available_extensionsWHERE name LIKE '%audit%';

 

2  SELECTname,setting FROM pg_settings WHERE name LIKE 'pgaudit%';


在开启后,在进行相关操作,会在日志中记录相关audit 日志

可以对当前检测的数据库的检测的级别进行更改

set pgaudit.log= 'read,write,ddl';


实际上对于POSTGRESQL 的数据库安全可做的东西还很多

例如数据关键列加密,或者对于用户访问采用其他的模式, 秘钥或令牌的方式,不过安全是一个全方位的问题,例如对数据库的密码破解的问题,也可以通过网络对特定端口的异常访问找到问题的解决点,不能将数据库的安全全部寄托到数据库本身.



相关文章