Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
 1,取出所有日期中订单最大金额的前三名
  SELECT * FROM (
    SELECT CONVERT(VARCHAR(10),bo.OrderDate,120) date1, orderno,amount,
    ROW_NUMBER() OVER(ORDER BY bo.amount desc) AS numbers
    FROM bdOrder bo(NOLOCK)
    WHERE bo.OrderDate >='2011-03-19'
)m
WHERE m.numbers <=3
2,若想取出每日的前三名,就需要对数据进行按日期分组,不能用GROUP BY ,因为OVER中有amount,必须要在GROUP BY 中加上amount,也有失去了分组的意向。
    方法:在行级分组,利用强大的OVER,在行级对日期进行分组
    SELECT * FROM (
           SELECT CONVERT(VARCHAR(10),bo.OrderDate,120) date1, orderno,amount,
           ROW_NUMBER() OVER(PARTITION BY CONVERT(VARCHAR(10),bo.OrderDate,120) ORDER BY bo.amount desc) AS numbers
           FROM bdOrder bo(NOLOCK)
           WHERE bo.OrderDate >='2011-03-19'
    )m
     WHERE m.numbers <=3


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
 SQL中的多个运算是同时进行计算的,即同时操作,all-at-once operation,与在select列表中的前后位置无关
如: update a
        set a.value1 = a.value2, a.value2 = a.value1  --同时发生,即时交换
        from tmpTable
由上知:1)select中的别名不能在同一select列表中使用。 如select max(id) mid, mid+1 from tmpTable 是错误的
             2)UPDATE t
                  SET t.c4 = convert(varchar(20),GETDATE(),120)
                  FROM tmp2 t
                  因执行是同时进行的,故t.c4得到的日期是相同的
             3)update a set a.value1 = 100 + (select max(c1) from tmpTable)    因执行是同时的,故最大值c1不会改变

4)应用:得到某一值,并将此值加1
                  update a set @value = value, value = value+1 from tmpTable


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
建立复制分发的时候出现:OLE DB访问接口”SQLNCLI”无法启动分布式事物
原因:双方均要启动msdtc服务。
解决方法:双方电脑:
1.控制面板->管理工具->组件服务->计算机->我的电脑->右键->属性
2. 选择MSDTC页, 确认”使用本地协调器”
3.点击下方”安全配置”按钮
4. 勾选: “允许网络访问”,”允许远程客户端”,”允许入站”,”允许出站”,”不要求进行身份验证”.
5. 对于数据库服务器端, 可选择”要求对呼叫方验证”
停止分布式事务协调器服务,然后重新予以启动。
停止参与分布式事务的任何资源管理器服务(如 Microsoft SQL Server 或 Microsoft Message Queue Server),然后重新予以启动。
6.在双方防火墙中增加MSDTC.exe例外
可用命令行: netsh firewall set allowedprogram %windir%\system32\msdtc.exe MSDTC enable
7.dtC用到remoting的135端口,确保防火墙没有阻止
若还不行,修改host文件,将对方机器名和IP加入,因为远程服务器需通过发起服务器的机器名查找服务器。

注意:若是集群,则开群集DTC设置(在本地DTC下面)
或者在没有事务的情况下,不使用DTC
EXEC sp_serveroption @server = 'dpreport',@optname = 'remote proc transaction promotion', @optvalue = 'false'


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,自右向左,自上而上
2,箭头的粗细表示每个图标之间移动的数据行数量以及数据行大小移动所需的相对本。
Table Scan:表扫描,扫描每一行。,就说明数据表上没有聚集索引
Index Seek(索引查找):索引查找意味着查询优化器使用了数据表上的非聚集索引来查找数据
Clustered Index Seek(聚集索引查找):这指查询优化器使用了数据表上的聚集索引来查找数据,性能很快。实际上,这是SQL Server能做的最快的索引查找类型
Clustered Index Scan(聚集索引扫描):在有聚集索引的表上执行扫描,不是聚集查找的原因是WHERE条件限制太少,没用到聚集索引字段。聚集索引扫描与表扫描相似,不同的是聚集索引扫描是在一个建有聚集索引的数据表上执行的。与标准的表扫描不同,聚集索引扫描并不会总是去查找数据表中的所有数据,所以聚集索引扫描一般都会比标准的表扫描要快。通常来说,要将聚集索引扫描改成聚集索引查找,你唯一能做的是重写查询语句,让语句限制性更多,从而返回更少的数据行

避免出现:表扫描,估计I/O开销与估计运算符开销越小越好
估计I/O开销:
用于执行操作的所有 I/O 活动的估计开销。此值应尽可能低。
估计运算符开销:
用于执行此操作的查询优化器的开销。此操作的开销以占查询总开销的百分比的形式显示在括号中。由于查询引擎选择最高效的操作来执行查询或执行语句,因此此值应尽可能低。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

EXCEP:返回左结果集不在右结果集中的记录
INTERSEC:返回两个结果集相同的记录

SELECT * FROM (
SELECT 1 id,1 name1 UNION ALL SELECT 2,2 UNION ALL SELECT 3,3)m
EXCEPT
SELECT * FROM (
SELECT 1 id,1 name1 UNION ALL SELECT 2,2 UNION ALL SELECT 4,4 )n


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

SELECT EncryptByPassPhrase(
‘My Password Used To Encrypt This String in 2008.’,
‘hello,word!’)
解密:
SELECT CAST(DecryptByPassPhrase(
‘My Password Used To Encrypt This String in 2008.’,
MySecret) as varchar(max))


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

方法1: 抓取订单表中当前最大的编号,进行加1产生新的编号
优点:简单
缺点:当订单表很大时,速度将慢下来

方法2:建立一mdCurrentNo表,取出此表的值并增加1
优点:此表只有一条数据,故速度很快。
缺点:编号只能是递增的。

方法3:建立一mdCurrentNo表,同时建立一mdOrderNo表,里面存储了提前生成的随机不重复编号,结构为ID,No, 而mdCurrentNo的值存放的就是ID值,每次取出此ID JOIN mdOrderNo的ID,得到编号,然后将ID+1
优点:灵活
缺点:需要定时生成mdOrderNo的记录


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
 1,FROM阶段
   1)从FROM执行,对于JOIN,两表进行交叉连接,求笛卡尔积得到一个结果集。
   2)根据ON条件,对结果集不满足条件的记录去除
   3)若有外连接,如LEFT,RIGHT等,再将满足条件的加入到结果集中
   4)执行APPLY,PIVOT,UNPIVOT等表达式
2,WHERE阶段:对于1步骤得到的虚表,将where条件为true的保留下来
3,GROUP BY 阶段 对虚拟表进行分组
4,HAVING阶段,对分组后的虚拟表进行筛选
5,SELECT/UPDATE/DELETE阶段,投影取得列数据,若有TOP,则会根据ORDER BY 子句来选择指定数量的行
6,ORDER BY 阶段 对上述结果进行排序,返回游标

由上知:1,GROUP BY 是HAVING的基础,需要先执行GROUP BY 再执行HAVING
        2, WHERE比SELECT先执行,故在SELECT中指定的虚列在WHERE条件中不可用,而SELECT比ORDER BY 先执行,故在SELECT中指定的虚列在ORDER BY条件中可以使用
     SELECT f.UserName,SUM(amount) amo --amo:虚列,指在原有表中不存在的列
     FROM bdOrder
     ORDER BY amo
       3,若使用ORDER BY,则返回的是一个游标,不能用在FROM后面,因为FROM后面跟的是结果集
        SELECT * FROM ( SELECT * FROM frmuser ORDER BY Account )f 这样是错误的
       例外:可通过加TOP解决
    SELECT * FROM ( SELECT TOP * FROM frmuser ORDER BY Account )f
4:当Select未使用Distinct时,Order By可使用Select之前的字段,即:即使在Select中不存在,但在表中存在的字段,Order By也可引用当Select使用Distinct时,Order By只能使用Select中的字段


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
问题: 取出公司销售员工最近的订单编号及订单日期
 老办法,多次取值。实际是重复查询,查询一次返回一个值,不能做到查询一次得到所有结果
   SELECT a.UserName,
             (SELECT TOP 1 OrderNo
                FROM bdorder b
                WHERE b.SalesStaff = a.account
                  AND b.OrderDate >='2011-02-01'
                ORDER BY b.OrderNo DESC
              ) OrderNo,
             
                (SELECT TOP 1 OrderDate
                 FROM bdorder b
                 WHERE b.SalesStaff = a.account
                   AND b.OrderDate >='2011-02-01'
                 ORDER BY b.OrderNo DESC
                 )OrderDate 
                
 FROM frmuser a

新方法:查询一次返回一个结果集
SELECT a.UserName,b.OrderNo,b.orderdate
FROM frmuser a(NOLOCK)
  OUTER  APPLY(
      SELECT TOP 1 OrderNo,OrderDate
      FROM bdorder b
      WHERE b.SalesStaff = a.account
      AND b.OrderDate >='2011-02-01'
      ORDER BY b.OrderDate DESC
    )b
OUTER APPLY:相当于表中的LEFT JOIN
CROSS APPLY:相当于表中的JOIN 


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

为使用2005提供的新功能如行列转换pivot将将数据库兼容性由80提升到90,
sp_dbcmptlevel @dbname=’brm_lvjian’, @new_cmptlevel=90
报错:如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就必须出现在选择列表中。
语句为:
SELECT distinct a.orderno,
CONVERT(varchar(10), OrderDate, 20) AS OrderDate
FROM bdorder a
WHERE a.OrderDate >=’2011-02-01′
ORDER BY a.OrderDate
原因在80(sqlserver2000) 中对于ORDER BY 将忽略列前缀。故上面的ORDER BY a.OrderDate执行的是ORDER BY OrderDate
而在90(2005)中是不忽略列前缀的,上面的ORDER BY a.OrderDate因在select中不存在,故报错!
注:查看数据库兼容级别:数据库 – 属性 – 选项


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

网络连接配置正确,只是访问\\192.168.16.223这样的资源提示无法访问。
原因:将服务中的Workstation启动即可。
注:WordStation:维护远程资料访问功能


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
莱恩戴尔算法
调用方式:
 SymmetricMethod smd = new SymmetricMethod();
 string encode = smd.Encrypto("18620023427"); //JyHPgvA0lDTzgEKGYeCvxw==
 string decode = smd.Decrypto(encode);
可用DotNETReactor混淆加密提升安全
参考:http://www.cnblogs.com/freelyflight/archive/2005/08/19/218139.aspx


  /// <summary>
    /// 对称加密算法类
    /// </summary>
    public class SymmetricMethod
    {

        private SymmetricAlgorithm mobjCryptoService;
        private string Key;
        /// <summary>
        /// 对称加密类的构造函数
        /// </summary>
        public SymmetricMethod()
        {
            mobjCryptoService = new RijndaelManaged();
            Key = "LifeIsGood@lvshou";
        }
        /// <summary>
        /// 获得密钥
        /// </summary>
        /// <returns>密钥</returns>
        private byte[] GetLegalKey()
        {
            string sTemp = Key;
            mobjCryptoService.GenerateKey();
            byte[] bytTemp = mobjCryptoService.Key;
            int KeyLength = bytTemp.Length;
            if (sTemp.Length > KeyLength)
                sTemp = sTemp.Substring(0, KeyLength);
            else if (sTemp.Length < KeyLength)
                sTemp = sTemp.PadRight(KeyLength, ' ');
            return ASCIIEncoding.ASCII.GetBytes(sTemp);
        }
        /// <summary>
        /// 获得初始向量IV
        /// </summary>
        /// <returns>初试向量IV</returns>
        private byte[] GetLegalIV()
        {
            //string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
            string sTemp = Key;
            mobjCryptoService.GenerateIV();
            byte[] bytTemp = mobjCryptoService.IV;
            int IVLength = bytTemp.Length;
            if (sTemp.Length > IVLength)
                sTemp = sTemp.Substring(0, IVLength);
            else if (sTemp.Length < IVLength)
                sTemp = sTemp.PadRight(IVLength, ' ');
            return ASCIIEncoding.ASCII.GetBytes(sTemp);
        }
        /// <summary>
        /// 加密方法
        /// </summary>
        /// <param name="Source">待加密的串</param>
        /// <returns>经过加密的串</returns>
        public string Encrypto(string Source)
        {
            byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
            MemoryStream ms = new MemoryStream();
            mobjCryptoService.Key = GetLegalKey();
            mobjCryptoService.IV = GetLegalIV();
            ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
            CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
            cs.Write(bytIn, 0, bytIn.Length);
            cs.FlushFinalBlock();
            ms.Close();
            byte[] bytOut = ms.ToArray();
            return Convert.ToBase64String(bytOut);
        }
        /// <summary>
        /// 解密方法
        /// </summary>
        /// <param name="Source">待解密的串</param>
        /// <returns>经过解密的串</returns>
        public string Decrypto(string Source)
        {
            byte[] bytIn = Convert.FromBase64String(Source);
            MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
            mobjCryptoService.Key = GetLegalKey();
            mobjCryptoService.IV = GetLegalIV();
            ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
            CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
            StreamReader sr = new StreamReader(cs);
            return sr.ReadToEnd();
        }
    }


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

SessionID是由服务器随机产生的一个由24个字符组成的字符串,请求时连同SessionId值发给服务器,以让服务器识别客户。它可存放在客户端Cookie中,另外还可以存放在URL中,方法是在Web.config file中,将sessionState中的cookieless 属性设定为true,这样就避免了某些浏览器不支持Cookie的情况,例如低端的手机浏览器。

Session内容存放在服务器中,
ASP.NET session有三种存储方式:
InProc:存放在进程中。
StateServer 存放在独立的服务中。
SQLServer 存放在SqlServer数据库

参考:
http://msdn.microsoft.com/zh-tw/windowsmobile/system.web.sessionstate.httpsessionstate.sessionid(VS.80).aspx


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

一、系统的安装  

1、按照Windows2003安装光盘的提示安装,默认情况下2003没有把IIS6.0安装在系统里面。
2、IIS6.0的安装
  开始菜单?>控制面板?>添加或删除程序?>添加/删除Windows组件
  应用程序 ???ASP.NET(可选)
       |??启用网络 COM+ 访问(必选)
       |??Internet 信息服务(IIS)???Internet 信息服务管理器(必选) 
                   |??公用文件(必选)
                   |??万维网服务???Active Server pages(必选)
                              |??Internet 数据连接器(可选)
                              |??WebDAV 发布(可选)
                              |??万维网服务(必选)
                              |??在服务器端的包含文件(可选)
  然后点击确定?>下一步安装。(具体见本文附件1)

3、系统补丁的更新
  点击开始菜单?>所有程序?>Windows Update
  按照提示进行补丁的安装。

4、备份系统
  用GHOST备份系统。

5、安装常用的软件
  例如:杀毒软件、解压缩软件等;安装完毕后,配置杀毒软件,扫描系统漏洞,安装之后用GHOST再次备份系统。

6、先关闭不需要的端口 开启防火墙 导入IPSEC策略
在”网络连接”里,把不需要的协议和服务都删掉,这里只安装了基本的Internet协议(TCP/IP),由于要控制带宽流量服务,额外安装了Qos数据包计划程序。在高级tcp/ip设置里–“NetBIOS”设置”禁用tcp/IP上的NetBIOS(S)”。在高级选项里,使用”Internet连接防火墙”,这是windows 2003 自带的防火墙,在2000系统里没有的功能,虽然没什么功能,但可以屏蔽端口,这样已经基本达到了一个IPSec的功能。

修改3389远程连接端口
修改注册表.
开始–运行–regedit
依次展开 HKEY_LOCAL_MACHINE/SYSTEM/CURRENTCONTROLSET/CONTROL/
TERMINAL SERVER/WDS/RDPWD/TDS/TCP
右边键值中 PortNumber 改为你想用的端口号.注意使用十进制(例 10000 )

HKEY_LOCAL_MACHINE/SYSTEM/CURRENTCONTROLSET/CONTROL/TERMINAL SERVER/
WINSTATIONS/RDP-TCP/
右边键值中 PortNumber 改为你想用的端口号.注意使用十进制(例 10000 )
注意:别忘了在WINDOWS2003自带的防火墙给+上10000端口
修改完毕.重新启动服务器.设置生效.

二、用户安全设置
1、禁用Guest账号
在计算机管理的用户里面把Guest账号禁用。为了保险起见,最好给Guest加一个复杂的密码。你可以打开记事本,在里面输入一串包含特殊字符、数字、字母的长字符串,然后把它作为Guest用户的密码拷进去。
2、限制不必要的用户
去掉所有的Duplicate User用户、测试用户、共享用户等等。用户组策略设置相应权限,并且经常检查系统的用户,删除已经不再使用的用户。这些用户很多时候都是黑客们入侵系统的突破口。
3、把系统Administrator账号改名
大家都知道,Windows 2003 的Administrator用户是不能被停用的,这意味着别人可以一遍又一遍地尝试这个用户的密码。尽量把它伪装成普通用户,比如改成Guesycludx。
4、创建一个陷阱用户
什么是陷阱用户?即创建一个名为“Administrator”的本地用户,把它的权限设置成最低,什么事也干不了的那种,并且加上一个超过10位的超级复杂密码。这样可以让那些 Hacker们忙上一段时间,借此发现它们的入侵企图。
5、把共享文件的权限从Everyone组改成授权用户
任何时候都不要把共享文件的用户设置成“Everyone”组,包括打印共享,默认的属性就是“Everyone”组的,一定不要忘了改。
6、开启用户策略
使用用户策略,分别设置复位用户锁定计数器时间为20分钟,用户锁定时间为20分钟,用户锁定阈值为3次。 (该项为可选)
7、不让系统显示上次登录的用户名
默认情况下,登录对话框中会显示上次登录的用户名。这使得别人可以很容易地得到系统的一些用户名,进而做密码猜测。修改注册表可以不让对话框里显示上次登录的用户名。方法为:打开注册表编辑器并找到注册表“HKLM\Software\Microsoft\Windows T\CurrentVersion\Winlogon\Dont-DisplayLastUserName”,把REG_SZ的键值改成1。
密码安全设置
1、使用安全密码
一些公司的管理员创建账号的时候往往用公司名、计算机名做用户名,然后又把这些用户的密码设置得太简单,比如“welcome”等等。因此,要注意密码的复杂性,还要记住经常改密码。
2、设置屏幕保护密码
这是一个很简单也很有必要的操作。设置屏幕保护密码也是防止内部人员破坏服务器的一个屏障。
3、开启密码策略
注意应用密码策略,如启用密码复杂性要求,设置密码长度最小值为6位 ,设置强制密码历史为5次,时间为42天。
4、考虑使用智能卡来代替密码
对于密码,总是使安全管理员进退两难,密码设置简单容易受到黑客的攻击,密码设置复杂又容易忘记。如果条件允许,用智能卡来代替复杂的密码是一个很好的解决方法。
三、系统权限的设置
1、磁盘权限
  系统盘及所有磁盘只给 Administrators 组和 SYSTEM 的完全控制权限
  系统盘\Documents and Settings 目录只给 Administrators 组和 SYSTEM 的完全控制权限
  系统盘\Documents and Settings\All Users 目录只给 Administrators 组和 SYSTEM 的完全控制权限
  系统盘\Windows\System32\cacls.exe、cmd.exe、net.exe、net1.exe、ftp.exe、 tftp.exe、telnet.exe 、 netstat.exe、regedit.exe、at.exe、attrib.exe、format.com、del文件只给 Administrators 组和SYSTEM 的完全 控制权限
另将\System32\cmd.exe、format.com、ftp.exe转移到其他目录或更名
  Documents and Settings下所有些目录都设置只给adinistrators权限。并且要一个一个目录查看,包括下面的所有子目录。
删除c:\inetpub目录

2、本地安全策略设置
  开始菜单?>管理工具?>本地安全策略
  A、本地策略??>审核策略
  审核策略更改   成功 失败  
  审核登录事件   成功 失败
  审核对象访问      失败
  审核过程跟踪   无审核
  审核目录服务访问    失败
  审核特权使用      失败
  审核系统事件   成功 失败
  审核账户登录事件 成功 失败
  审核账户管理   成功 失败

  B、本地策略??>用户权限分配
  关闭系统:只有Administrators组、其它全部删除。
  通过终端服务允许登陆:只加入Administrators,Remote Desktop Users组,其他全部删除

  C、本地策略??>安全选项
  交互式登陆:不显示上次的用户名       启用
  网络访问:不允许SAM帐户和共享的匿名枚举  启用
  网络访问:不允许为网络身份验证储存凭证   启用
  网络访问:可匿名访问的共享         全部删除
  网络访问:可匿名访问的命          全部删除
  网络访问:可远程访问的注册表路径      全部删除
  网络访问:可远程访问的注册表路径和子路径  全部删除
  帐户:重命名来宾帐户            重命名一个帐户
  帐户:重命名系统管理员帐户         重命名一个帐户

3、禁用不必要的服务 开始-运行-services.msc
TCP/IPNetBIOS Helper提供 TCP/IP 服务上的 NetBIOS 和网络上客户端的 NetBIOS 名称解析的支持而使用户能够共享
文件、打印和登录到网络
Server支持此计算机通过网络的文件、打印、和命名管道共享
  Computer Browser 维护网络上计算机的最新列表以及提供这个列表
Task scheduler 允许程序在指定时间运行
Messenger 传输客户端和服务器之间的 NET SEND 和 警报器服务消息
  Distributed File System: 局域网管理共享文件,不需要可禁用
  Distributed linktracking client:用于局域网更新连接信息,不需要可禁用
  Error reporting service:禁止发送错误报告
  Microsoft Serch:提供快速的单词搜索,不需要可禁用
  NTLMSecuritysupportprovide:telnet服务和Microsoft Serch用的,不需要可禁用
  PrintSpooler:如果没有打印机可禁用
  Remote Registry:禁止远程修改注册表
  Remote Desktop Help Session Manager:禁止远程协助
Workstation 关闭的话远程NET命令列不出用户组
  以上是在Windows Server 2003 系统上面默认启动的服务中禁用的,默认禁用的服务如没特别需要的话不要启动。
4、修改注册表
修改注册表,让系统更强壮
1、隐藏重要文件/目录可以修改注册表实现完全隐藏
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ Current-Version\Explorer\Advanced\Folder\Hi-dden\SHOWALL”,鼠标右击 “CheckedValue”,选择修改,把数值由1改为0

2、防止SYN洪水攻击
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
新建DWORD值,名为SynAttackProtect,值为2
新建EnablePMTUDiscovery REG_DWORD 0
新建NoNameReleaseOnDemand REG_DWORD 1
新建EnableDeadGWDetect REG_DWORD 0
新建KeepAliveTime REG_DWORD 300,000
新建PerformRouterDiscovery REG_DWORD 0
新建EnableICMPRedirects REG_DWORD 0

3. 禁止响应ICMP路由通告报文
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\interface
新建DWORD值,名为PerformRouterDiscovery 值为0

4. 防止ICMP重定向报文的攻击
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
将EnableICMPRedirects 值设为0

5. 不支持IGMP协议
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
新建DWORD值,名为IGMPLevel 值为0
6、禁止IPC空连接:
cracker可以利用net use命令建立空连接,进而入侵,还有net view,nbtstat这些都是基于空连接的,禁止空连接就好了。
Local_Machine\System\CurrentControlSet\Control\LSA-RestrictAnonymous 把这个值改成”1”即可。

7、更改TTL值
cracker可以根据ping回的TTL值来大致判断你的操作系统,如:
TTL=107(WINNT);
TTL=108(win2000);
TTL=127或128(win9x);
TTL=240或241(linux);
TTL=252(solaris);
TTL=240(Irix);
实际上你可以自己改的:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip \Parameters:DefaultTTL REG_DWORD 0-0xff(0-255 十进制,默认值128)改成一个莫名其妙的数字如258,起码让那些小菜鸟晕上半天,就此放弃入侵你也不一定哦

8. 删除默认共享
有人问过我一开机就共享所有盘,改回来以后,重启又变成了共享是怎么回事,这是2K为管理而设置的默认共享,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer \Parameters:AutoShareServer类型是REG_DWORD把值改为0即可

9. 禁止建立空连接
默认情况下,任何用户通过通过空连接连上服务器,进而枚举出帐号,猜测密码。我们可以通过修改注册表来禁止建立空连接:
Local_Machine\System\CurrentControlSet\Control\LSA-RestrictAnonymous 的值改成”1”即可。

10、建立一个记事本,填上以下代码。保存为*.bat并加到启动项目中
net share c$ /del
net share d$ /del
net share e$ /del
net share f$ /del
net share ipc$ /del
net share admin$ /del

5、IIS站点设置:
1、将IIS目录&数据与系统磁盘分开,保存在专用磁盘空间内。
2、启用父级路径
3、在IIS管理器中删除必须之外的任何没有用到的映射(保留asp等必要映射即可)
4、在IIS中将HTTP404 Object Not Found出错页面通过URL重定向到一个定制HTM文件
5、Web站点权限设定(建议)
读 允许
写 不允许
脚本源访问 不允许
目录浏览 建议关闭
日志访问 建议关闭
索引资源 建议关闭
执行 推荐选择 “仅限于脚本”
6、建议使用W3C扩充日志文件格式,每天记录客户IP地址,用户名,服务器端口,方法,URI字根,HTTP状态,用户代理,而且每天均要审查日志。(最好不要使用缺省的目录,建议更换一个记日志的路径,同时设置日志的访问权限,只允许管理员和system为Full Control)。
7、程序安全:
1) 涉及用户名与口令的程序最好封装在服务器端,尽量少的在ASP文件里出现,涉及到与数据库连接地用户名与口令应给予最小的权限;
2) 需要经过验证的ASP页面,可跟踪上一个页面的文件名,只有从上一页面转进来的会话才能读取这个页面。
3) 防止ASP主页.inc文件泄露问题;
4) 防止UE等编辑器生成some.asp.bak文件泄露问题。

6、IIS权限设置的思路
?要为每个独立的要保护的个体(比如一个网站或者一个虚拟目录)创建一个系统用户,让这个站点在系统中具有惟一的可以设置权限的身份。
?在IIS的【站点属性或者虚拟目录属性→目录安全性→匿名访问和验证控制→编辑→匿名访问→编辑】填写刚刚创建的那个用户名。
?设置所有的分区禁止这个用户访问,而刚才这个站点的主目录对应的那个文件夹设置允许这个用户访问(要去掉继承父权限,并且要加上超管组和SYSTEM组)。

7、卸载最不安全的组件
最简单的办法是直接卸载后删除相应的程序文件。将下面的代码保存为一个.BAT文件,( 以下均以 WIN2000 为例,如果使用2003,则系统文件夹应该是 C:\WINDOWS\ )
regsvr32/u C:\WINDOWS\System32\wshom.ocx
del C:\WINDOWS\System32\wshom.ocx
regsvr32/u C:\WINDOWS\system32\shell32.dll
del C:\WINNT\WINDOWS\shell32.dll

然后运行一下,WScript.Shell, Shell.application, WScript.Network就会被卸载了。可能会提示无法删除文件,不用管它,重启一下服务器,你会发现这三个都提示“×安全”了。

检测工具:检测工具


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,IIS为WAP已经提供了支持,只是不是默认,需要手动添加MIME映射。
操作方法:
IIS--网站属性-->http 头-->MIME映射 -->文件类型 -->新类型 添加:
.wml text/vnd.wap.wml
.wmlc application/vnd.wap.wmlc
.wmls text/vnd.wap.wmlscript
.wmlsc application/vnd.wap.wmlscriptc
.wbmp image/vnd.wap.wbmp

2,IE,FireFox不支持WAP页面的展示, 打开页面时会提示保存或显示源码
对于FireFox可以利用安装插件解决:分别是:wmlbrowser、XHTML Mobile Profile以及User Agent Switcher
对于IE:
将如下代码用记事本保存为.reg注册表文件

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\MIME\Database\Content Type\text/vnd.wap.wml]
“CLSID”=”{25336920-03F9-11cf-8FD0-00AA00686F13}”

双击运行您保存好的.reg注册表文件即可


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,《国富论》作者亚当.斯密主张组织和社会将从劳动分工中获取经济利益,即将工作分解为狭窄的、重复性的任务。这样,将会大大提高生产率,因为它提高了工人的技能和灵巧性,节约了浪费在任务转换上的时间。典型的应用是流水线的引入。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,管理者:同他人一起工作或通过协调他人活动的方式实现组织目标的人。他人指:手下员工及各相关部门同事。

2,管理:是同他人一起或通过别人使工作活动完成得更有效率和更有效果的过程。

3,管理过程是指一组进行中的决策与行动,包括:计划,组织,领导和控制。

4,效率:指以最少的投入获得最大的产出。

5,管理者需要的三种技能:技术技能,人际技能和概念技能(概念技能是指综观全局、认清为什么要做某事的能力)。

6,组织:是对人员的一种精心安排,以实现某种特定的目的。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
1,生成图片类:
using System;
using System.Configuration;
using Share.Data;
using System.Data.SqlClient;
using System.Text;
using System.Data;
using Share.Utility;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
namespace Web.Class.Constant
{
    /// <summary>
    /// Summary description for HelpConstant.
    /// </summary>
    public class VerifyCode : System.Web.UI.Page
    {
        private static string codenum;
        public static string CodeNum
        {
            get { return codenum; }
            set { codenum = value; }
        }
        public static string strRandom(int Ia, int Ib)
        {
            Random rd = new Random(unchecked((int)DateTime.Now.Ticks));
            object i = rd.Next(Ia, Ib);
            return i.ToString();
        }
        public static byte[] GetCode(int Ia, int Ib)
        {
            CodeNum = strRandom(Ia,Ib);
            Bitmap bm = new Bitmap(50, 15, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            Font f = new Font("Lucida Sans Unicode", 9, FontStyle.Bold);
            Graphics g = Graphics.FromImage(bm);
            Rectangle newRect = new Rectangle(0, 0, 50, 16);
            g.FillRectangle(new SolidBrush(Color.WhiteSmoke), newRect);
            g.DrawString(codenum, f, new SolidBrush(Color.Red), 1, -1);
            MemoryStream mStream = new MemoryStream();
            bm.Save(mStream, ImageFormat.Gif);
            g.Dispose();
            bm.Dispose();
            
            return mStream != null?mStream.ToArray():null;

        }

    }
}

2,输出:
        Response.ClearContent();
        Response.ContentType = "image/GIF";
        Response.BinaryWrite(VerifyCode.GetCode(10000, 99999));
        Response.End();
3,前台引用:
4,前台录入的与VerifyCode.CodeNum比较即可


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
数组:0 1 2 3 4 5
取数据:
方法1:取出一个删除一个,但删除很费时,性能并不高
方法2:取出一个,用数组最后一位填充,相当于将最后一位前移,同时将最后一排除在下次取数据之外即可。
&lt;a href="http://www.cnblogs.com/eaglet/archive/2011/01/17/1937083.html"&gt;不重复随机数列生成算法&lt;/a&gt;

新方法:

下面的时间复杂度很小
public static int[] GetRandomSequence2(int total)

{

int[] sequence = new int[total];

int[] output = new int[total];

for (int i = 0; i &amp;lt; total; i++)

{

sequence[i] = i;

}

Random random = new Random();

int end = total - 1;

for (int i = 0; i &amp;lt; total; i++)

{

int num = random.Next(0, end + 1);

output[i] = sequence[num];

sequence[num] = sequence[end];

end--;&nbsp; //缩小范围,将最后一位前移,并排除最后一位。

}

return output;

}

老方法:时间复杂度为n2
public static int[] GetRandomSequence0(int total)

{

int[] hashtable = new int[total];

int[] output = new int[total];

Random random = new Random();

for (int i = 0; i &amp;lt; total; i++)

{

int num = random.Next(0, total);

while (hashtable[num] &amp;gt; 0)

{

num = random.Next(0, total);

}

output[i] = num;

hashtable[num] = 1;

}

return output;

}


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
1,分区作用:将数据分放到多个物理磁盘上,利用并行,多个磁盘同时吞吐以提升IO能力,同时每个分区数据量小,也减少了数据的扫描,提升了命中速度。实际上表逻辑上并未拆分,只是分散存储于不同的物理文件上,相当于把一张表大数据无限极细化到多张表上,多个驱动上,但是访问时却还是一样的访问,因为本身并未新建任何表。
注:即使放到一块磁盘上,因每个分区数据量小,扫描范围减少,也能提高速度。
表分区方法:1,按时间分区:好处,查询速度快。坏处:因当前数据一直写到一块分区上,故写不快。
                       2,HASH分区:数据均匀的分散到各分区,好处:因当前数据写到不同分区,故写快。但在查询方面,要联合多个分区,故查询不快。
注:分区分为硬件与软件分区,此页是软件分区。硬件分区指用磁盘阵列的方式分区,硬件负责将数据将到不同磁盘上,查询与写入速度都会提高。
操作:指定数据要分区的位置-创建文件组及对应文件, 数据以何种规则适移到分区上-创建分区函数, 进行数据迁移。

操作:指定数据要分区的位置-创建文件组及对应文件, 数据以何种规则适移到分区上-创建分区函数, 进行数据迁移。
步骤:
/*1,指定数据存放位置:增加文件组,并指定文件存放位置*/
ALTER DATABASE BRM_LVJIAN
ADD FILEGROUP [gf_bdorder_50]
ALTER DATABASE BRM_LVJIAN
ADD FILEGROUP [gf_bdorder_100]
ALTER DATABASE BRM_LVJIAN
ADD FILEGROUP [gf_bdorder_150]

ALTER DATABASE BRM_LVJIAN
ADD FILE ( NAME = N'gf_bdorder_50',
FILENAME = N'g:\Mssql_Filegroup\bdorder_50.ndf' , SIZE = 300MB , FILEGROWTH = 10% )
TO FILEGROUP [gf_bdorder_50]

ALTER DATABASE BRM_LVJIAN
ADD FILE ( NAME = N'gf_bdorder_100',
FILENAME = N'I:\Mssql_Filegroup\bdorder_100.ndf' , SIZE = 300MB , FILEGROWTH = 10% )
TO FILEGROUP [gf_bdorder_100]

ALTER DATABASE BRM_LVJIAN
ADD FILE ( NAME = N'gf_bdorder_150',
FILENAME = N'I:\Mssql_Filegroup\bdorder_150.ndf' , SIZE = 300MB , FILEGROWTH = 10% )
TO FILEGROUP [gf_bdorder_150]

/*2,指定数据如何存放:创建分区函数*/

--LEFT,RIGHT指定"="是在最左边还是右边
--LEFT: &lt;=1, 1&lt;10&lt;=20, &gt;20
--RIGHT: &lt;1,1&lt;=10&lt;20, &gt;=20
CREATE PARTITION FUNCTION [partitionFunc_bdOrder] (int)
AS RANGE LEFT FOR VALUES ('500000','1000000')

select max(id) from bdorder

/*3,数据的迁移,应用分区位置与函数,为了方便,将二者合二唯一,提出分区架构的概念*/
CREATE PARTITION SCHEME [partitionScheme_bdOrder]
AS PARTITION [partitionFunc_bdOrder]
TO ([PRIMARY],gf_bdorder_50,gf_bdorder_100,gf_bdorder_150)

--数据迁移到分区
ALTER TABLE dbo.bdOrder DROP CONSTRAINT PK_BDOrder
ALTER TABLE  dbo.bdOrder add CONSTRAINT PK_BDOrder PRIMARY KEY CLUSTERED (ID)
ON [partitionScheme_bdOrder](ID)

--恢复成原来的默认状态,因原来的分区架构是<span style="color: #ff0000;">PRIMARY</span>,故修改表即可,如下:
ALTER TABLE dbo.bdorder DROP CONSTRAINT PK_BDOrder
ALTER TABLE  dbo.bdorder add CONSTRAINT PK_BDOrder PRIMARY KEY CLUSTERED (ID)
ON [PRIMARY]

/*查询*/
--分区
SELECT * FROM SYS.PARTITIONS WHERE OBJECT_ID = OBJECT_ID('dbo.bdOrder')

--数据所在分区
SELECT  $PARTITION.[partitionFunc_bdOrder](1000000)

SELECT top 20 id,orderno,orderdate,$PARTITION.[partitionFunc_bdOrder](id)  FROM bdOrder
ORDER BY newid()

--数据分布

SELECT $PARTITION.partitionFunc_bdOrder(id) AS Partition_num,
MIN(Id) AS Min_value,MAX(Id) AS Max_value,COUNT(1) AS Record_num
FROM dbo.[bdorder]
GROUP BY $PARTITION.partitionFunc_bdOrder(id)
ORDER BY $PARTITION.partitionFunc_bdOrder(id)

select * from
sys.partition_range_values

/*若数据量增大,需要增加分区,扩大范围,操作如下*/
操作方法:增加分区,增加范围

ALTER DATABASE [D] ADD FILEGROUP [GF2]
ALTER DATABASE [WSBOOK] ADD FILE ( NAME = N'GF2', FILENAME = N'E:\E\E1\DGF2.ndf' , SIZE = 5MB , FILEGROWTH = 10% )
TO FILEGROUP [GF2]

为架构添加范围
ALTER PARTITION SCHEME [D_PARTITION_SHEME]
NEXT USED GF2
这句话就是让下一个分区使用和现在已经存在的分区GF2分区中,

2.添加一个范围
ALTER PARTITION FUNCTION [D_PARTITIONFUNC]()
SPLIT RANGE ('700000')

可以合并一个范围,其实就是<span style="color: #ff0000;">删除分区</span>,如MERGE RANGE(要删除的原分区界点)

ALTER PARTITION FUNCTION [D_PARTITIONFUNC]() MERGE RANGE ('400000')
3.查询分区分布

SELECT * FROM SYS.PARTITIONS WHERE OBJECT_ID = OBJECT_ID('dbo.B')

4.删除分区
DROP PARTITION SCHEME [D_PARTITION_SHEME]
DROP PARTITION FUNCTION [D_PARTITIONFUNC]