安全中国 Windows 2003安全设置大全

安全中国 Windows 2003安全设置大全 安全中国(http://www.anqn.com)——全球最大中文黑客门户 前面讲的都是屁话,润润笔而已。(俺也文人一次) 话锋一转就到了系统权限设置与安全配置的实际操作阶段 系统设置网上有一句话是“最小的权限+最少的服务=最大的安全”。此句基本上是个人都看过,但我好像 没有看到过一篇讲的比较详细稍具全面的文章,下面就以我个人经验作一次教学尝试! 最小的权限如何实现? NTFS系统权限设置 在使用之前将每个硬盘根加上 Administrators 用户为全部权限(可选加入SYSTEM用户) 删除其它用户,进入系统盘:权限如下 C:\WINDOWS Administrators SYSTEM用户全部权限 Users 用户默认权限不作修改 其它目录删除Everyone用户,切记C:\Documents and Settings下All Users\Default User目录及其子目录 如C:\Documents and Settings\All Users\Application Data 目录默认配置保留了Everyone用户权限 C:\WINDOWS 目录下面的权限也得注意,如 C:\WINDOWS\PCHealth、C:\windows\Installer也是保留了Everyone权限. 删除C:\WINDOWS\Web\printers目录,此目录的存在会造成IIS里加入一个.printers的扩展名,可溢出攻击 默认IIS错误页面已基本上没多少人使用了。建议删除C:\WINDOWS\Help\iisHelp目录 删除C:\WINDOWS\system32\inetsrv\iisadmpwd,此目录为管理IIS密码之用,如一些因密码不同步造成500 错误的时候使用 OWA 或 Iisadmpwd 修改同步密码,但在这里可以删掉,下面讲到的设置将会杜绝因系统 设置造成的密码不同步问题。 打开C:\Windows 搜索 net.exe;cmd.exe;tftp.exe;netstat.exe;regedit.exe;at.exe;attrib.exe;cacls.exe;format.com; regsvr32.exe;xcopy.exe;wscript.exe;cscript.exe;ftp.exe;telnet.exe;arp.exe;edlin.exe; ping.exe;route.exe;finger.exe;posix.exe;rsh.exe;atsvc.exe;qbasic.exe;runonce.exe;syskey.exe 修改权限,删除所有的用户只保存Administrators 和SYSTEM为所有权限 关闭445端口 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\netBT\Parameters 新建 “DWORD值”值名为 “SMBDeviceEnabled” 数据为默认值“0” 禁止建立空连接 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 新建 “DWORD值”值名为 “RestrictAnonymous” 数据值为“1” [2003默认为1] 禁止系统自动启动服务器共享 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters 新建 “DWORD值”值名为 “AutoShareServer” 数据值为“0” 禁止系统自动启动管理共享 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters 新建 “DWORD值”值名为 “AutoShareWks” 数据值为“0” 通过修改注册表防止小规模DDOS攻击 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 新建 “DWORD值”值名为 “SynAttackProtect” 数据值为“1” 禁止dump file的产生 dump文件在系统崩溃和蓝屏的时候是一份很有用的查找问题的资料。然而,它也能够给黑客提供一些敏感 信息比如一些应用程序的密码等。控制面板>系统属性>高级>启动和故障恢复把 写入调试信息 改成无。 关闭华医生Dr....

2009-04-10 · 3 分钟 · admin

Конфиг ядра FreeBSD 7 для работы в VMware ESXi (FreeBSD/amd64)

cpu HAMMER ident VMWARE options SCHED_ULE # ULE scheduler options PREEMPTION # Enable kernel thread preemption options INET # InterNETworking options INET6 # IPv6 communications protocols options SCTP # Stream Control Transmission Protocol options FFS # Berkeley Fast Filesystem options SOFTUPDATES # Enable FFS soft updates support options UFS_ACL # Support for access control lists options UFS_DIRHASH # Improve performance on big directories options UFS_GJOURNAL # Enable gjournal-based UFS journaling options MD_ROOT # MD is a potential root device options NFSCLIENT # Network Filesystem Client options NFSSERVER # Network Filesystem Server options NFSLOCKD # Network Lock Manager options NFS_ROOT # NFS usable as /, requires NFSCLIENT options NTFS # NT File System options MSDOSFS # MSDOS Filesystem options CD9660 # ISO 9660 Filesystem options PROCFS # Process filesystem (requires PSEUDOFS) options PSEUDOFS # Pseudo-filesystem framework options GEOM_PART_GPT # GUID Partition Tables....

2009-04-08 · 3 分钟 · admin

修改时间出现date: can't reach time daemon, time set locally

kern.securelevel 过高了,郁闷

2009-04-08 · 1 分钟 · admin

vmware freebsd 时间不准解决办法

/boot/loader.conf 加入 kern.hz=100 hint.apic.0.disabled=1 The default “tick” on FreeBSD is 1000 Hz, which is far greater than what a virtual machine can keep up with accurately, 100Hz is more reasonable value. APIC has been known to cause issues with FreeBSD, but is required if you are using SMP in your guest (2 or more processors). 原文 http://peterkieser.com/technical/vmware-server-issues/

2009-04-08 · 1 分钟 · admin

利用Curl、socket、file_get_contents POST数据

array( ‘method’=>‘POST’, ‘header’=>‘Content-type: application/x-www-form-urlencoded’."\r\n". ‘User-Agent : Jimmy's POST Example beta’."\r\n". ‘Content-length: ‘.strlen($post_string)+8, ‘content’=>‘mypost=’.$post_string) ); $stream_context = stream_context_create($context); $data = file_get_contents($remote_server,FALSE,$stream_context); return $data; } ?> 转自 http://hi.baidu.com/xsite/blog/item/1ae57963be3e38680d33fa6b.html

2009-04-06 · 1 分钟 · admin

實現系統管理員administrator自動登入

首先要取消登入時按 Ctrl+Alt+Del 鍵才顯示登入窗口 方法: 在〔開始〕→〔系統管理工具〕→〔本機安全性原則〕→ 〔本機安全性原則〕→在〔安全性選項〕的右邊窗口→ 打開〔Interactive logon: Do not require CTRL+ALT+DEL〕 選〔啟用〕後重新開機生效 之後,便要實現系統管理員administrator自動登入,方法有多種如下: 方法一: 打開「開始」→「運行」,在「運行」 一欄中輸入「Rundll32 netplwiz.dll,UsersRunDll」 去除「要使用本機,用戶必須輸入用戶名密碼」復選框中的勾號 方法二: 2、修改註冊表 通過改動註冊表可實現自動登入,方法是打開「開始」→「運行」, 在「運行」一欄中輸入「Regedit」命令打開註冊表編輯器, 依次打開HKEY_LOCAL_MACHIN\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon, 在右側窗口分別新鍵字符串值 autoadminlogon:鍵值為1; defaultpassword:鍵值為自動登入用戶的密碼。 其中在註冊表中有 defaultusername 這個字符串值, 其默認鍵值是Administrator,您也可將它更改為自己所需要的管理員帳號 方法三: 右擊桌面,新建一個記事本文件,打開,按下面的格式書寫. Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] “DefaultUserName”=“你的用戶名” “DefaultPassword”=“密碼” “AutoAdminLogon”=“1” 最後儲存及重命名,為自動登陸.reg 然後雙擊導入表. 為了防止出錯,你最好是複製我的這個命令,然後點編輯,替換,把這幾個需要改動的地方用替換的辦法進行替換. 這樣也可以實現自動登入Windows系統了. 考慮到新手容易出錯.如果不能出錯不能進入桌面,則在開機的時候按住SHIFT鍵,可以出現登陸界面,手動輸入密碼就是了. 原文 http://www.138technicity.com/vipbbs/ccb/topic_view.cgi?forum=5&article;_id=0005081030225019&publishtime;_id=0005081030225019&new;_window=1&page;=15

2009-04-05 · 1 分钟 · admin

VMware Server、VMware GSX Server、VMware ESX Server,VI说明

免费的VMware Server:还在VMware推行它宏伟的虚拟化蓝图之前,ESX Server的上一代版本GSX Server已经销售了五年之久,它当时的售价接近现在的ESX Server。和ESX Server一样,GSX Server也是专注于数据中心的布置,后来VMware发布了企业管理工具VirtualCenter,可以使管理GSX Server和 ESX Server完全一样。 自从2001年VMware推出GSX Server至今,已有300多家著名大公司采用了该系统。2005年末,VMware终于推出了该公司史上第一款虚拟化产品VMware Play。接下来,又做出决定把即将推出的GSX Server 4.0转为免费,并重新命名为Server 1.0。这就是VMware Server的由来。 说白了,免费的VMware Server就是VMware GSX,也就是ESX的上一代产品。 GSX Server和ESX Server,两个产品都可以提供多操作系统运行支持。但这两个产品采取的实现方式不同,GSX Server在宿主操作系统中以应用程序的方式运行服务器仿真会话,比如在Windows 2000系统中运行多个服务器仿真系统。而GSX Server的后继产品 ESX Server则基于专有的系统平台,使用分立的分区来隔离每一个虚拟系统,这消除了GSX Server无法避免的性能瓶颈,且可以将计算性能动态分配给有计算任务的虚拟服务器。 VMware Workstation是用在个人桌面系统中的,而VMware GSX Server与VMWare ESX Server用于服务器的,VMware Workstation与VMware GSX Server需要操作系统的支持,而VMWare ESX Server不需要操作系统的支持,即在主机没有操作系统的情况下也可以安装。 VMware GSX Server是界于VMware Workstation与VMWare ESX Server的一个版本。VI,也就是VMware Infrastructure,可在硬件上直接運作。因為性能的考慮,一般在主生產環境中建議使用 VI3。 ESX企业级,GSX工作组级,Workstation单机级 有的文章说:VMware Workstation与GSX Server的一个区别在于Workstation不能进行远程控制,要维护该虚拟机,必须要到宿主机上进行物理操作,不知道它们所说的Workstation是什么版本的,我在VMware Workstation 6.0.3版本下进行远程控制维护是成功的。 Esx Server 是一个全新的架构,它本身就有一个基于 linux 的操作系统,基于虚拟服务器进行了优化,所以效率会比以上版本都高。 一、ESX Server 2.5.x的设计 下面我们讨论的体系结构和设计中,我们假设一个应用环境,它由最少两个ESXServer系统、共享的SAN存储、VirtualCenter和VMotion。 1.ESX Server 2.5.x特性概述 ESX Server 2.5.x有下面的特性 ESX server物理机 ·每ESX Server支持16个逻辑CPU ·每ESX Server支持80个虚拟机CPU ·每ESX Server支持64GB内存 ·支持8个swap文件,每个swap文件的最大容量为64GB ·每系统支持64个适配器 ·支持8个千兆网卡或者16个百兆网卡 ·每个虚拟交换机支持32个虚拟机 ·每ESX Server支持16个光纤通道卡 ·每个存储阵列支持128个LUN ·每ESX Server支持128个LUN...

2009-04-05 · 2 分钟 · admin

nginx 绑定多域名跳转问题

如 server_name 是 andsky.com www.andsky.com www.andsky.com 會自動轉到 andsky.com 用以下方法可以解决 if (-d $request_filename){ rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; }

2009-04-04 · 1 分钟 · admin

nginx echsop rewrite规则

从网上搜索到的规则,但不能用,修改了一下, rewrite ^/index.html$ /index.php; rewrite ^/category$ /index.php; rewrite ^/feed-c([0-9]+).xml$ /feed.php?cat=$1; rewrite ^/feed-b([0-9]+).xml$ /feed.php?brand=$1; rewrite ^/feed.xml$ /feed.php; rewrite ^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)-([0-9]+)-(.+)-([a-zA-Z]+)(.*).html$ /category.php?id=$1&brand;=$2&price;_min=$3&price;_max=$4&filter;_attr=$5&page;=$6&sort;=$7ℴ=$8; rewrite ^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)(.*).html$ /category.php?id=$1&brand;=$2&price;_min=$3&price;_max=$4&filter;_attr=$5; rewrite ^/category-([0-9]+)-b([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*).html$ /category.php?id=$1&brand;=$2&page;=$3&sort;=$4ℴ=$5; rewrite ^/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*).html$ /category.php?id=$1&brand;=$2&page;=$3; rewrite ^/category-([0-9]+)-b([0-9]+)(.*).html$ /category.php?id=$1&brand;=$2; rewrite ^/category-([0-9]+)(.*).html$ /category.php?id=$1; rewrite ^/goods-([0-9]+)(.*).html$ /goods.php?id=$1; rewrite ^/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*).html$ /article_cat.php?id=$1&page;=$2&sort;=$3ℴ=$4; rewrite ^/article_cat-([0-9]+)-([0-9]+)(.*).html$ /article_cat.php?id=$1&page;=$2; rewrite ^/article_cat-([0-9]+)(.*).html$ /article_cat.php?id=$1; rewrite ^/article-([0-9]+)(.*).html$ /article.php?id=$1; rewrite ^/brand-([0-9]+)-c([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+).html /brand.php?id=$1&cat;=$2&page;=$3&sort;=$4ℴ=$5; rewrite ^/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*).html /brand.php?id=$1&cat;=$2&page;=$3; rewrite ^/brand-([0-9]+)-c([0-9]+)(.*).html /brand.php?id=$1&cat;=$2; rewrite ^/brand-([0-9]+)(.*).html /brand.php?id=$1; rewrite ^/tag-(.*).html /search.php?keywords=$1; rewrite ^/snatch-([0-9]+).html$ /snatch.php?id=$1; rewrite ^/group_buy-([0-9]+).html$ /group_buy.php?act=view&id;=$1; rewrite ^/auction-([0-9]+)....

2009-04-03 · 1 分钟 · admin

freebsd下在一块网卡下增加删除ip

在bge0网卡上增加ip别名: ifconfig bge0 add alias xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx up 说明:这里掩码的设定是这样的,同一个网断的第一个ip掩码按照真实的掩码设置。在这个网段下面再增加ip时,掩码就是255.255.255.255了!切记! 在bge0网卡上删除ip别名: ifconfig bge0 -alias xxx.xxx.xxx.xxx 下路由配置 配置路由 在同一个局域网上的计算机是直接连通的,但是不同的网络上的计算机并没有直接相连,只能通过一台特殊的专用计算机 -路由器来完成连通。路由器连接有多个网络界面,每一个网络界面连接到一个相应的网络上,具有一个这个网络上的IP地址,因此,网络内部的计算机可以和路由器本身相互通信。 当网络内部的计算机要向外连接的时候,数据包实际是交给路由器的,路由器再将数据包从连接外部网络的网络界面上转发出去,数据包经过这样一个一个的转发过程,直到到达目的地。对于网络内部的计算机来讲,没有必要了解数据包的整个转发的路径和经过的所有路由器的信息,只需要知道第一步需要将数据包交给哪一个路由器就可以了。因此,计算机必须知道与它直接相连接的路由器的有关信息,这个过程就是路由配置的过程。 进行路由配置有两种途径,一种是由管理员设置所有的路由信息,由于数据是手工设置,因此称为静态路由设置。另一个是启动一个支持路由交换协议的进程,自动侦测网络上的所有路由器及其相关信息,这称为动态路由设置。 在 FreeBSD系统不用做专门路由器的情况下,一般地说使用静态路由设置足够满足网络通信的需要。 缺省网关 在最简单的情况下,一个网络向外通过一个路由器完成向外连接,这个路由器被称为缺省网关,它负责几乎所有的向外连接任务。假设缺省网关的地址为 192.168.1.254, 则设置缺省网关的命令为: freebsd# route add default 192.168.1.254 add net default: gateway 192.168.1.254 //成功配置缺省网关 add net default: gateway 192.168.1.254: File exists //如果系统已经设置了缺省网关,那么系统会报告错误 freebsd# route delete default delete net default //成功删除缺省网关 freebsd# route flush //清除所有路由 default 192.168.1.254 done 上述命令执行之后立即生效,因此,可能会影响已经建立的连接。为了保存缺省网关的配置,同样也需要将配置写入系统配置文件 rc.conf。 defaultrouter=“192.168.1.254” 仅仅配置缺省网关的大部分情况是在计算机处于整个互联网的边缘,网络中仅仅需要一个路由器接入互联网就可以了。 2) 其他静态路由设置 更复杂的情况下,计算机所处的网络与多个网络相连接,网络中存在多个路由器,每个路由器负责到一些网络的转发任务,而不负责到全部网络的转发任务。这种情况下,如果将所有的数据都发给一个路由器,那么原则上它只能正确转发目的是它自己负责的网络的数据。实际使用当中,路由器将使用 ICMP协议,向发送数据的主机报告路由错误。 因此,应该在计算机中配置这个网络上所有路由器及这些路由器负责的相应网络的路由数据,以便计算机选择正确的路由器转发数据包。同样,也必须使用 route命令增加到各个网络的静态路由数据。...

2009-04-01 · 2 分钟 · admin

如何把wordpress博客搬到Google App Engine

2009-03-31 · 0 分钟 · admin

优化MySQL数据库性能的八种方法

1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的 性能,我们可以将表中字段的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间, 甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是 BIGIN来定义整型字段。 另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。 对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数 值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。 2、使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查 询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给 主查询,如下所示: DELETE FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下, 子查询可以被更有效率的连接(JOIN).. 替代。例如,假设我们要将所有没有订单记录的用户取出来,可以用下面这个查询完成: SELECT * FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 如果使用连接(JOIN).. 来完成这个查询工作,速度将会快很多。尤其是当salesinfo表中对CustomerID建有索引的话,性能将 会更好,查询如下: SELECT * FROM customerinfo LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo. CustomerID WHERE salesinfo.CustomerID IS NULL 连接(JOIN).. 之所以更有效率一些,是因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。 3、使用联合(UNION)来代替手动创建的临时表 MySQL 从 4.0 的版本开始支持 UNION 查询,它可以把需要使用临时表的两条或更多的 SELECT 查询合并的一个查询中。在客户 端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用 UNION 来创建查询的时候,我们只需要用 UNION作为关键字把 多个 SELECT 语句连接起来就可以了,要注意的是所有 SELECT 语句中的字段数目要想同。下面的例子就演示了一个使用 UNION的查 询。...

2009-03-30 · 2 分钟 · admin

Alexa Traffic Rank PHP5 Class

This PHP5 class utilizes the web service provided by Alexa/Amazon to get the traffic information about the site. You’ll need to sign up for an account at Alexa to get the pair (access key and secret key). The first 10,000 queries per month are free. view plaincopy to clipboardprint? mParams = array( 'Service'=>'AlexaWebInfoService', 'AWSAccessKeyId'=>'YOUR ACCESS KEY', // access key id 'Operation'=>'UrlInfo', 'ResponseGroup'=>'Rank', 'Url'=>NULL, 'Timestamp'=>gmdate('Y-m-d\TH:i:s.000\Z'), 'Signature'=>NULL, ); $this->prepareSignature(); } /** ref: http://developer....

2009-03-29 · 2 分钟 · admin

[原创] MySQL Proxy 学习笔记

作者:heiyeluren 时间:2008-1-28 博客:http://blog.csdn.net/heiyeshuwu 【 测试平台 】 **服务器端: **OS:FreeBSD 6.2 Lua: 5.1.1 MySQL Server:4.1.22-log MySQL Proxy: 0.6.0 客户端: OS:Windows XP Pro SP2 PHP: PHP 5.2.4 (cli) MySQL Client: Ver 14.13 Distrib 5.1.19-beta for Win32 注意:本文使用的是最新版本 MySQL Proxy alpha 0.6.0 ,如果是0.5.0版本可能部分选项和操作不一致,同样的,以后如果除了新版本,请参照新版本文档。 【 MySQL Proxy 安装 】 $ fetch http://mirror.mysql-partners-jp.biz/Downloads/MySQL-Proxy/mysql-proxy-0.6.0-freebsd6-x86.tar.gz $ tar zxvf mysql-proxy-0.6.0-freebsd6-x86.tar.gz $ cd mysql-proxy-0.6.0-freebsd6-x86 $ cp sbin/mysql-proxy /usr/local/sbin/ 如果无法正常使用,请检查相应的其他组件是否安装了,mysql-proxy 需要依赖 lua、libtool、glib、libevent 等库。 【 初步使用 】 执行 mysql-proxy –help-all 查看所有的设置选项,比较重要的选项大致描述一下功能: 管理功能选项...

2009-03-29 · 5 分钟 · admin

[转]MySQL与事务

2006年08月05日 星期六 下午 02:23 作者:老王 MySQL5.X都已经发布好久了,但是还有很多人认为MySQL是不支持事务处理的,这不得不怪他们是孤陋寡闻的,其实,只要你的MySQL版本支持BDB或InnoDB表类型,那么你的MySQL就具有事务处理的能力。这里面,又以InnoDB表类型用的最多,虽然后来发生了诸如Oracle收购InnoDB等令MySQL不爽的事情,但那些商业上的斗争与技术无关,下面以InnoDB表类型为例简单说一下MySQL中的事务。 先来明确一下事务涉及的相关知识: 事务都应该具备ACID特征。所谓ACID是Atomic(原子性),Consistent(一致性),Isolated(隔离性),Durable(持续性)四个词的首字母所写,下面以“银行转帐”为例来分别说明一下它们的含义: 原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。换句话说,事务是不可分割的最小单元。比如:银行转帐过程中,必须同时从一个帐户减去转帐金额,并加到另一个帐户中,只改变一个帐户是不合理的。 一致性:在事务处理执行前后,数据库是一致的。也就是说,事务应该正确的转换系统状态。比如:银行转帐过程中,要么转帐金额从一个帐户转入另一个帐户,要么两个帐户都不变,没有其他的情况。 隔离性:一个事务处理对另一个事务处理没有影响。就是说任何事务都不可能看到一个处在不完整状态下的事务。比如说,银行转帐过程中,在转帐事务没有提交之前,另一个转帐事务只能处于等待状态。 持续性:事务处理的效果能够被永久保存下来。反过来说,事务应当能够承受所有的失败,包括服务器、进程、通信以及媒体失败等等。比如:银行转帐过程中,转帐后帐户的状态要能被保存下来。 再来看看哪些问题会用到事务处理: 这里不说“银行转帐”的例子了,说一个大家实际更容易遇到的“网上购书”的例子。先假设一下问题的背景:网上购书,某书(数据库编号为123)只剩最后一本,而这个时候,两个用户对这本书几乎同时发出了购买请求,让我们看看整个过程: 在具体分析之前,先来看看数据表的定义: create table book ( book_id unsigned int(10) not null auto_increment, book_name varchar(100) not null, book_price float(5, 2) not null, #我假设每本书的价格不会超过999.99元 book_number int(10) not null, primary key (book_id) ) type = innodb; #engine = innodb也行 对于用户甲来说,他的动作稍微比乙快一点点,其购买过程所触发的动作大致是这样的: 1. SELECT book_number FROM book WHERE book_id = 123; book_number大于零,确认购买行为并更新book_number 2. UPDATE book SET book_number = book_number - 1 WHERE book_id = 123; 购书成功 而对于用户乙来说,他的动作稍微比甲慢一点点,其购买过程所触发的动作和甲相同: 1....

2009-03-29 · 2 分钟 · admin