问:我正在寻找一种方法,能够识别那些一个月以上都没有登陆过的用户。我原以为Oracle会自带这个功能,现在好像需要用fnd logins写一个SQL查询是吗? 答:开箱即用,Oracle数据库对追踪来访用户的功能并不强大。但这并不意味着Oracle不能胜任这一任务。事实上,Oracle数据库审计功能十分强大、灵活并且易配置。
适当并有效地使用数据库审计功能是拥有高效安全策略的基础。由于我们不可能阻止零时间漏洞攻击,所以同样重要的是检测对数据库的未授权访问动作。 注意:我不知道你使用的是什么版本的Oracle关系型数据库管理系统,但一下的建议对9i-11g都有效,除非另有说明。 针对特……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
问:我正在寻找一种方法,能够识别那些一个月以上都没有登陆过的用户。我原以为Oracle会自带这个功能,现在好像需要用fnd logins写一个SQL查询是吗?
答:开箱即用,Oracle数据库对追踪来访用户的功能并不强大。但这并不意味着Oracle不能胜任这一任务。事实上,Oracle数据库审计功能十分强大、灵活并且易配置。适当并有效地使用数据库审计功能是拥有高效安全策略的基础。由于我们不可能阻止零时间漏洞攻击,所以同样重要的是检测对数据库的未授权访问动作。
注意:我不知道你使用的是什么版本的Oracle关系型数据库管理系统,但一下的建议对9i-11g都有效,除非另有说明。
针对特定性的需求,确定哪些用户在30天内都没有登录,我们将开始针对您的数据库进行审核(注意:您必须以特权账号身份登录数据库才能执行此操作):
SQL> alter SYSTEM set audit_trail=DB scope=spfile; SQL> shutdown immediate SQL> startup SQL> show parameter audit_trail; |
这个动作只能在数据库重启之后生效,这就是我为什么要加上关闭和启动命令的原因。当参数被设置并重启数据库之后,你的数据库将不会自动开始审计用户操作,但是如果不再重启,它将在任何时候都有此功能。
我之所以在DB中设置了一个audit_trail参数,是因为它可以在数据库内部的SYS.AUD$表中记录用户动作。它使得我们能够使用简单的SQL查询和Oracle提供的视图来轻松迅速地统计我们需要的信息。在OS的文件系统中,还有其它的选择可供我们扩大信息收集或存储不同格式的审计信息。Oracle审计追踪说明书为我们提供了所有选择的详尽说明。
因为我们选择在数据库内部存储审计动作,所以我们需要为SYS.AUD$表设计一个最优方法。SYS.AUD$表随着我们收集和储存审计信息而增长,它是存在系统的表空间里,因此同时会造成表空间的增长。不幸的是,在系统表空间增长之后,的确没有一个比较好的办法来缩减它。而幸运的是,SYS.AUD$表是为数不多的SYS表,我们可以在数据库内部任意移动它而不造成任何问题。
最优方法就是为SYS.AUD$表特别创建一个表空间。这使得表增长不会影响到系统表空间和相关数据文件。如果审计表和非系统表空间增长过大,我们有很多方法来将表内容存档并调整表空间大小,或直接将它移动到新的空间。另外利用具体的权限,这个表空间可以被隔离到不同的文件夹来加强我们的安全状况,甚至可以防止窜改审计信息。虽然这和原来的问题关系不大。
下面提供一些关于达成最优方法的命令示例。首先为审计表创建一个表空间:
SQL> CREATE BIGFILE TABLESPACE "AUDITING" DATAFILE '[Insert your path here without square brackets].AUDIT01.DBF' SIZE 10M AUTOEXTEND ON NEXT 1024K MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; -- NOTE – 'BIGFILE' is only applicable to versions 10g & 11g, omit for 9i use |
然后我们把SYS.AUD$表移动到新的表空间:
SQL> alter TABLE SYS.AUD$ move tablespace AUDITING;
这将让你能够验证移动是否成功:
SQL> select TABLE_NAME, TABLESPACE_NAME, STATUS from DBA_TABLES where TABLE_NAME like 'AUD$'; |
下一步就开始审计动作,它能生成我们需要的数据,检测哪些用户在三十天内登陆了数据库,即CREATE SESSION。它将记录有谁登陆了,什么时候登录的还有是否成功登陆了。
SQL> audit CREATE SESSION;
任务完成!现在我们只需要使用SQL语句将过去三十天成功登陆的用户过滤掉。出于易用性和性能考虑,我强烈建议创建一个视图,选择所有成功登陆的用户,然后通过查询移除这些用户。这个查询还可以帮助你添加Oracle默认用户和没有登录的有效用户,这样他们就不会显示在最后的结果集中。
SQL> create view LOGIN_LAST_THIRTY_DAYS_VIEW as select DISTINCT u.USERNAME from DBA_USERS u join DBA_AUDIT_SESSION a on u.USERNAME = a.USERNAME where a.RETURNCODE = 0 and SYSDATE - a.TIMESTAMP between 0 and 30; SQL> select DISTINCT USERNAME from DBA_USERS where USERNAME not in (select * from LOGIN_LAST_THIRTY_DAYS_VIEW) and USERNAME not in ('SYS', 'SYSTEM', 'SYSMAN', 'DBSNMP', 'Add other oracle default schemas here as needed') order by USERNAME; |
这个操作看似很庞大,但实际上只是一些SQL命令和重启,因此不要被背景信息所吓倒。现在所有的基础工作都完成了,你在审计表中收集的信息同样可以用来检测暴力攻击,执行行为分析来突出可疑操作,生成使用状态仿形等等。
翻译
相关推荐
-
OpenWorld18大会:Ellison宣布数据库的搜寻和破坏任务
在旧金山举行的甲骨文OpenWorld 2018大会中,甲骨文首席技术官(CTO)兼创始人Larry Elli […]
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
ObjectRocket着力发展Azure MongoDB服务
MongoDB吸引了微软公司的注意力,微软公司计划针对运行于该公司2017年发布的Azure Cosmos D […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。