创意SQL语句(2)

----------------------------------

1.把某个字段重新生气序列(从1到n):
DECLARE @i int
Set @i = 0
Update Table1 Set @i = @i + 1,Field1 = @i

2.按成绩排名次
Update 成绩表
Set a.名次 = (
Select Count(*) + 1
From 成绩表 b
Where a.总成绩 < b.总成绩
)
From 成绩表 a

3.查询外部数据库
Select a.*
From OpenRowSet('Microsoft.Jet.OLEDB.4.0','c:/test.mdb';'admin';'',Table1) a

4.查询Excel文件
Select *
From OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="c:/test.xls";User ID=Admin;Password=;Extended properties=Excel 8.0')...Sheet1$

5.在查询中指定排序规则
Select * From Table1 order By Field1 COLLATE Chinese_PRC_BIN
为什么要指定排序规则呢?参见:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1633985
例,检查数据库中的Pub_Users表中是否存在指定的用户:
Select Count(*) From Pub_Users Where [UserName]='admin' And [PassWord]='aaa' COLLATE Chinese_PRC_BIN
默认比较是不区分大小写的,如果不加COLLATE Chinese_PRC_BIN,那么密码aaa与AAA是等效的,这当然与实际不符.注意的是,每个条件都要指定排序规则,上例中用户名就不区分大小写.


6.Order By的一个小技巧
order By可以指定列序而不用指定列名,在下面的例子里说明它的用处(注意,第三列未指定别名)
Select a.ID,a.Name,(Select Count(*) From TableB b Where a.ID=b.PID) From TableA a order By 3

 

2 ? Microsoft SQL Server 2005 Product Guide
2007-04-22T11:13:05+08:00 | rxl

推荐给学生阅读的文章,较为详细的说明了Microsoft SQL Server 2005方方面面,具有很好的学习价值,对于了解和学习Microsoft SQL Server 2005有很好的借鉴意义。

前期提供给盛浩峰和张飞进行阅读,希望他们拿出一份翻译稿件来,但是一直没有收到成效。但是他们做了一些标注,还是直接借鉴的,尽管没有看完。

盛浩峰阅读批示后的文章

张飞阅读批示后的文章


3 ? sql server 中【农历】计算方法
2007-02-02T08:00:00+08:00 | rxl

最近几天,一时兴起,开始研究农历,趁着元旦放假,把它给做出来了!拿给大家看看,我自己测试觉得没有问题,请大家看看!

1、建一表,放初始化资料
因为农历的日期,是由天文学家推算出来的,到现在只有到2049年的,以后的有了还可以加入!
Create TABLE SolarData
(
    yearId int not null,
    data char(7) not null,
    dataInt int not null
)

--插入数据
Insert INTO
SolarData Select 1900,'0x04bd8',19416 UNION ALL Select 1901,'0x04ae0',19168
UNION ALL Select 1902,'0x0a570',42352 UNION ALL Select 1903,'0x054d5',21717
UNION ALL Select 1904,'0x0d260',53856 UNION ALL Select 1905,'0x0d950',55632
UNION ALL Select 1906,'0x16554',91476 UNION ALL Select 1907,'0x056a0',22176
UNION ALL Select 1908,'0x09ad0',39632 UNION ALL Select 1909,'0x055d2',21970
UNION ALL Select 1910,'0x04ae0',19168 UNION ALL Select 1911,'0x0a5b6',42422
UNION ALL Select 1912,'0x0a4d0',42192 UNION ALL Select 1913,'0x0d250',53840
UNION ALL Select 1914,'0x1d255',119381 UNION ALL Select 1915,'0x0b540',46400
UNION ALL Select 1916,'0x0d6a0',54944 UNION ALL Select 1917,'0x0ada2',44450
UNION ALL Select 1918,'0x095b0',38320 UNION ALL Select 1919,'0x14977',84343
UNION ALL Select 1920,'0x04970',18800 UNION ALL Select 1921,'0x0a4b0',42160
UNION ALL Select 1922,'0x0b4b5',46261 UNION ALL Select 1923,'0x06a50',27216
UNION ALL Select 1924,'0x06d40',27968 UNION ALL Select 1925,'0x1ab54',109396
UNION ALL Select 1926,'0x02b60',11104 UNION ALL Select 1927,'0x09570',38256
UNION ALL Select 1928,'0x052f2',21234 UNION ALL Select 1929,'0x04970',18800
UNION ALL Select 1930,'0x06566',25958 UNION ALL Select 1931,'0x0d4a0',54432
UNION ALL Select 1932,'0x0ea50',59984 UNION ALL Select 1933,'0x06e95',28309
UNION ALL Select 1934,'0x05ad0',23248 UNION ALL Select 1935,'0x02b60',11104
UNION ALL Select 1936,'0x186e3',100067 UNION ALL Select 1937,'0x092e0',37600
UNION ALL Select 1938,'0x1c8d7',116951 UNION ALL Select 1939,'0x0c950',51536
UNION ALL Select 1940,'0x0d4a0',54432 UNION ALL Select 1941,'0x1d8a6',120998
UNION ALL Select 1942,'0x0b550',46416 UNION ALL Select 1943,'0x056a0',22176
UNION ALL Select 1944,'0x1a5b4',107956 UNION ALL Select 1945,'0x025d0',9680
UNION ALL Select 1946,'0x092d0',37584 UNION ALL Select 1947,'0x0d2b2',53938
UNION ALL Select 1948,'0x0a950',43344 UNION ALL Select 1949,'0x0b557',46423
UNION ALL Select 1950,'0x06ca0',27808 UNION ALL Select 1951,'0x0b550',46416
UNION ALL Select 1952,'0x15355',86869 UNION ALL Select 1953,'0x04da0',19872
UNION ALL Select 1954,'0x0a5d0',42448 UNION ALL Select 1955,'0x14573',83315
UNION ALL Select 1956,'0x052d0',21200 UNION ALL Select 1957,'0x0a9a8',43432
UNION ALL Select 1958,'0x0e950',59728 UNION ALL Select 1959,'0x06aa0',27296
UNION ALL Select 1960,'0x0aea6',44710 UNION ALL Select 1961,'0x0ab50',43856
UNION ALL Select 1962,'0x04b60',19296 UNION ALL Select 1963,'0x0aae4',43748
UNION ALL Select 1964,'0x0a570',42352 UNION ALL Select 1965,'0x05260',21088
UNION ALL Select 1966,'0x0f263',62051 UNION ALL Select 1967,'0x0d950',55632
UNION ALL Select 1968,'0x05b57',23383 UNION ALL Select 1969,'0x056a0',22176
UNION ALL Select 1970,'0x096d0',38608 UNION ALL Select 1971,'0x04dd5',19925
UNION ALL Select 1972,'0x04ad0',19152 UNION ALL Select 1973,'0x0a4d0',42192
UNION ALL Select 1974,'0x0d4d4',54484 UNION ALL Select 1975,'0x0d250',53840
UNION ALL Select 1976,'0x0d558',54616 UNION ALL Select 1977,'0x0b540',46400
UNION ALL Select 1978,'0x0b5a0',46496 UNION ALL Select 1979,'0x195a6',103846
UNION ALL Select 1980,'0x095b0',38320 UNION ALL Select 1981,'0x049b0',18864
UNION ALL Select 1982,'0x0a974',43380 UNION ALL Select 1983,'0x0a4b0',42160
UNION ALL Select 1984,'0x0b27a',45690 UNION ALL Select 1985,'0x06a50',27216
UNION ALL Select 1986,'0x06d40',27968 UNION ALL Select 1987,'0x0af46',44870
UNION ALL Select 1988,'0x0ab60',43872 UNION ALL Select 1989,'0x09570',38256
UNION ALL Select 1990,'0x04af5',19189 UNION ALL Select 1991,'0x04970',18800
UNION ALL Select 1992,'0x064b0',25776 UNION ALL Select 1993,'0x074a3',29859
UNION ALL Select 1994,'0x0ea50',59984 UNION ALL Select 1995,'0x06b58',27480
UNION ALL Select 1996,'0x055c0',21952 UNION ALL Select 1997,'0x0ab60',43872
UNION ALL Select 1998,'0x096d5',38613 UNION ALL Select 1999,'0x092e0',37600
UNION ALL Select 2000,'0x0c960',51552 UNION ALL Select 2001,'0x0d954',55636
UNION ALL Select 2002,'0x0d4a0',54432 UNION ALL Select 2003,'0x0da50',55888
UNION ALL Select 2004,'0x07552',30034 UNION ALL Select 2005,'0x056a0',22176
UNION ALL Select 2006,'0x0abb7',43959 UNION ALL Select 2007,'0x025d0',9680
UNION ALL Select 2008,'0x092d0',37584 UNION ALL Select 2009,'0x0cab5',51893
UNION ALL Select 2010,'0x0a950',43344 UNION ALL Select 2011,'0x0b4a0',46240
UNION ALL Select 2012,'0x0baa4',47780 UNION ALL Select 2013,'0x0ad50',44368
UNION ALL Select 2014,'0x055d9',21977 UNION ALL Select 2015,'0x04ba0',19360
UNION ALL Select 2016,'0x0a5b0',42416 UNION ALL Select 2017,'0x15176',86390
UNION ALL Select 2018,'0x052b0',21168 UNION ALL Select 2019,'0x0a930',43312
UNION ALL Select 2020,'0x07954',31060 UNION ALL Select 2021,'0x06aa0',27296
UNION ALL Select 2022,'0x0ad50',44368 UNION ALL Select 2023,'0x05b52',23378
UNION ALL Select 2024,'0x04b60',19296 UNION ALL Select 2025,'0x0a6e6',42726
UNION ALL Select 2026,'0x0a4e0',42208 UNION ALL Select 2027,'0x0d260',53856
UNION ALL Select 2028,'0x0ea65',60005 UNION ALL Select 2029,'0x0d530',54576
UNION ALL Select 2030,'0x05aa0',23200 UNION ALL Select 2031,'0x076a3',30371
UNION ALL Select 2032,'0x096d0',38608 UNION ALL Select 2033,'0x04bd7',19415
UNION ALL Select 2034,'0x04ad0',19152 UNION ALL Select 2035,'0x0a4d0',42192
UNION ALL Select 2036,'0x1d0b6',118966 UNION ALL Select 2037,'0x0d250',53840
UNION ALL Select 2038,'0x0d520',54560 UNION ALL Select 2039,'0x0dd45',56645
UNION ALL Select 2040,'0x0b5a0',46496 UNION ALL Select 2041,'0x056d0',22224
UNION ALL Select 2042,'0x055b2',21938 UNION ALL Select 2043,'0x049b0',18864
UNION ALL Select 2044,'0x0a577',42359 UNION ALL Select 2045,'0x0a4b0',42160
UNION ALL Select 2046,'0x0aa50',43600 UNION ALL Select 2047,'0x1b255',111189
UNION ALL Select 2048,'0x06d20',27936 UNION ALL Select 2049,'0x0ada0',44448

Create FUNCTION fn_GetLunar(@solarDay DATETIME)   
RETURNS varchar(10)--datetime 
 
AS   
BEGIN   
  DECLARE @solData int   
  DECLARE @offset int   
  DECLARE @iLunar int   
  DECLARE @i INT    
  DECLARE @j INT    
  DECLARE @yDays int   
  DECLARE @mDays int   
  DECLARE @mLeap int   
  DECLARE @mLeapNum int   
  DECLARE @bLeap smallint   
  DECLARE @temp int   
   
  DECLARE @YEAR INT    
  DECLARE @MONTH INT   
  DECLARE @DAY INT   
     
  DECLARE @OUTPUTDATE varchar(10) --DATETIME   
 
  --保证传进来的日期是不带时间   
  SET @solarDay=cast(@solarDay AS char(10))   
  SET @offset=CAST(@solarDay-'1900-01-30' AS INT) 
 
   
  --确定农历年开始   
  SET @i=1900   
  --SET @offset=@solData   
  WHILE @i<2050 AND @offset>0   
  BEGIN   
    SET @yDays=348   
    SET @mLeapNum=0   
    Select @iLunar=dataInt FROM SolarData Where
yearId=@i   
   
    --传回农历年的总天数   
    SET @j=32768   
    WHILE @j>8   
    BEGIN   
      IF @iLunar & @j >0   
        SET @yDays=@yDays+1   
      SET @j=@j/2   
    END   
   
    --传回农历年闰哪个月 1-12 , 没闰传回 0   
    SET @mLeap = @iLunar & 15   
   
    --传回农历年闰月的天数 ,加在年的总天数上   
    IF @mLeap > 0   
    BEGIN   
      IF @iLunar & 65536 > 0   
        SET @mLeapNum=30   
      ELSE    
        SET @mLeapNum=29   
   
      SET @yDays=@yDays+@mLeapNum   
    END   
       
    SET @offset=@offset-@yDays   
    SET @i=@i+1   
  END   
     
  IF @offset <= 0   
  BEGIN   
    SET @offset=@offset+@yDays   
    SET @i=@i-1   
  END   
  --确定农历年结束     
  SET @YEAR=@i   
 
  --确定农历月开始   
  SET @i = 1   
  Select @iLunar=dataInt FROM SolarData Where
yearId=@YEAR 
 
  --判断那个月是润月   
  SET @mLeap = @iLunar & 15   
  SET @bLeap = 0  
 
  WHILE @i < 13 AND @offset > 0   
  BEGIN   
    --判断润月   
    SET @mDays=0   
    IF (@mLeap > 0 AND @i = (@mLeap+1) AND @bLeap=0)   
    BEGIN--是润月   
      SET @i=@i-1   
      SET @bLeap=1   
      --传回农历年闰月的天数   
      IF @iLunar & 65536 > 0   
        SET @mDays = 30   
      ELSE    
        SET @mDays = 29   
    END   
    ELSE   
    --不是润月   
    BEGIN   
      SET @j=1   
      SET @temp = 65536    
      WHILE @j<
=@i   
      BEGIN   
        SET @temp=@temp/2   
        SET @j=@j+1   
      END   
   
      IF @iLunar & @temp > 0   
        SET @mDays = 30   
      ELSE   
        SET @mDays = 29   
    END   
     
    --解除闰月 
    IF @bLeap=1 AND @i= (@mLeap+1) 
      SET @bLeap=0 
 
    SET @offset=@offset-@mDays   
    SET @i=@i+1   
  END   
   
  IF @offset <= 0   
  BEGIN   
    SET @offset=@offset+@mDays   
    SET @i=@i-1   
  END   
 
  --确定农历月结束     
  SET @MONTH=@i 
   
  --确定农历日结束     
  SET @DAY=@offset   
   
--  SET @OUTPUTDATE=CAST((CAST(@YEAR AS VARCHAR(4))+'-'+CAST(@MONTH AS VARCHAR(2))+'-'+CAST(@DAY AS VARCHAR(2))) AS

DATETIME)   
  SET @OUTPUTDATE=CAST(@YEAR AS VARCHAR(4))+right('00'+CAST(@MONTH AS VARCHAR(2)),2)+right('00'+CAST(@DAY AS VARCHAR

(2)),2)   
  RETURN @OUTPUTDATE 
END  
GO

--调用方法
select dbo.fn_GetLunar(getdate())

--删除测试
drop function fn_GetLunar
drop table SolarData

 

4 ? SQL查询语句精华使用简要
2007-02-02T07:58:18+08:00 | rxl

一、 简单查询
  简单的Transact-SQL查询只包括选择列表、FROM子句和Where子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。
  例如,下面的语句查询testtable表中姓名为"张三"的nickname字段和email字段。

   Select nickname,email
  FROM testtable
  Where name='张三'

  (一) 选择列表

  选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。

  1、选择所有列

  例如,下面语句显示testtable表中所有列的数据:

   Select *
  FROM testtable

  2、选择部分列并指定它们的显示次序

  查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
  例如:

   Select nickname,email
  FROM testtable

  3、更改列标题

  在选择列表中,可重新指定列标题。定义格式为:
  列标题=列名
  列名 列标题
  如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:

   Select 昵称=nickname,电子邮件=email
  FROM testtable

  4、删除重复行

  Select语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在Select返回的结果集合中只保留一行。

  5、限制返回的行数

  使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
  例如:

   Select TOP 2 *
  FROM testtable
  Select TOP 20 PERCENT *
  FROM testtable

  (二)FROM子句

  FROM子句指定Select语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
  在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:

    Select username,citytable.cityid
  FROM usertable,citytable
  Where usertable.cityid=citytable.cityid

  在FROM子句中可用以下两种格式为表或视图指定别名:
  表名 as 别名
  表名 别名

  (二) FROM子句

  FROM子句指定Select语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
  在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:

   Select username,citytable.cityid
  FROM usertable,citytable
  Where usertable.cityid=citytable.cityid

  在FROM子句中可用以下两种格式为表或视图指定别名:
  表名 as 别名
  表名 别名
  例如上面语句可用表的别名格式表示为:

   Select username,b.cityid
  FROM usertable a,citytable b
  Where a.cityid=b.cityid

  Select不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。

  例如:

    Select a.au_fname+a.au_lname
  FROM authors a,titleauthor ta
  (Select title_id,title
  FROM titles
  Where ytd_sales>10000
  ) AS t
  Where a.au_id=ta.au_id
  AND ta.title_id=t.title_id

  此例中,将Select返回的结果集合给予一别名t,然后再从中检索数据。

(三) 使用Where子句设置查询条件

  Where子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据:

   Select *
  FROM usertable
  Where age>20

  Where子句可包括各种条件运算符:
  比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<
  范围运算符(表达式值是否在指定的范围):BETWEEN...AND...
  NOT BETWEEN...AND...
  列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2......)
  NOT IN (项1,项2......)
  模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE
  空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL
  逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR

  1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30
  2、列表运算符例:country IN ('Germany','China')
  3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。
  可使用以下通配字符:
  百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。
  下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。
  方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
  例如:
  限制以Publishing结尾,使用LIKE '%Publishing'
  限制以A开头:LIKE '[A]%'
  限制以A开头外:LIKE '[^A]%'

  4、空值判断符例Where age IS NULL

  5、逻辑运算符:优先级为NOT、AND、OR

  (四)查询结果排序

  使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为:
  ORDER BY {column_name [ASC|DESC]} [,...n]
  其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排
  序。
  例如:

    Select *
  FROM usertable
  ORDER BY age desc,userid ASC

  另外,可以根据表达式进行排序。

  二、 联合查询

  UNION运算符可以将两个或两个以上上Select语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:

    select_statement
  UNION [ALL] selectstatement
  [UNION [ALL] selectstatement][...n]

  其中selectstatement为待联合的Select查询语句。

  ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。

  联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

  在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。

  在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

  查询1 UNION (查询2 UNION 查询3)

  三、连接查询

  通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。

  在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。

  连接可以在Select 语句的FROM子句或Where子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与Where子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

  SQL-92标准所定义的FROM子句的连接语法格式为:

   FROM join_table join_type join_table
  [ON (join_condition)]

  其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。

  join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

  交叉连接(CROSS JOIN)没有Where 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

  连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

  无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:

   Select p1.pub_id,p2.pub_id,p1.pr_info
  FROM pub_info AS p1 INNER JOIN pub_info AS p2
  ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

  (一)内连接
  内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
  1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
  2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
  3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
  例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

   Select *
  FROM authors AS a INNER JOIN publishers AS p
  ON a.city=p.city
  又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
  Select a.*,p.pub_id,p.pub_name,p.country
  FROM authors AS a INNER JOIN publishers AS p
  ON a.city=p.city

  (二)外连接
  内连接时,返回查询结果集合中的仅是符合查询条件( Where 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。如下面使用左外连接将论坛内容和作者信息连接起来:

   Select a.*,b.* FROM luntan LEFT JOIN usertable as b
  ON a.username=b.username

  下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

    Select a.*,b.*
  FROM city as a FULL OUTER JOIN user as b
  ON a.username=b.username

  (三)交叉连接
  交叉连接不带Where 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。
   Select type,pub_name
  FROM titles CROSS JOIN publishers
  ORDER BY type

  转http://blog.chinaunix.net/u/22313/showart.php?id=214419


5 ? MS SQL 2005 安全设置
2006-02-02T19:07:54+08:00 | rxl

拿到MS SQL 2005还没有一天,总的来说,MS SQL 2005的安全性比SQL 2000要强上不少,不过默认设置还是有和原来一样的漏洞,下面我们来修改一下默认设置。

1、安装MSSQL时使用混合模式,当然SA密码最好不能为空,在SQL2005中,可以对SA这个超级用户名进行修改或删除。
use master
Alter LOGIN [sa] WITH NAME=[zxs] /*修改SA帐号*/
sp_password '111111','123456','sa' /*修改SA密码*/
使用以上命令可修改SA帐号,也可进行图形化的修改
使用安全的帐号策略。对SA或等同用户进行最强的保护,当然,包括使用一个非常强壮的密码,如下图

 

这里可以看到SQL 2005比SQL 2000 增强的地方了。

2、SQL的认证有Windows身份认证和混合身份认证。在2005中,登陆SQL可以使用indows身份认证和混合身份认证方便,如果不希望系统管理员接触数据库的话,可以在安全性==登录名是把系统帐号“BUILTIN/Administrators”删除。当然,还有别的多余的帐号也可一同禁止,只需要在帐号==属性==状态中把是否允许连接到数据库引擎改为拒绝,还有登录改为禁用即可,不过这样的坏处就是当你忘了SA的密码时,我也没办法帮你啦。

也可用命令sp_change_users_login 'report' 搜索一下独立的帐户再删除

3、管理扩展存储过程
删除不必要的存储过程,因为有些存储过程能很容易地被人利用起来提升权限或进行破坏。
如果你不需要扩展存储过程xp_cmdshell请把它去掉。xp_cmdshell根本就是一个大后门。

如果不需要请丢弃OLE自动存储过程(会造成管理器中的某些特征不能使用),这些过程包括如下:
sp_OACreate sp_OADestroy sp_OAGetErrorInfo sp_OAGetProperty
sp_OAMethod sp_OASetProperty sp_OAStop
去掉不需要的注册表访问的存储过程,注册表存储过程甚至能够读出操作系统管理员的密码来,如下:
xp_regaddmultistring xp_regdeletekey xp_regdeletevalue xp_regenumvalues
xp_regread xp_regremovemultistring xp_regwrite
还有一些其他的扩展存储过程,你也最好检查检查。
在处理存储过程的时候,请确认一下,避免造成对数据库或应用程序的伤害。运行以下SQL语句可删除所有危险的SP。

Drop PROCEDURE sp_makewebtask
exec master..sp_dropextendedproc xp_cmdshell /*命令行*/
exec master..sp_dropextendedproc xp_dirtree /*可以展开你需要了解的目录,获得所有目录深度*/
exec master..sp_dropextendedproc xp_fileexist /*用来确定一个文件是否存在*/
exec master..sp_dropextendedproc xp_getnetname /*可以获得服务器名称*/
exec master..sp_dropextendedproc xp_terminate_process
exec master..sp_dropextendedproc sp_oamethod
exec master..sp_dropextendedproc sp_oacreate
exec master..sp_dropextendedproc xp_regaddmultistring
exec master..sp_dropextendedproc xp_regdeletekey
exec master..sp_dropextendedproc xp_regdeletevalue
exec master..sp_dropextendedproc xp_regenumkeys
exec master..sp_dropextendedproc xp_regenumvalues
exec master..sp_dropextendedproc sp_add_job
exec master..sp_dropextendedproc sp_addtask
exec master..sp_dropextendedproc xp_regread
exec master..sp_dropextendedproc xp_regwrite
exec master..sp_dropextendedproc xp_readwebtask
exec master..sp_dropextendedproc xp_makewebtask
exec master..sp_dropextendedproc xp_regremovemultistring
exec master..sp_dropextendedproc sp_OACreate
Drop PROCEDURE sp_addextendedproc

5、SQL Server 2005本身就具有加密功能,完全集成了一个密钥管理架构。不过,最好远程网络连接时使用SSL来加密协议,这就需要一个证书来支持。这里搜索一下就会有很多这方面的说明,就不多说了。

6、使用IPSec策略阻止所有地址访问本机的TCP1433与UDP1434端口,也可对TCP1433端口进行修改,但是在SQL2005中,可以使用TCP动态端口,(在SQL Server Configuration Manager的SQL 2005网络配置中)如下图


这是SQL帮助中的说明
如果某个 SQL Server 实例已配置为侦听动态端口,则在启动时,该实例将检查操作系统中的可用端口,并为该端口打开一个端点。传入连接必须指定要连接的端口号。由于每次启动 SQL Server 时端口号都可能会改变,因此 SQL Server 提供 SQL Server 浏览器服务器,来监视端口并将传入连接指向该实例的当前端口。
也可对每个IP进行侦听


这是SQL帮助中的说明
指定 SQL Server 是否侦听所有绑定到计算机网卡的 IP 地址。如果设置为“否”,则使用每个 IP 地址各自的属性对话框对各个 IP 地址进行配置。如果设置为“是”,则 IPAll 属性框的设置将应用于所有 IP 地址。默认值为“是”。

当然你也可以下面的SQL Native Client 配置中新建一别名来指定你的SQL服务器和端口,也可在服务器属性==连接==远程服务器链接==把允许远程链接到本服务器的勾去掉
关闭远程链接命令行为
EXEC sys.sp_configure N'remote access', N'0'

8、对远程网络连接进行IP限制,SQL Server 2005如同SQL 2000一样没有提供网络连接的安全解决办法,但是Windows 2K以上系统了提供了IPSec策略。对远程网络连接的IP进行限制,只保证需要的IP能够访问,拒绝其他 IP进行的端口连接,把安全威胁降到最低。

9、在服务器的属性安全中,启用登录审核中的失败与成功登陆,启用C2审核跟踪,C2是一个政府安全等级,它保证系统能够保护资源并具有足够的审核能力。C2模式允许我们监视对所有数据库实体的所有访问企图。如图


启用C2审核的命令为
EXEC sys.sp_configure N'c2 audit mode', N'1'

以上的方法不是很完整,因为时间关系以后再慢慢研究。

 

6 ? SQL Server 2000 (SP4)笔记整理(三):触发器
2006-01-08T09:52:37+08:00 | rxl

/*
建立虚拟测试环境,包含:表[卷烟库存表],表[卷烟销售表]。
请大家注意跟踪这两个表的数据,体会触发器到底执行了什么业务逻辑,对数据有什么影响。
为了能更清晰的表述触发器的作用,表结构存在数据冗余,且不符合第三范式,这里特此说明。
*/

USE Master
GO

IF EXISTS (Select NAME FROM SYSOBJECTS Where XTYPE = 'U' AND NAME = '卷烟库存表')
    Drop TABLE 卷烟库存表
GO
IF EXISTS (Select NAME FROM SYSOBJECTS Where XTYPE = 'U' AND NAME = '卷烟销售表')
    Drop TABLE 卷烟销售表
GO

--业务规则:销售金额 = 销售数量 * 销售单价 业务规则。

Create TABLE 卷烟销售表
(
    卷烟品牌        VARCHAR(40) PRIMARY KEY NOT NULL,
    购货商          VARCHAR(40) NULL,
    销售数量        INT NULL,
    销售单价        MONEY NULL,
    销售金额        MONEY NULL
)
GO

--业务规则:库存金额 = 库存数量 * 库存单价 业务规则。

Create TABLE 卷烟库存表
(
    卷烟品牌        VARCHAR(40) PRIMARY KEY NOT NULL,
    库存数量        INT NULL,
    库存单价        MONEY NULL,
    库存金额        MONEY NULL
)
GO

--创建触发器,示例1

/*
创建触发器[T_Insert_卷烟库存表],这个触发器较简单。
说明:      每当[卷烟库存表]发生 Insert 动作,则引发该触发器。
触发器功能:    强制执行业务规则,保证插入的数据中,库存金额 = 库存数量 * 库存单价。
注意:      [InsertED]、[DeleteD]为系统表,不可创建、修改、删除,但可以调用。
重要:      这两个系统表的结构同插入数据的表的结构。
*/
IF EXISTS (Select NAME FROM SYSOBJECTS Where XTYPE = 'TR' AND NAME = 'T_Insert_卷烟库存表')
    Drop TRIGGER T_Insert_卷烟库存表
GO

Create TRIGGER T_Insert_卷烟库存表
ON 卷烟库存表
FOR Insert
AS
--提交事务处理
BEGIN TRANSACTION
    --强制执行下列语句,保证业务规则
    Update 卷烟库存表
    SET 库存金额 = 库存数量 * 库存单价
    Where 卷烟品牌 IN (Select 卷烟品牌 from InsertED)
COMMIT TRANSACTION
GO

/* 
针对[卷烟库存表],插入测试数据:
注意,第一条数据(红塔山新势力)中的数据符合业务规则,
第二条数据(红塔山人为峰)中,[库存金额]空,不符合业务规则,
第三条数据(云南映像)中,[库存金额]不等于[库存数量]乘以[库存单价],不符合业务规则。
第四条数据库存数量为0。
请注意在插入数据后,检查[卷烟库存表]中的数据是否 库存金额 = 库存数量 * 库存单价。
*/

Insert INTO 卷烟库存表(卷烟品牌,库存数量,库存单价,库存金额)
    Select '红塔山新势力',100,12,1200 UNION ALL
    Select '红塔山人为峰',100,22,NULL UNION ALL
    Select '云南映像',100,60,500      UNION ALL
    Select '玉溪',0,30,0
GO

--查询数据

Select * FROM 卷烟库存表
GO
/*

结果集

RecordId  卷烟品牌       库存数量  库存单价  库存金额
--------  ------------  --------  -------  ---------
1         红塔山新势力   100       12.0000  1200.0000
2         红塔山人为峰   100       22.0000  2200.0000
3         云南映像       100       60.0000  6000.0000
4         玉溪           0         30.0000  .0000

(所影响的行数为 4 行)

*/


--触发器示例2

/*
创建触发器[T_Insert_卷烟销售表],该触发器较复杂。
说明:       每当[卷烟库存表]发生 Insert 动作,则引发该触发器。
触发器功能:    实现业务规则。
业务规则:   如果销售的卷烟品牌不存在库存或者库存为零,则返回错误。
            否则则自动减少[卷烟库存表]中对应品牌卷烟的库存数量和库存金额。
*/
IF EXISTS (Select NAME FROM SYSOBJECTS Where XTYPE = 'TR' AND NAME = 'T_Insert_卷烟销售表')
    Drop TRIGGER T_Insert_卷烟销售表
GO

Create TRIGGER T_Insert_卷烟销售表
ON 卷烟销售表
FOR Insert
AS
BEGIN TRANSACTION
    --检查数据的合法性:销售的卷烟是否有库存,或者库存是否大于零
    IF NOT EXISTS (
        Select 库存数量
        FROM 卷烟库存表
        Where 卷烟品牌 IN (Select 卷烟品牌 FROM InsertED)
    )
        BEGIN
            --返回错误提示
            RAISERROR('错误!该卷烟不存在库存,不能销售。',16,1)
            --回滚事务
            ROLLBACK
            RETURN
        END

    IF EXISTS (
        Select 库存数量
        FROM 卷烟库存表
        Where 卷烟品牌 IN (Select 卷烟品牌 FROM InsertED) AND
        库存数量 <= 0          
    )
        BEGIN
            --返回错误提示
            RAISERROR('错误!该卷烟库存小于等于0,不能销售。',16,1)
            --回滚事务
            ROLLBACK
            RETURN
        END
   
    --对合法的数据进行处理

    --强制执行下列语句,保证业务规则
    Update 卷烟销售表
    SET 销售金额 = 销售数量 * 销售单价
    Where 卷烟品牌 IN (Select 卷烟品牌 FROM InsertED)

    DECLARE @卷烟品牌 VARCHAR(40)
    SET @卷烟品牌 = (Select 卷烟品牌 FROM InsertED)

    DECLARE @销售数量 MONEY
    SET @销售数量 = (Select 销售数量 FROM InsertED)

    Update 卷烟库存表
    SET 库存数量 = 库存数量 - @销售数量,
        库存金额 = (库存数量 - @销售数量)*库存单价
    Where 卷烟品牌 = @卷烟品牌
COMMIT TRANSACTION
GO

--请大家自行跟踪[卷烟库存表]和[卷烟销售表]的数据变化。
--针对[卷烟销售表],插入第一条测试数据,该数据是正常的。

Insert INTO 卷烟销售表(卷烟品牌,购货商,销售数量,销售单价,销售金额)
    Select '红塔山新势力','某购货商',10,12,1200
GO

--针对[卷烟销售表],插入第二条测试数据,该数据 销售金额 不等于 销售单价 * 销售数量。
--触发器将自动更正数据,使 销售金额 等于 销售单价 * 销售数量。

Insert INTO 卷烟销售表(卷烟品牌,购货商,销售数量,销售单价,销售金额)
    Select '红塔山人为峰','某购货商',10,22,2000
GO

--针对[卷烟销售表],插入第三条测试数据,该数据中的卷烟品牌在 卷烟库存表 中找不到对应。
--触发器将报错。

Insert INTO 卷烟销售表(卷烟品牌,购货商,销售数量,销售单价,销售金额)
    Select '红河V8','某购货商',10,60,600
GO

/*
结果集
服务器: 消息 50000,级别 16,状态 1,过程 T_Insert_卷烟销售表,行 15
错误!该卷烟不存在库存,不能销售。
*/

--针对[卷烟销售表],插入第三条测试数据,该数据中的卷烟品牌在 卷烟库存表 中库存为0。
--触发器将报错。

Insert INTO 卷烟销售表(卷烟品牌,购货商,销售数量,销售单价,销售金额)
    Select '玉溪','某购货商',10,30,300
GO

/*
结果集
服务器: 消息 50000,级别 16,状态 1,过程 T_Insert_卷烟销售表,行 29
错误!该卷烟库存小于等于0,不能销售。
*/
--查询数据
Select * FROM 卷烟库存表

Select * FROM 卷烟销售表
GO

/*
补充:
1、本示例主要通过一个简单的业务规则实现来进行触发器使用的说明,具体的要根据需要灵活处理;
2、关于触发器要理解并运用好 InsertED ,DeleteD 两个系统表;
3、本示例创建的触发器都是 FOR Insert ,具体的语法可参考:

    Trigger语法

    Create TRIGGER trigger_name
    ON { table | view }
    [ WITH ENCRYPTION ] --用于加密触发器
    {
        { { FOR | AFTER | INSTEAD OF } { [ Insert ] [ , ] [ Update ] }
            [ WITH APPEND ]
            [ NOT FOR REPLICATION ]
            AS
            [ { IF Update ( column )
                [ { AND | OR } Update ( column ) ]
                    [ ...n ]
            | IF ( COLUMNS_UpdateD ( ) { bitwise_operator } updated_bitmask )
                    { comparison_operator } column_bitmask [ ...n ]
            } ]
            sql_statement [ ...n ]
        }
    }

4、关于触发器,还应该注意
(1)、Delete 触发器不能捕获 TRUNCATE TABLE 语句。
(2)、触发器中不允许以下 Transact-SQL 语句:
        Alter DATABASE Create DATABASE DISK INIT
        DISK RESIZE Drop DATABASE LOAD DATABASE
        LOAD LOG RECONFIGURE RESTORE DATABASE
        RESTORE LOG
(3)、触发器最多可以嵌套 32 层。

*/

--修改触发器
--实质上,是将 Create TRIGGER ... 修改为 Alter TRIGGER ...即可。

--删除触发器
Drop TRIGGER xxx
GO

--删除测试环境
Drop TABLE 卷烟库存表
GO
Drop TABLE 卷烟销售表
GO
Drop TRIGGER T_Insert_卷烟库存表
GO
Drop TRIGGER T_Insert_卷烟销售表
GO

 


7 ? SQL Server 2000 (SP4)笔记整理(二):数据库表
2006-01-08T09:51:50+08:00 | rxl

USE Master
GO

--检查是否存在测试表,若存在,则删除之
IF EXISTS (Select NAME FROM SYSOBJECTS Where XTYPE = 'U' AND NAME = 'MyTestTable1')
    Drop TABLE MyTestTable1
GO

Create TABLE MyTestTable1
(
    编号        INT PRIMARY KEY NOT NULL IDENTITY(1,1),
    姓名        CHAR(8),
    别名        VARCHAR(8),
    性别        CHAR(2) DEFAULT ('男'),
    年龄        INT CHECK(年龄>0 AND 年龄<100),
)ON [PRIMARY]
GO

--插入数据:

/*
下面的语句将不能执行,因为 [编号] 列为系统自动自增列。

Insert INTO MyTestTable1(编号,姓名,别名,性别,年龄)
    VALUES (1,'彭建军','彭建军','男',25)
GO

在当 IDENTITY_Insert 设置为 OFF 时,不能向表 'MyTestTable1' 中的标识列插入显式值。

*/

--正确的语句,方法一
Insert INTO MyTestTable1(姓名,别名,性别,年龄)
    VALUES ('彭建军','彭建军','男',25)
GO
--方法二:
Insert INTO MyTestTable1(姓名,别名,性别,年龄)
    Select '老转','老转','男',30 UNION ALL
    Select '钱妮','妮子','女',28
GO

--查询数据(注意编号的自增性)

Select * FROM MyTestTable1
GO

/*

结果集

编号          姓名       别名       性别   年龄         
----------- -------- -------- ---- -----------
1           彭建军      彭建军      男    25
2           老转        老转        男    30
3           钱妮        妮子        女    28

*/

--验证 默认值,不插入[性别]的值,则系统取默认值
Insert INTO MyTestTable1(姓名,别名,年龄)
    Select '潘颖','梨窝浅笑',25
GO

--查询
Select * FROM MyTestTable1 Where 姓名 = '潘颖'
GO

/*

结果集
编号          姓名       别名       性别   年龄         
----------- -------- -------- ---- -----------
4           潘颖       梨窝浅笑     男    25

*/

--验证 CHECK,插入[年龄]的值超过100,则系统报错
Insert INTO MyTestTable1(姓名,别名,性别,年龄)
    Select '蛋蛋','蛋蛋','女',120
GO

/*

结果集

Insert 语句与 COLUMN CHECK 约束 'CK__MyTestTable1__年龄__30B91D22' 冲突。该冲突发生于数据库 'master',表 'MyTestTable1', column '年龄'。
语句已终止。

*/

--修改表

--增加列
Alter Table MyTestTable1
ADD 备注    VARCHAR(50)
GO

--修改列定义
Alter Table MyTestTable1
Alter COLUMN 备注 VARCHAR(100)
GO

--清空表的数据

--方法一(删除的数据将记入日志)
Delete FROM MyTestTable1
GO

--如果是删除特定的行,则类似于 Delete FROM MyTestTable1 Where 编号 = 1

--方法二(删除的数据不记入日志,执行效率高)
TRUNCATE TABLE MyTestTable1
GO

--删除表(谨慎使用!)
Drop TABLE MyTestTable1
GO

 


8 ? SQL Server 2000 (SP4)笔记整理(一):数据库
2006-01-08T09:50:39+08:00 | rxl

--数据库创建示例1

--首先必须在C盘下建立[DataBase]文件夹

USE Master
GO

--检查是否存在测试数据库,若存在,则删除之
IF EXISTS (Select NAME FROM SYSDATABASES Where NAME = 'MyDB')
    Drop DATABASE MyDB
GO

Create DATABASE MyDB
ON
--数据文件
(
    NAME = MyDB_dat,
    FILENAME = 'C:/DataBase/MyDB_dat.mdf',
    SIZE = 10,--默认值为 MB
    MAXSIZE = 50,
    FILEGROWTH = 5
)
--日志文件
LOG ON
(
    NAME = MyDB_log,
    FILENAME = 'C:/DataBase/MyDB_log.ldf',
    SIZE = 1MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 1MB
)
GO

--数据库创建示例2

USE Master
GO

IF EXISTS (Select NAME FROM SYSDATABASES Where NAME = 'MyDB')
    Drop DATABASE MyDB
GO

USE Master
GO

Create DATABASE MyDB
ON
--主数据文件
(
    NAME = MyDB_dat1,
    FILENAME = 'C:/DataBase/MyDB_dat1.mdf',
    SIZE = 10,--默认值为 MB
    MAXSIZE = 50,
    FILEGROWTH = 5
),
--次要数据文件
(
    NAME = MyDB_dat2,
    FILENAME = 'C:/DataBase/MyDB_dat2.ndf',
    SIZE = 10,--默认值为 MB
    MAXSIZE = 50,
    FILEGROWTH = 5
)
LOG ON
--主日志
(
    NAME = MyDB_log1,
    FILENAME = 'C:/DataBase/MyDB_log1.ldf',
    SIZE = 1MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 1MB
),
--次要日志
(
    NAME = MyDB_log2,
    FILENAME = 'C:/DataBase/MyDB_log2.ldf',
    SIZE = 1MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 1MB
)
GO

--删除数据库(请谨慎使用!)

Drop DATABASE MyDB
GO

--分离数据库

EXEC sp_detach_db 'MyDB'
GO

--附加数据库

Create DATABASE MyDB
ON PRIMARY
(
    FILENAME = 'C:/DataBase/MyDB_dat1.mdf'
)
FOR ATTACH
GO

--修改数据库

--增加数据库数据文件
Alter DATABASE MyDB
ADD FILE
(
    NAME = MyDB_dat3,
    FILENAME = 'C:/DataBase/MyDB_dat3.ndf',
    SIZE = 10,--默认值为 MB
    MAXSIZE = 50,
    FILEGROWTH = 5
)
GO

--清除数据库数据文件
Alter DATABASE MyDB
REMOVE FILE MyDB_dat3
GO

--修改数据库配置参数
Alter DATABASE MyDB
MODIFY FILE
(
    NAME = 'MyDB_dat1',
    SIZE = 20MB
)
GO

--查询数据库信息

USE Master
GO

Select * FROM SYSDATABASES

 

--备份数据库

BACKUP DATABASE MyDB
    TO DISK = 'C:/DataBase/MyDB_BackUp.BAK'
GO

--利用备份还原数据库
IF EXISTS (Select NAME FROM SYSDATABASES Where NAME = 'MyDB')
    Drop DATABASE MyDB
GO

RESTORE FILELISTONLY
    FROM DISK = 'C:/DataBase/MyDB_BackUp.BAK'
RESTORE DATABASE  MyDB
    FROM DISK = 'C:/DataBase/MyDB_BackUp.BAK'
    WITH
        MOVE 'MyDB_dat'  TO  'C:/DataBase/MyDB_dat.mdf',
        MOVE 'MyDB_log'  TO  'C:/DataBase/MyDB_log.ldf'
GO 

 


9 ? 网管必知 了解二十个最危险的安全漏洞
2006-01-01T14:58:51+08:00 | rxl

大多数成功的蠕虫和其他网络攻击所依靠的都是少数几种通用操作系统中存在的安全漏洞。这些攻击者都是机会主义者。它们利用最简单、最便捷的路线,并且使用最有效且使用广泛的工具来寻找和利用众所周知的漏洞和弱点。如果企业没有及时修补漏洞,这些攻击者就会乘机而入,而且它们扫瞄Internet上任何有漏洞的系统,不分清红皂白地发起攻击。蠕虫这种攻击手段非常容易传播且破坏力巨大,例如Blaster、Slammer和Code Red等蠕虫都是直接利用未施加补丁的漏洞来四处传播并制造巨大的破坏。

四年前,SANS研究院和联邦调查局(FBI)的国家基础设施保护中心(NIPC)发布过一份文档,总结出了“10种最关键的Internet安全漏洞”。数以千计的企业都非常重视这份文档,并且认真对待列表中的漏洞问题。在此后的三年中,他们又发布了扩展的“最危险的20项安全漏洞”列表,希望企业能够尽早对照自己存在的不足并且及时关闭这些最危险的安全漏洞。该列表中列出了许多存在漏洞的服务,其中就包括引发Blaster、Slammer、Code Red及NIMDA蠕虫的那些臭名昭著的漏洞。

SANS这次发布的“最危险的20种漏洞”列表中事实上包括两个列表,每个包含10种漏洞,分别对应于Windows中最常被利用的10种漏洞和Unix及Linux环境下的10种最常见的漏洞。尽管每年都有数千种安全事件在影响着这些操作系统,但绝大多数成功的攻击都只瞄准了这20个漏洞中的一、两个。

在Windows漏洞列表中,排在最前面的是Web服务器和服务,而在Unix列表中,位居前列的是BIND域名系统。而每个条目有时都代表着一个非常广泛的类别。SANS的文档长达100多页,将问题归纳为一些具体的安全漏洞,并且提供了详尽的提示,以便用户对问题加以及时修正。

许多漏洞已经出现在过去发布的列表中,但据该列表的研究主任Ross Patel 称,今天的列表中有一些出人意料的东西。Patel指出,文件共享应用和即时消息分别位列Windows 列表中的第7位和第10位,它们都是比较新的漏洞类别。

Patel说:“专家们几乎一致认为文件共享和P2P是值得担忧的问题。”和即时消息一样,文件共享应用非常简单,而且易于使用,因此用户往往会忽略它们可能引发的安全问题。

Web浏览器位居Windows列表的第6位,而且该应用多年来一直是一个非常热门的安全话题。

Patel说:“对于世界任何一个角落的专家来说,Windows中唾手可得的Web浏览器是多数问题的来源,而且也是各种争议的焦点。”由于微软的IE浏览器存在的漏洞数量众多,因此许多安全专家在今年年初建议用户应当放弃IE浏览器而选择其他的浏览器,但负责本列表的专家却对该问题持有保留意见。

众所周知,这“最危险的20种漏洞”需要立即得到修补。这份列表是数十位顶级安全专家苦心研究的结果。这些专家来自英国、美国和新加坡等国家的最关注安全问题的政府机构、领先的安全软件厂商和咨询企业、顶级的大学安全项目,还有许多其他的用户组织和SANS研究院。在这份文档的结尾处列出了该项目中所有的参与者名单。

企业不再手忙脚乱

网络安全企业Qualys公司首席技术官Gerhard Eschelbeck认为,今年的“最危险的20种漏洞”列表将被企业广泛地使用,并且会成为企业考虑安全问题的基准。

Eschelbeck说:“业界和学术界的专家都一致认为,该列表中列出的都是一些最关键的漏洞。目前,每周新公布的漏洞数量达到了50个,也就是说每年就有2500个漏洞,因此企业如果想确定对哪些漏洞加以特别关注,就必须面临巨大的挑战。SANS的列表正好可以帮助他们优先处理那些危害最大的漏洞。”

SANS主任Alan Paller说:“当您要求自己的系统人员对数千个漏洞进行测试时,您的企业肯定会陷于停顿。而这份‘20个最危险的漏洞’列表则可以每年为您提供一份参考,帮助您着手修复系统中最关键的漏洞。”

Paller指出:“由于问题的范围相对较小,因此可以把这些问题交给系统管理员,并且给他们几个月的时间来解决问题,这样才是合理的方式。”


用户可以在SANS的网站上获得这份列表。

Windows系统中最危险的漏洞
1、 Web服务器及服务
2、工作站服务
3、 Windows远程访问服务
4、 Microsoft SQL Server
5、 Windows验证
6、 Web浏览器
7、 文件共享应用
8、 LSAS泄露
9、 邮件客户端
10、 即时消息

Unix系统中最危险的漏洞
1、BIND域名系统
2、Web服务器
3、验证
4、版本控制系统
5、邮件传输服务
6、简单网络管理协议(SNMP)
7、开放安全套接字层(SSL)
8、企业服务NIS/NFS的错误配置
9、数据库 
10、内核

 


10 ? 100个ORACLE相关的网址大全
2006-01-01T14:51:46+08:00 | rxl


国内ORACLE相关站点
名称
地址
介绍
Oracle中国公司
http://www.oracle.com/cn
提供最新的产品及服务介绍。
中国Oracle用户组
http://www.cnoug.org/
ORACLE爱好者之家
http://www.oraclefan.net/
Jonson Huo
免费ORACLE入门
http://fengyu.china.com/
余枫
Oracle杂货店
http://www.hzsdb.com.cn/oracle/index.htm
ORACLE深度历险
http://oracle9idba.nease.net/index1.htm
彩虹湾
http://www.irisbay.com/
提供oracle的相关知识,同时也提供dba、OCP证书等的论坛。
Oracle小组
http://oraclegroup.yeah.net/
smiling电子小组―Oracle小组
oracle技术站
http://oradb.jianwangzhan.com/cgi-bin/index.dll?index13?webid=jianwangzhan&userid=49339
Oracle9iAS Documentation Library, Release 2 (9.0.3)
http://download-west.oracle.com/docs/cd/A97688_06/index.htm
Oracle9i Database Concepts
http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/server.920/a96524/toc.htm
ORACLE讨论区
名称
地址
介绍
ITPUB论坛
http://www.itpub.net/
CSDN数据库开发 Oracle
http://expert.csdn.net/expert/forum.asp?url=/Expert/ForumList.asp?roomid=1801&typenum=1&xmlsrc=&whichpage=1
ChinaUnix.net的Oracle论坛
http://chinaunix.net/forum/viewforum.php?f=19
Oracle Developer 6i 开发者论坛
http://61.144.28.248:8080/d6i/bbs_armok01/bbs_list.jsp
网易Oracle论坛(北京)
http://fe5.bj.163.com/cgi/docidx?guest=1&b=Oracle
最新论坛
中国LINUX论坛—Oracle for linux 专版
http://www.linuxforum.net/forum/postlist.php?Cat=&Board=oracle
中国LINUX论坛—Oracle for linux 专版
广东早安Oracle论坛
http://www.strongsun.gzidc.com/
LinuxAid 技术支持论坛—数据库应用
http://www.linuxaid.com.cn/forum/boardlist.jsp?m=0&i=20
LinuxAid 技术支持论坛—数据库应用
中国LINUX论坛—数据库
http://www.linuxforum.net/forum/postlist.php?Cat=&Board=db
中国LINUX论坛—数据库
企业管理论坛—Oracle
http://www.9053.net/formu/flist.asp?cat_ID=21
ORACLE 系统专用论坛-中国ERP专家论坛
http://www.erper.com/bbs/forum.asp?Forum_ID=3
腾讯社区:数据库
http://bbs.tencent.com/cgi-bin/bbs/bbs_show_title?groupid=102:10055&tbegnum=0&club=3&st=0&sc=&sort=0&8884
腾讯社区:数据库
甲骨文 —oracle.ok100.net
http://oracle.ok100.net/showBBS.php?BBS_id=oracle
... ...
编程艺苑→数据库
http://www3.ccw.com.cn/club/bbs/list.asp?boardid=10&v=bbs
... ...
西陆家园Oracle讨论区
http://oracleocp.xilubbs.com/
LodeSoft 软件自由论坛
http://softart.lodesoft.com/form/thread.php3?bid=9961273
... ...
圣伟思Oracle技术支持论坛
http://www.whservice.com/whservice/bbs/index.asp
smiling电子小组—Oracle
http://www.smiling.com.cn/group/posts/index_bbs.ecgi?group_id=11046
smiling电子小组—Oracle
google搜索结果
http://www.google.com/search?hl=zh-CN&inlang=zh-CN&ie=GB2312&q=oracle&btnG=Google%CB%D1%CB%F7&lr=lang_zh-CN
... ...
coolunix搜索结果
http://www.coolunix.com/search.cgi?keyword=oracle
... ...
Oracle爱好者之家论坛
http://www.oraclefan.net/ubbs547/Ultimate.cgi?action=intro&BypassCookie=true
Oracle爱好者之家论坛
中国Oracle用户老论坛
http://www.soufun.com/include/visiter/bbs/listpost.asp
... ...
Oracle 資料庫問題討論區 (Oracle)
http://bbs.kimo.com.tw/cgi-bin/ListFrame.cgi?board=Oracle
在台湾,奇摩
資料庫疑難雜症來這裡 (database)
http://bbs.kimo.com.tw/cgi-bin/ListFrame.cgi?board=database
在台湾,奇摩
Oracle SQL & Developer 2000 討論區
http://cgi.pchome.com.tw/cgi-bin/myforum/myforum?id=012000030312463768662
在台湾,PC Home Online网路家庭
Oracle資料庫討論區
http://cgi.pchome.com.tw/cgi-bin/myforum/myforum?id=011999121000100616617
在台湾,PC Home Online网路家庭
Oracle資料庫討論區
http://cgi.todo.com.tw/cgi-bin/myforum/myforum?id=011999121000100616617
在台湾
港台站点
名称
地址
介绍
Oracle台湾公司
http://www.oracle.com.tw/
在台湾
Oracle DB技術論壇
http://www.oracledb.com.tw/
在台湾
Oracle精诚*甲骨文中文站
http://oracle.sysware.com.tw/
在台湾
外国ORACLE站点
名称
地址
介绍
Oracle官方站点
http://www.oracle.com/
Oracle的大本营
otn.oracle.com
http://otn.oracle.com/
metalink.oracle.com
http://metalink.oracle.com/
Ask Tom Home
http://asktom.oracle.com/
asktom
Oracle Documentation
http://www.oradoc.com/index.html
Oracle Documentation
orafaq
http://www.orafaq.org/faq2.htm
非常不错的Oracle论坛,分类很细。
Oracle FAQ
http://www.bf.rmit.edu.au/~orafaq
Oracle数据库常见问题解答。
Oracle Faq, Scripts, Articles and Resources DBAsupport.com
http://www.dbasupport.com/
介绍
delante Ltd - Oracle (Database Administration) DBA 's a speciality
http://www.think-forward.com/
OCP online test
http://networkessentials.com/certified/ocp/index.htm
OCP online test
ixora
http://www.ixora.com.au/
advanced performance tuning
The Pipelines -- Information portal for Oracle, DB2, SQL Server.
http://www.revealnet.com/
Osborne
http://www.osborne.com/
Find all the right computer books and learning tools at Osborne McGraw-Hill
DBA-village
http://www.dba-village.com/
DBA-village
OraPerf.com
http://www.oraperf.com/
JL Computer Consultancy
http://www.jlcomp.demon.co.uk/
An expert view on the Oracle (tm) database engine
Oracle Server on Linux Installation
http://jordan.fortwayne.com/oracle/
介绍
orafans
http://www.orafans.com/
介绍
Oracle Magazine
http://www.oramag.com/
一份关于Oracle的月刊。在它的站点上你可以看到一些有深度的文章,也可以看到一些技巧和代码。
Oracle Professional Home
http://www.oracleprofessionalnewsletter.com/
介绍
oracle-home
http://www.oracle-home.com/
The home of Oracle Database information. Books, reviews, Free Oracle Software Downloads and resources on Oracle Database development
oreview
http://www.oreview.com/
介绍
Oracle Technology Professionals
http://www.oranet.com/
Oracle Technology Professionals
oraworld
http://www.oraworld.com/
介绍
oracle-users
http://www.oracle-users.com/
介绍
oracleguru
http://www.oracleguru.com/
介绍
Oraclenotes.com
http://www.oraclenotes.com/
A community for the aspiring Oracle Certified Professional。
Cinema SQL
http://users.neca.com/ltruett/sql.html
SQL Reference and Example Site * featuring * Cinema SQL。
ORACLE软件下载站点
名称
地址
介绍
Oracle公司
http://technet.oracle.com/
介绍
wormwang 新丝(思)路
http://freesoft.online.sh.cn/
这有很多自由软件
西安交通大学思源FTP服务器
ftp://ftp.xjtu.edu.cn/soft/DataBase/
介绍
ftp://oracle-ftp.oracle.com/
ftp://oracle-ftp.oracle.com/
介绍
ftp://166.111.168.13/
ftp://166.111.168.13/
介绍
ORACLE第三方工具站点
名称
地址
介绍
Self Test Software
http://www.selftestsoftware.com/
介绍
Quest Sodtware
http://www.quest.com/
介绍
www.cramsession.com
http://www.cramsession.com/
介绍
其他
名称
地址
介绍
广东早安计算机系统有限公司
http://www.strongsun.com/
ORACLE 华南区总代理
晓通数据库
http://www.xiaotong-db.com.cn/
晓通数据库的工作重点主要放在数据库技术、面向对象的开发技术、以及应用系统的设计技术的研究和应用上。
北京华创
http://www.huachuang.com.cn/index.html
介绍
华迪计算机有限公司
http://www.huadi.com.cn/
信息化应用的系统集成商和服务商,ORACLE的双全牌代理。
佳都国际Oracle认证培训
http://www.pci.com.cn/pci-oracle.htm
介绍
超越认证资讯中心
http://www.transcendinfo.com/
介绍
宏贝思
http://www.macro-base.com/
介绍
常通多维
http://www.ctdw.com.cn/
介绍
北京宇思联成软件技术公司
http://www.youthsoft.com.cn/
介绍
计算机世界网
http://www.ccw.com.cn/
包含:《计算机世界》、《网络世界》、《微电脑世界》、《IT经理世界》、《家用电脑世界》、《聚焦华东》
数据备份专家
http://icesoft.yeah.net/
齐物轩*OCP认证资料网
http://ocp21.myrice.com/
大专院校BBS
名称
BBS地址
数据库讨论版地址
北京大学未名站
http://bbs.pku.edu.cn/
http://bbs.pku.edu.cn/cgi-bin/bbstop?board=Database
清华水木清华
http://a
http://a
复旦大学日月光华站
http://bbs.fudan.edu.cn/
http://bbs.fudan.edu.cn/cgi-bin/bbs/bbsdoc?board=Database
电子科技大学一网情深
http://bbs.uestc.edu.cn/
http://bbs.uestc.edu.cn/cgi-bin//bbsdoc?board=Database
上海交通大学饮水思源站
http://bbs.sjtu.edu.cn/
http://bbs.sjtu.edu.cn/cgi-bin/bbsdoc?board=database
西安交通大学冰马佣站
http://bbs.xanet.edu.cn/
http://bbs.xanet.edu.cn/bbsdoc?board=database
哈工大紫丁香
http://bbs.hit.edu.cn/
http://bbs.hit.edu.cn/cgi-bin/bbs/bbsdoc?Database
华南理工大学木棉站
http://bbs.cnkapok.com/
http://bbs.cnkapok.com/cgi-bin/bbsdoc?NOracle
浙江大学西子浣纱城
http://bbs.zju.edu.cn/
http://bbs.zju.edu.cn/cgi-bin/bbsdoc?board=DataBase


内容列表
1 ? 一些有创意的SQL语句
 
2 ? Microsoft SQL Server 2005 Produc...
 
3 ? sql server 中【农历】计算方法
 
4 ? SQL查询语句精华使用简要
 
5 ? MS SQL 2005 安全设置
 
6 ? SQL Server 2000 (SP4)笔记整理(...
 
7 ? SQL Server 2000 (SP4)笔记整理(...
 
8 ? SQL Server 2000 (SP4)笔记整理(...
 
9 ? 网管必知 了解二十个最危险的安全漏...
 
10 ? 100个ORACLE相关的网址大全
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值