自定义的Oracle用户密码效验程序(二)

2014-11-24 17:30:30 · 作者: · 浏览: 1
off();


return 0;
}
catch(otl_exception &p)
{
cerr< cerr< cerr< //ORA-12541: TNS: 无监听程序
//if( strstr( (char *)p.msg,"ORA-12541") != NULL) return 2;
}
return 1;
}


//从字典文件读入密码字符串尝试连接
bool testConnDB()
{
FILE *fp;
char arrPwd[MAXLINE+1] = {0};
bool bRet = false;
char arrConnStr[50] = {0};


fopen_s(&fp , DICT_FILE , "r");


if ( fp == NULL)
{
printf("字典文件打开失败!\n");
return false;
}

while ((fgets (arrPwd, MAXLINE, fp)) != NULL)
{
if( strlen(arrPwd) <= 1) continue;
arrPwd[strlen(arrPwd)-1] = 0;


for(int i = 0; i < arrTestUserLen;i++)
{
memset(arrConnStr,0,50);
sprintf_s(arrConnStr,"%s/%s@%s",arrTestUser[i],arrPwd,TNS_DBNAME);
printf("%s\n",arrConnStr);

if(connectORA(arrConnStr) == 0)
{
bRet = true;
goto end;
}


}
}
end:
fclose(fp);
return bRet;
}


//尝试用默认的用户名和密码连接
// 11g可用"select * from dba_users_with_defpwd"查出使用默认的用户名和密码
// 在本程序采用手工指定方式
bool testConnDBDF()
{
bool bRet = false;


char arrDfUser[][30] = {"sys","system","sysman","scott","aqadm","dbsnmp"};
char arrDfPwd[][30] = {"change_on_install","manager","oem_temp","tiger","aqadm","dbsnmp"};
char arrConnStr[50]= {0};

for(int i=0;i<6;i++)
{
memset(arrConnStr,0,50);
sprintf_s(arrConnStr,"%s/%s@%s",arrDfUser[i],arrDfPwd[i],TNS_DBNAME);
printf("%s\n",arrConnStr);


if( connectORA(arrConnStr) == 0)
{
bRet = true;
break;
}
}
return bRet;
}


这程序因为没使用多线程,而数据库的连接本身是个比较慢的动作,所以速度并不快,不过能跑就行。