Listener Password in Oracle 10g

在Google上搜索“监听 安全 oracle”,一堆《实例讲解Oracle监听口令及监听器安全》的文章,都是copy+paste自eygle的这篇《Oracle的监听口令及监听器安全》,eygle的测试环境是本地的10.2.0.3客户端加远程9.2.0.4数据库。 如果服务器端数据库版本在Oracle9i以后,设置监听密码的情况则有一些变化。 在Metalink Note 260986.1中,可以看到: In Oracle 10, the TNSListener is secure out of the box and there should not be a need to set a listener password as in older versions of the Oracle listener. Oracle10g以后,设置Listener密码已经不是安全检查的必要条件了,因为默认在10g里面除了启动监听的用户之外,其它用户都无法停止Listener(还有另外一些lsnrctl的命令也同样被禁止了,比如trace, reload等),即使Listener没有设置密码。 在默认情况下,启动Listener或者使用lsnrctl status命令查看监听状态,可以看到: Security ON: Password or Local OS Authentication 这表明Listener的安全机制使用了Password方式或者Local OS Authentication方式,在这种状态下,即使是设置了监听密码,对于启动监听的user来说,也仍然是不需要任何密码就可以停止监听的。 如果我们想去除自Oracle10g之后的这种新安全机制,那么需要在listener.ora文件中添加: LOCAL_OS_AUTHENTICATION_[listener name]…

How to Prevent DBA User From Logining Database Without Password

我们知道如果某个操作系统用户属于dba组,那么登录了这个用户之后,不再需要任何密码就能以SYS用户登录到数据库中,在产品环境中,这无疑是一个严重的安全漏洞。 kamus@desktop:~$ whoami kamus kamus@desktop:~$ sqlplus / as sysdba SQL*Plus: Release 11.1.0.6.0 – Production on Sun Apr 5 17:56:58 2009 Copyright (c) 1982, 2007, Oracle. All rights reserved. Connected to an idle instance. SQL> show user USER is “SYS” SQL> exit Disconnected kamus@desktop:~$ sqlplus nouser/nopassword as sysdba SQL*Plus: Release 11.1.0.6.0 – Production on Sun Apr…

User Default Password Check in Oracle 11g

在数据库安全性检查中有一项首先要完成的工作,就是检查数据库中的用户密码是否还仍然保留着默认值,比如sys的密码是否还是change_on_install,system的密码是否还是manager,scott的密码是否还是tiger。 在Oracle 11g之前,我们需要手工来完成这样的工作,大概步骤是: 1. 创建一张自定义的表,保存下常用的系统用户以及默认密码的HASH值。 2. 将系统中的用户密码HASH值与该表中的HASH值比较,如果相同,则表明还在使用默认值。 注意:在数据字典中存储的密码是被HASH算法加密过的,加密后的值不但跟密码本身有关还跟用户名有关,也就是,如果是不相同的用户名那么即使是完全相同的密码,加密后的HASH值也是不一样的。这样保证了每一个用户的每一个密码都有自己独一无二的HASH值。 在Oracle 11g之前,加密后的密码可以从DBA_USERS数据字典的PASSWORD字段中获得,因此可以通过这个字段中存储的值来做是否是默认值的检查。但是在11g中,PASSWORD字段却不再显示密码的内容了。 先看一下文档中对这个字段的描述: Indicates whether the user is authenticated by OID (GLOBAL) or externally authenticated (EXTERNAL); NULL otherwise SQL> select username,decode(password,null,’NULL’,password) password from dba_users; USERNAME PASSWORD —————————— —————————— MGMT_VIEW NULL SYS NULL SYSTEM NULL DBSNMP NULL SNPM NULL SYSMAN NULL SNPW NULL SCOTT NULL KAMUS NULL OUTLN…