注册
提高数据库在Linux上的安全性
专栏/培训园地/ 文章详情 /

提高数据库在Linux上的安全性

紫薯味冻柠茶 2024/07/19 1057 4 0
摘要

提高数据库在Linux上的安全性.docx

OS系统:银河麒麟V10
数据库:DM8

本文以登录数据库所在的Linux操作系统,到访问DM8内的存贮数据这条路线,提高每一个环节的安全性;具体涉及到:限制可用远程登录的端口、IP地址,设置用户远程登录的限制,定时自动更改dmdba账户的密码,邮件提醒dmdba账户的登录,数据存贮加密,找回SYSDBA用户并修改密码。

一.限制端口

1.通过在配置数据库的Linux上的端口来提高安全性
vim /etc/ssh/sshd_config
删除默认端口port 22并添加新的端口
image.png
2.重启服务
image.png

3.新端口登录

image.png

二.限制可登录的IP地址

1.在firewalld中开放新端口的
(注意:直接重启防火墙会导致SSH连接的断开,一定要先开放新端口,再 重启防火墙)

image.png

2.设置可登录的IP

image.png

三.远程登录的限制
允许root用户可以通过ssh远程登录是一件很有风险的事,不熟练的用户或者不怀好意的登录者会对系统造成难以计量的损害。

1.禁止root账户远程登录
vim /etc/ssh/sshd_config
image.png
2.重启服务后尝试以root登录(为方便操作,下文中允许ssh登录root 账户)
image.png
3.限制通过SSH登录的失败次数,锁定时间
vim /etc/pam.d/sshd
密码尝试次数3次,失败锁定时间60秒
image.png

四.定期自动修改dmdba账户的登录密码

1.在/etc目录下编写脚本changecode.sh
image.png
2.在/etc下添加保存密码文本code.txt
并对两者设置权限
image.png
3.新密码登录dmdba
image.png
4.通过crontab设置每天1:00点运行此脚本
image.png
image.png

五.dmdba账户登录时,邮件提醒root用户
1.安装sendmail
image.png
2.开启sendmail服务
image.png
3.切换到dmdba用户
image.png
image.png
4.登录dmdba用户,在root用户下查收邮件

image.png

image.png
六.存储加密
1.数据库的全库加密和表空间加密

①.设置全库加密
全库加密需要在新建数据库实例的时候设置
./dminit path=/dm/data db_name=DM03 instance_name=DM03 port_num=6103 page_size=16 encrypt_name=AES256_ECB (这里选择的加 密算法可以自定义)
image.png

正常注册数据库服务后启动服务

登录数据库可以使用系统存储函数 SF_GET_ENCRYPT_NAME()查找,若未设置加密方法则返回为NULL
a.设置为全库加密的6103
image.png
b.未设置全库加密的6101
image.png

②.全库加密和表空间加密
已设置过全库加密的数据库能不能再次对数据库内的数据加密呢
设置过全库加密的6103
image.png
未设置全库加密的6101
image.png
*这是因为全库加密已经把明文加密成了密文,在数据库软件的层面无法把密文再次加密
*上图6101所示的表空间加密是把数据库中的一部分明文加密成密文

③.加密对于数据库性能的影响
使用同一脚本测试全库加密和未加密数据库的执行速度
两实例在同一环境下测试
a.未加密数据库6101
image.png

b.使用AES256_ECB全库加密的数据库
image.png
未加密的数据库执行语句的速度更快

2.限制用户在表列中可访问的数据
通过对指定的表列,使写入表列的数据仅可被指定的用户访问

①.创建用户a1,a2,a3并赋予dba权限
image.png

②.登录a1用户,并新建一个只有第二列的数据才能被指定用户(a1,a2)
所读取的表
image.png
插入数值
image.png

③.使用三个用户分别查看数据
用户a1
image.png
用户a2
image.png
用户a3(未被运行访问表第二列数据的账户)
image.png
第二列的查询返回值为NULL

④.对一张表的多个列加密,a2只能看见第二列的数据,a3都看不见
image.png

用户a1(a1是创建用户,不用特别设置每一列对a1都是可见的)
image.png
用户a2
image.png
用户a3
image.png

⑤.自定义加密算法
两列选择相同的加密算法
image.png
两列选择不同的加密算法
image.png

七.在忘记SYSDBA用户的密码的情况下,找回用户并修改密码
讨论:如果在不知道SYSDBA用户密码的情况下,找回SYSDBA账户并修改密码,那么就得使用一个有DBA权限的账户登录数据库,使用sql语言修改密码;但设立多个拥有DBA权限的用户显然是不利于保护数据安全的。那么换个思路,能不能通过本机验证的方式绕过密码验证,登录SYSDBA账户呢?

1.在root下新建组dmdba,并将数据库的操作用户dmdba添加进组dmdba
[root@localhost ~]# groupadd -g 1000 dmdba
[root@localhost ~]# usermod -a -G dmdba dmdba
image.png

2.在dmdba下以SYSDBA用户登录数据库,修改参数ENABLE_LOCAL_OSAUTH
(如果在忘记了SYSDBA的密码的同时,没有事前在数据库中修改参数ENABLE_LOCAL_OSAUTH的值,怎么办?这种情况下文再讨论,此处我们先按忘记密码前修改过参数来操作)
登录SYSDBA用户
image.png

3.查看ENABLE_LOCAL_OSAUTH的参数设置
SQL>select name,value from v$parameter where name='ENABLE_LOCAL_OSAUTH';
image.png
4.修改参数
SQL> SP_SET_PARA_VALUE(2,'ENABLE_LOCAL_OSAUTH',1);
image.png
5.重启数据库服务
./DmServiceDM01 restart
image.png
检查一下参数
image.png
6.使用本机验证的方法登录SYSDBA
./disql /:5234 as sysdba
image.png
7.修改SYSDBA密码
alter user sysdba identified by “dameng123”;
image.png
image.png
找回SYSDBA账户成功

8.继续上面红字讨论,如果我在忘记了SYSDBA的密码的同时,没有事前在数据库中修改参数ENABLE_LOCAL_OSAUTH的值,怎么办?

解决思路:尝试通过修改dm.ini文件来实现修改参数ENABLE_LOCAL_OSAUTH的值
①.首先登录SYSDBA用户,关闭本机验证登录,并重启数据库服务
image.png
②.在/dm8/data/DM01/实例目录下修改dm.ini
添加参数配置 ENABLE_LOCAL_OSAUTH = 1
image.png
③.重启数据库服务使用本机验证方法登录
image.png
本机登录验证失败,使用密码登录后发现参数未改变
④.删除dm.ini文件内添加的添加参数配置 ENABLE_LOCAL_OSAUTH = 1,登录数据库 修改参数后,观察dm.ini文件内有无相关改变
image.png
image.png
在数据库中使用SP_SET_PARA_VALUE(2,'ENABLE_LOCAL_OSAUTH',1)命令修改参数,对dm.ini文件没有影响,该参数是隐藏单数;想通过修改dm.ini文件的方式打开本机验证的方式行不通。
9.总结
在忘记SYSDBA用户密码的情况下,必须事先在数据库中设置ENABLE_LOCAL_OSAUTH = 1,同时将操作用户加入dmdba组,才能实现无密实机验证登录,再使用sql修改密码。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服