OS系统:银河麒麟V10
数据库:DM8
本文以登录数据库所在的Linux操作系统,到访问DM8内的存贮数据这条路线,提高每一个环节的安全性;具体涉及到:限制可用远程登录的端口、IP地址,设置用户远程登录的限制,定时自动更改dmdba账户的密码,邮件提醒dmdba账户的登录,数据存贮加密,找回SYSDBA用户并修改密码。
一.限制端口
1.通过在配置数据库的Linux上的端口来提高安全性
vim /etc/ssh/sshd_config
删除默认端口port 22并添加新的端口
2.重启服务
3.新端口登录
二.限制可登录的IP地址
1.在firewalld中开放新端口的
(注意:直接重启防火墙会导致SSH连接的断开,一定要先开放新端口,再 重启防火墙)
2.设置可登录的IP
三.远程登录的限制
允许root用户可以通过ssh远程登录是一件很有风险的事,不熟练的用户或者不怀好意的登录者会对系统造成难以计量的损害。
1.禁止root账户远程登录
vim /etc/ssh/sshd_config
2.重启服务后尝试以root登录(为方便操作,下文中允许ssh登录root 账户)
3.限制通过SSH登录的失败次数,锁定时间
vim /etc/pam.d/sshd
密码尝试次数3次,失败锁定时间60秒
四.定期自动修改dmdba账户的登录密码
1.在/etc目录下编写脚本changecode.sh
2.在/etc下添加保存密码文本code.txt
并对两者设置权限
3.新密码登录dmdba
4.通过crontab设置每天1:00点运行此脚本
五.dmdba账户登录时,邮件提醒root用户
1.安装sendmail
2.开启sendmail服务
3.切换到dmdba用户
4.登录dmdba用户,在root用户下查收邮件
六.存储加密
1.数据库的全库加密和表空间加密
①.设置全库加密
全库加密需要在新建数据库实例的时候设置
./dminit path=/dm/data db_name=DM03 instance_name=DM03 port_num=6103 page_size=16 encrypt_name=AES256_ECB (这里选择的加 密算法可以自定义)
正常注册数据库服务后启动服务
登录数据库可以使用系统存储函数 SF_GET_ENCRYPT_NAME()查找,若未设置加密方法则返回为NULL
a.设置为全库加密的6103
b.未设置全库加密的6101
②.全库加密和表空间加密
已设置过全库加密的数据库能不能再次对数据库内的数据加密呢
设置过全库加密的6103
未设置全库加密的6101
*这是因为全库加密已经把明文加密成了密文,在数据库软件的层面无法把密文再次加密
*上图6101所示的表空间加密是把数据库中的一部分明文加密成密文
③.加密对于数据库性能的影响
使用同一脚本测试全库加密和未加密数据库的执行速度
两实例在同一环境下测试
a.未加密数据库6101
b.使用AES256_ECB全库加密的数据库
未加密的数据库执行语句的速度更快
2.限制用户在表列中可访问的数据
通过对指定的表列,使写入表列的数据仅可被指定的用户访问
①.创建用户a1,a2,a3并赋予dba权限
②.登录a1用户,并新建一个只有第二列的数据才能被指定用户(a1,a2)
所读取的表
插入数值
③.使用三个用户分别查看数据
用户a1
用户a2
用户a3(未被运行访问表第二列数据的账户)
第二列的查询返回值为NULL
④.对一张表的多个列加密,a2只能看见第二列的数据,a3都看不见
用户a1(a1是创建用户,不用特别设置每一列对a1都是可见的)
用户a2
用户a3
⑤.自定义加密算法
两列选择相同的加密算法
两列选择不同的加密算法
七.在忘记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
2.在dmdba下以SYSDBA用户登录数据库,修改参数ENABLE_LOCAL_OSAUTH
(如果在忘记了SYSDBA的密码的同时,没有事前在数据库中修改参数ENABLE_LOCAL_OSAUTH的值,怎么办?这种情况下文再讨论,此处我们先按忘记密码前修改过参数来操作)
登录SYSDBA用户
3.查看ENABLE_LOCAL_OSAUTH的参数设置
SQL>select name,value from v$parameter where name='ENABLE_LOCAL_OSAUTH';
4.修改参数
SQL> SP_SET_PARA_VALUE(2,'ENABLE_LOCAL_OSAUTH',1);
5.重启数据库服务
./DmServiceDM01 restart
检查一下参数
6.使用本机验证的方法登录SYSDBA
./disql /:5234 as sysdba
7.修改SYSDBA密码
alter user sysdba identified by “dameng123”;
找回SYSDBA账户成功
8.继续上面红字讨论,如果我在忘记了SYSDBA的密码的同时,没有事前在数据库中修改参数ENABLE_LOCAL_OSAUTH的值,怎么办?
解决思路:尝试通过修改dm.ini文件来实现修改参数ENABLE_LOCAL_OSAUTH的值
①.首先登录SYSDBA用户,关闭本机验证登录,并重启数据库服务
②.在/dm8/data/DM01/实例目录下修改dm.ini
添加参数配置 ENABLE_LOCAL_OSAUTH = 1
③.重启数据库服务使用本机验证方法登录
本机登录验证失败,使用密码登录后发现参数未改变
④.删除dm.ini文件内添加的添加参数配置 ENABLE_LOCAL_OSAUTH = 1,登录数据库 修改参数后,观察dm.ini文件内有无相关改变
在数据库中使用SP_SET_PARA_VALUE(2,'ENABLE_LOCAL_OSAUTH',1)命令修改参数,对dm.ini文件没有影响,该参数是隐藏单数;想通过修改dm.ini文件的方式打开本机验证的方式行不通。
9.总结
在忘记SYSDBA用户密码的情况下,必须事先在数据库中设置ENABLE_LOCAL_OSAUTH = 1,同时将操作用户加入dmdba组,才能实现无密实机验证登录,再使用sql修改密码。
文章
阅读量
获赞