Dec 13 2006

破解 Oracle E-Business Suite 用户密码

Category: E-Business SuiteZeeno @ 19:50

APPS.FND_WEB_SEC 管理着跟用户授权相关的数据,比如密码。

这个包里面有加密和解密函数:

-- Function to encrypt a string using a specified key.
-- 4257466 Changed this function to call the new overloaded version.
-- This is backwards compatible because null is returned if the profile
-- does not exist.
function encrypt(key in varchar2, value in varchar2)
return varchar2
is
begin
-- bug 4676957 Renamed password case sensitivity profile
return(encrypt(key, value, fnd_profile.value('SIGNON_PASSWORD_CASE')));
end;

-- Function to decrypt an encrypted string using a specified key.

function decrypt(key in varchar2, value in varchar2)
return varchar2
as language java name 'oracle.apps.fnd.security.WebSessionManagerProc.decrypt(java.lang.String,java.lang.String) return java.lang.String';

这两个函数的作用是调用java程序来运算(因而您甚至不必登录数据库来进行破解)。

由于是私有函数,若想在其他PL/SQL程序里调用,这必须在包头申明:

function encrypt(key in varchar2, value in varchar2) return varchar2; function decrypt(key in varchar2, value in varchar2) return varchar2;

EBS中用户密码存储在表 APPLSYS.FND_USER 中:

FND_USER.ENCRYPTED_USER_PASSWORD 用户密码
ENCRYPTED_FOUNDATION_PASSWORD key的加密字符串

Oracle对于ENCRYPTED_FOUNDATION_PASSWORD的算法是:

encFndPwd := encrypt(user||'/'||pwd,fndPwd);

事实上,所有用户的FOUNDATION_PASSWORD都是一样的,因而无需破解每一个user的ENCRYPTED_FOUNDATION_PASSWORD。获取GUEST的密码:

SELECT upper(fnd_profile.value('GUEST_USER_PWD')) FROM dual;

参考:
Oracle Applications Passwords Decryption Vulnerability


Nov 23 2006

限制Listener的网络链接

Category: DatabaseZeeno @ 08:21

通过在sqlnet.ora设置简单参数来限制未经授权的链接。

TCP.VALIDNODE_CHECKING = yes
TCP.INVITED_NODES = (client1,client2,client3,dbnode)

tcp.validnode_checking 表示需要检查node授权。
tcp.invited_nodes 表示经过授权的node,必须包含db所在的node。sqlnet.ora 中总共有4个相关的参数:

tcp.validnode_checking
tcp.invited_nodes
tcp.excluded_nodes
需要排除的未经授权的node
tcp.nodelay
修改TCP/IP的包传送方式,关闭nagle算法。
具体参考RFC896: http://www.faqs.org/rfcs/rfc896.html

附上sqlnet.ora的参数列表:

bequeath_detach
disable_oob
log_directory_client
log_directory_server
log_file_client
log_file_server
names.connect_timeout
names.dce.prefix
names.default_domain
names.directory_path
names.initial_retry_timeout
names.max_open_connections
names.message_pool_start_size
names.nis.meta_map
names.preferred_servers
names.request_retries
namesctl.echo
namesctl.internal_encrypt_password
namesctl.internal_use
namesctl.no_initial_server
namesctl.noconfirm
namesctl.server_password
namesctl.trace_directory
namesctl.trace_file
namesctl.trace_level
namesctl.trace_unique
sqlnet.authentication_gssapi_service
sqlnet.authentication_kerberos5_service
sqlnet.authentication_services
sqlnet.client_registration
sqlnet.crypto_checksum_client
sqlnet.crypto_checksum_server
sqlnet.crypto_checksum_type_client
sqlnet.crypto_checksum_type_server
sqlnet.crypto_seed
sqlnet.encryption_client
sqlnet.encryption_server
sqlnet.encryption_types_client
sqlnet.encryption_types_server
sqlnet.expire_time
sqlnet.kerberos5_cc_name
sqlnet.kerberos5_clockskew
sqlnet.kerberos5_conf
sqlnet.kerberos5_keytab
sqlnet.kerberos5_realms
sqlnet.radius_alternate
sqlnet.radius_alternate_port
sqlnet.radius_alternate_retries
sqlnet.radius_authentication
sqlnet.radius_authentication_interface
sqlnet.radius_authentication_port
sqlnet.radius_authentication_retries
sqlnet.radius_authentication_timeout
sqlnet.radius_challenge_response
sqlnet.radius_secret
sqlnet.radius_send_accounting
ssl_cipher_suites
ssl_client_authentication
ssl_server_dn_match
ssl_version
tcp.excluded_nodes
tcp.invited_nodes
tcp.nodelay
tcp.validnode_checking
tnsping.trace_directory
tnsping.trace_level
trace_directory_client
trace_directory_server
trace_file_client
trace_file_server
trace_filelen_client
trace_filelen_server
trace_fileno_client
trace_fileno_server
trace_level_client
trace_level_server
trace_timestamp_client
trace_timestamp_server
trace_unique_client
use_cman
use_dedicated_server
WALLET_LOCATION


Nov 15 2006

Trace分析工具: SwingBench Trace Analyzer

Category: DatabaseZeeno @ 11:12

Oracle常用的Trace分析工具是tkprof,对于官方的工具我一项支持并喜欢使用。

如果你遇到以下情况:

  1. 本地没有安装Oracle数据库,没有tkprof程序。
  2. 你需要登录服务器去抓取trace文件。
  3. 你厌倦在putty中麻烦的指令。

不妨尝试一下SwingBench Trace Analyzer

这是一款用Java编写的有GUI的Trace Analyzer。它的图形界面画的非常漂亮而简便,并且令人赏心悦目 :P

事实上,作者正是对tkprof有点小意见才写了这个软件:

Now I know TKProf does a fine job of this but I’ve never been really comfortable with having to continually rerun TKProf to change the ordering and filter out classes of statements. This came to a head just recently after looking through a big trace file and trying to figure out what SQL to work on first. I also thought that perhaps I could use a richer user interface to give a better overview on what has happened a particular run. So I started with the intention of figuring out how to parse the file and come up with some ideas on what to with the results…

(自己动手,丰衣足食?)

目前,它已经实现了以下几个功能:

  • Parse trace files (分析trace).
  • Profile the data via a bar of the right had side of the scroll bar (滚动条).
  • Supports dynamic filtering and sorting of the data (动态过滤和排序).
  • Highlight the 5 worst performing pieces of SQL (elpased, cpu, physical etc) (高亮5个最差SQL).

将要实现的:

  • highlight concurrent SQL (高亮当前SQL).
  • Explain Plans (执行计划).
  • Display bind variables (显示bind var).
  • dump sql to flat files (导出SQL).
  • generate load files for swingbench (为swingbench生成载入文件).
  • create a plugin for SQL*Developer (做SQL*Developer的插件).

(注:swingbench是一款性能负载工具)

有兴趣的人多多留言 :)
留言地址:http://www.dominicgiles.com/comments.php

截图:

Image Hosted by ImageShack.us


Nov 10 2006

PROFILE中的口令参数

Category: DatabaseZeeno @ 14:36

今天看到了下AD中的PORFILE,其中的密码策略是这样的:

SQL> SELECT * 2 FROM dba_profiles 3 WHERE profile != 'DEFAULT' 4 AND resource_name LIKE 'PASSWORD%'; PROFILE RESOURCE_NAME RESOURCE LIMIT ------------------------------ -------------------------------- -------- ------- AD_PATCH_MONITOR_PROFILE PASSWORD_LIFE_TIME PASSWORD 60 AD_PATCH_MONITOR_PROFILE PASSWORD_REUSE_TIME PASSWORD DEFAULT AD_PATCH_MONITOR_PROFILE PASSWORD_REUSE_MAX PASSWORD DEFAULT AD_PATCH_MONITOR_PROFILE PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT AD_PATCH_MONITOR_PROFILE PASSWORD_LOCK_TIME PASSWORD .0416 AD_PATCH_MONITOR_PROFILE PASSWORD_GRACE_TIME PASSWORD 10 已选择6行。

这几个参数的含义分别是:
PASSWORD_LIFE_TIME: 某个口令的有效时间。
PASSWORD_REUSE_TIME: 指口令在多少天内可被重用。
PASSWORD_REUSE_MAX: 口令可被重用的最大次数。
PASSWORD_VERIFY_FUNCTION: 密码验证函数。
Sample code: {ORACLE_HOME}/rdbms/admin/utlpwdmg.sql
PASSWORD_LOCK_TIME: 当登录尝试失败次数达到规定次数后后该帐号被禁用的天数。尝试次数由FAILED_LOGIN_ATTEMPTS指定。
PASSWORD_GRACE_TIME: 口令豁免期,即PASSWORD_LIFE_TIME指定的有效日期之后的允许登录日期,在该期间内将有警告提示。

语法:

ALTER PROFILE test_profile LIMIT PASSWORD_GRACE_TIME 10;


Oct 09 2006

PCTFREE和PCTUSED

Category: DatabaseZeeno @ 10:18

PCTFREE 和PCTUSED 用来控制一个block中row的插入和更新,这两个参数在create/alter table或cluster的时候指定。不同的值将影响数据插入或更新时的效率。

语法:

SQL> create table test (id number)
2  pctused 80
3  pctfree 20;

表已创建。

PCTFREE用来控制表的数据段中各block已有row的用来更新的空间。比如PCTFREE为20,则block将保留20%的空间用于更新操作 (update)。我们在insert新的row的时候将占用一定空间,如果该空间大于80%,则会申请新的block来存储。

PCTUSED用来控制一个block中可用于插入新数据的可用空间。比如PCTUSED为60,则表示该block中只有60%的空间可用于插入新数据。只有当已用空间(used space)下降到59%或以下时,才允许在该block中插入新的行。

下面这张图可以很清楚的表达出来:
PCTFREE and PCTUSED

Update操作可以减少空闲空间,当小于PCTFREE时,该block不在允许插入新行。


Sep 13 2006

纯手工安装Oracle 10g

Category: DatabaseZeeno @ 10:33

一般而言,所谓的手工安装数据库是先安装好Oracle应用程序,然后再创建数据库。

这里所谓的纯手工安装Oracle服务器是指除了不用自己从源码编译应用程序,其他都自己动手:不使用UI来安装执行程序,不使用DBCA来安装实例和数据库,取而代之的是完全手工配置,手工安装Oracle Service、修改注册表、安装实例和数据库等。

这种安装方式只是为了亲身体验一番Oracle数据库的安装过程,详细了解GUI背后的工作

* 这不应该在产品服务器上尝试,纯属体验:) *

主要分为两个主要步骤:创建实例和创建数据库。

1. 选择一台安装好Oracle的服务器,拷贝可执行程序。

需要拷贝的是ORACLE_HOME下的程序,如C:\oracle\product\10.2.0\db_1。
不需要拷贝数据文件、联机日志、归档日志、Flashback区域中的文件等,一来因为容量问题,二来这些都可以在事后创建——如果完整拷贝就失去意义了。总的文件大小应该少于1G,否则很可能是拷贝了包含数据库数据的文件。

2. 创建用户组:ORA_DBA,并将当前用户加入ORA_DBA用户组。

3. 将程序目录C:\oracle\product\10.2.0\db_1\BIN 加入PATH变量。

4. 添加注册表内容,如ORACLE_BASE,ORACLE_HOME等。

例子:

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE]

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE]
"inst_loc"="C:\\Program Files\\Oracle\\Inventory"
[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1]
"ORACLE_HOME"="c:\\oracle\\product\\10.2.0\\db_1"
"ORACLE_HOME_NAME"="OraDb10g_home1"
"ORACLE_GROUP_NAME"="Oracle - OraDb10g_home1"
"NLS_LANG"="AMERICAN_AMERICA.AL32UTF8"
"ORACLE_BUNDLE_NAME"="Enterprise"
"SQLPATH"="c:\\oracle\\product\\10.2.0\\db_1\\dbs"
"ORACLE_HOME_KEY"="SOFTWARE\\ORACLE\\KEY_OraDb10g_home1"
"MSHELP_TOOLS"="c:\\oracle\\product\\10.2.0\\db_1\\MSHELP"
"ORACLE_BASE"="c:\\oracle\\product\\10.2.0"
"RDBMS_CONTROL"="c:\\oracle\\product\\10.2.0\\db_1\\DATABASE"
"RDBMS_ARCHIVE"="c:\\oracle\\product\\10.2.0\\db_1\\DATABASE\\ARCHIVE"
"ORACLE_SID"="MISSBB"
"ORA_MISSBB_AUTOSTART"=hex(2):54,00,52,00,55,00,45,00,00,00
"ORA_MISSBB_SHUTDOWN"=hex(2):54,00,52,00,55,00,45,00,00,00
"ORA_MISSBB_SHUTDOWN_TIMEOUT"=hex(2):39,00,30,00,00,00
"ORA_MISSBB_SHUTDOWNTYPE"=hex(2):69,00,6d,00,6d,00,65,00,64,00,69,00,61,00,74,\
00,65,00,00,00

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\SYSMAN]
[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\SYSMAN\OracleDBConsoleMISSBB]
"EMDROOT"="c:\\oracle\\product\\10.2.0\\db_1"
"ORACLE_HOME"="c:\\oracle\\product\\10.2.0\\db_1"
"EMSTATE"="c:\\oracle\\product\\10.2.0\\db_1\\myhost.cn.madm.net_MISSBB"
"CONSOLE_CFG"="dbconsole"
"ORACLE_SID"="MISSBB"
"TIMEOUT"="15"
"TRACE_LEVEL"="16"

5. 配置listener。

示例:
listener.ora

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = MISSBB.CN.MYDOMAIN.NET)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
(SID_NAME = MISSBB)
)
)

LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = haz11wstedp011)(PORT = 1521))
)

tnsnames.ora

MISSBB.CN.MYDOMAIN.NET =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = haz11wstedp011)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MISSBB.CN.MYDOMAIN.NET)
)
)

启动listener:

CMD> lsnrctl start

此步会创建OracleOraDb10g_home1TNSListener服务(手工),并启动。

6. 创建Oracle Service。

CMD> oradim -NEW -SID MISSBB

如果不想自动启动,可以添加参数-STARTMODE:

CMD> oradim -NEW -SID MISSBB -STARTMODE MANUAL

此步会创建OracleServiceMISSBB服务(手动),并启动。

到此,一个SID为MISSBB的Oracle实例已经创建完毕。可以用sqlplus登录来创建数据库。

接下来可以创建数据库了。
—————————————————–

7. 先创建Server Parameter文件

这个文件可以修改自默认的init.ora,也可以从其他数据CREATE PFILE FROM
SPFILE创建,大牛的话自己写一个好了。需要注意的是:

1) 参数undo_tablespace需要修改成与你将创建的数据库中的Undo Tablespace名字相同。

2) 一些目录如控制文件、数据文件等都需要再次检查一下,否则可能导致实例终止。

8. 启动实例并创建数据库。

SQL> conn sys/manager as sysdba
Connected to an idle instance.

SQL> startup nomount
ORACLE instance started.

Total System Global Area 167772160 bytes
Fixed Size 1247876 bytes
Variable Size 71304572 bytes
Database Buffers 88080384 bytes
Redo Buffers 7139328 bytes

SQL> CREATE DATABASE missbb
2 USER SYS IDENTIFIED BY manager
3 USER SYSTEM IDENTIFIED BY manager
4 LOGFILE GROUP 1 ('C:/oracle/oradata/missbb/redo01.log') SIZE 100M
reuse,
5 GROUP 2 ('C:/oracle/oradata/missbb/redo02.log') SIZE 100M reuse,
6 GROUP 3 ('C:/oracle/oradata/missbb/redo03.log') SIZE 100M reuse
7 MAXLOGFILES 5
8 MAXLOGMEMBERS 5
9 MAXLOGHISTORY 1
10 MAXDATAFILES 100
11 MAXINSTANCES 1
12 CHARACTER SET AL32UTF8
13 NATIONAL CHARACTER SET AL16UTF16
14 DATAFILE 'C:/oracle/oradata/missbb/system01.dbf' SIZE 325M REUSE
15 EXTENT MANAGEMENT LOCAL
16 SYSAUX DATAFILE 'C:/oracle/oradata/missbb/sysaux01.dbf' SIZE 325M
REUSE
17 DEFAULT TABLESPACE tbs_1
18 DEFAULT TEMPORARY TABLESPACE temp01
19 TEMPFILE 'C:/oracle/oradata/missbb/temp01.dbf' SIZE 20M REUSE
20 UNDO TABLESPACE undo01
21 DATAFILE 'C:/oracle/oradata/missbb/undo01.dbf' SIZE 200M REUSE
22 AUTOEXTEND ON MAXSIZE 1G
23 /

Database created.

9. 事后的简单调整。比如创建、修改表空间、数据文件等。

SQL> select * from v$tablespace;

TS# NAME INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
0 SYSTEM YES NO YES
1 UNDO01 YES NO YES
2 SYSAUX YES NO YES
3 TEMP01 NO NO YES
4 TBS_1 YES NO YES

SQL> select file#,ts#,status,name from v$datafile;

FILE# TS# STATUS NAME
------ --- ------- ----------------------------------------
1 0 SYSTEM C:\ORACLE\ORADATA\MISSBB\SYSTEM01.DBF
2 1 ONLINE C:\ORACLE\ORADATA\MISSBB\UNDO01.DBF
3 2 ONLINE C:\ORACLE\ORADATA\MISSBB\SYSAUX01.DBF
4 4 ONLINE
C:\ORACLE\ORADATA\MISSBB\DATAFILE\O1_MF_TBS_1_2783TJ0V_.DBF

因为在CREATE DATABASE语句中没有指定DEFAULT TABLESPACE tbs_1的datafile,Oracle自行创建了O1_MF_TBS_1_2783TJ0V_.DBF,路径为参数 db_create_file_dest设定的C:\oracle\oradata。


SQL> alter database
2 datafile 'C:\ORACLE\ORADATA\MISSBB\DATAFILE\O1_MF_TBS_1_2783TJ0V_.DBF'
offline;
alter database datafile
'C:\ORACLE\ORADATA\MISSBB\DATAFILE\O1_MF_TBS_1_2783TJ0V_.DBF' offline
*
ERROR at line 1:
ORA-01145: offline immediate disallowed unless media recovery enabled

先激活归档模式才能修改数据文件。将实例启动到mount状态:

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount
ORACLE instance started.

Total System Global Area 167772160 bytes
Fixed Size 1247876 bytes
Variable Size 71304572 bytes
Database Buffers 88080384 bytes
Redo Buffers 7139328 bytes
Database mounted.

SQL> alter database archivelog;

Database altered.

SQL> alter database
2 datafile 'C:\ORACLE\ORADATA\MISSBB\DATAFILE\O1_MF_TBS_1_2783TJ0V_.DBF'
3 offline;

Database altered.

SQL> alter database rename
2 file 'C:\ORACLE\ORADATA\MISSBB\DATAFILE\O1_MF_TBS_1_2783TJ0V_.DBF'
3 to 'C:\ORACLE\ORADATA\MISSBB\tbs01.dbf';

Database altered.

SQL> select file#,ts#,status,name from v$datafile;

FILE# TS# STATUS NAME
--------- ---------- ------- ----------------------------------------
1 0 SYSTEM C:\ORACLE\ORADATA\MISSBB\SYSTEM01.DBF
2 1 ONLINE C:\ORACLE\ORADATA\MISSBB\UNDO01.DBF
3 2 ONLINE C:\ORACLE\ORADATA\MISSBB\SYSAUX01.DBF
4 4 OFFLINE C:\ORACLE\ORADATA\MISSBB\TBS01.DBF

SQL> alter database open;

Database altered.

SQL> alter database datafile 'C:\ORACLE\ORADATA\MISSBB\TBS01.DBF' online;

Database altered.

SQL> alter tablespace tbs_1 rename to tbs01;

Tablespace altered.

SQL> select * from v$tablespace;

TS# NAME INC BIG FLA ENC
---------- ------------------------- --- --- --- ---
0 SYSTEM YES NO YES
1 UNDO01 YES NO YES
2 SYSAUX YES NO YES
3 TEMP01 NO NO YES
4 TBS01 YES NO YES

OK! 可用的数据库基本创建完毕。

剩下来就是配置问题——实际上根本不会在这个数据库中配置,因为你的老板不会允许你这样安装Oracle的 :-)

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production


Next Page »