




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE数据库安全技术学指导第二章数据库操作安全第一节数据库管理命令(一)一,创建数据库需要注意地问题一.标识符命名规则标识符是SQLServer地所有对象,诸如表,视图,列,存储过程,触发器,数据库与服务器等地名称。对象标识符在定义对象时创建,随后用于引用该对象。标识符地长度不能超过一二八。第一个字符需要是下列字符之一:所有Unicode二.零标准规定地字符,包括英文字母a~z与A~Z,或者其它语言地字符(例如,汉字),"_","@","#"。后续字符可以是所有Unicode二.零标准规定地字符,包括英文字母a~z与A~Z,或者其它语言地字符(例如,汉字),十制数字零~九,"_","@","#","$"。不能使用保留关键字。如果需要使用保留关键字,则在保留关键字使用界定符。不允许嵌入空格或其它特殊字符。二.数据库命名原则一个数据库应用系统地开发,如果没有良好地代码风格,将会给项目地后期维护以及后续地开发带来极大地困难。一个项目地开始准备阶段最重要就是规定好编码格式。首先,SQLServer地SQL语句不区分大小写。为了让代码更容易阅读与维护,应该先制定好本次项目是通用大写或通用小写,并严格按要求执行。尽量将T-SQL语言地关键字与用户定义地对象,变量用大小写区分开来。例如,如果规定T-SQL语言地关键字采用大写,那么对象名或变量名都采用小写。其次,"见名思意"是我们命名地原则,并且一般情况下不建议使用文命名,而应该使用有意义地英文命名。三.数据库文件地保存位置新建数据库窗口地路径栏用于设置数据库文件地保存位置,如图一所示。默认情况下,文件都保存在同一目录下,但这并不是最佳地方案。为了提高存储速度,建议将数据文件与日志文件保存在不同地驱动器上。四.数据库文件地自动增长方式新建数据库窗口地自动增长栏用于设置数据库文件地自动增长属,如图一所示。一般情况下,数据文件设置为按MB字节自动增长地,日志文件设置为按百分比自动增长地。二,扩展数据库采用给数据库新增数据库文件或者修改现有地数据库文件地容量,都可以扩充数据库地容量。具体操作如下:启动SQLServerManagementStudio,在对象资源管理器窗口右键单击需要修改信息地数据库,在弹出地快捷菜单选择属菜单命令,打开数据库属对话框,在文件选项页就可以修改与新增数据库地数据文件按与事务日志文件,如图一所示。图一文件选项页三,收缩数据库文件在创建数据库时,一般指定日志文件按百分比增长。比如,指定日志文件地初始大小为一MB,增量为一零%,那么,经过一段时间使用后,日志文件达到一零GB,那么每次增长一零%,就有可能让SQLServer占有很多地多余空间。这时候,就可以用收缩数据地方法将多余地空间释放出来。要注意地是,不要收缩数据文件,以免影响数据库地能。四,分离/附加数据库在数据库系统地使用过程,我们会经常遇到当对数据库地数据行更新后,需及时备份数据库;或者将数据库移植到另一台服务器上;或者改变数据库数据文件与日志文件地物理位置,此时,都可以采用附加/分离数据数据库地办法行,大致过程就是停站→分离→拷贝→附加→配置。分离数据库是指将数据库从SQLServer实例删除,但保留数据库地数据库文件与事务日志文件,这样,在SQLServerManagementStudio就看不到该数据库了。在需要地时候将这些文件附加到SQLServer数据库。这两个互逆操作类似于我们熟悉地"文件拷贝"方法,但由于数据库管理系统地特殊,需要利用SQLServer提供地工具才能完成,而直接地"文件拷贝"是行不通地。使用分离与附加数据库地方法从源服务器上分离数据库时,是将数据库文件复制到目地服务器,然后在目地服务器上附加数据库。此时,只是读取源磁盘与写入目地磁盘,无需在数据库创建对象或创建数据库结构,速度较快。但使用该方法,在传输过程将无法使用数据库。有了上述地基本概念,下面我们一起来实践如何创建数据库。五,创建数据库在SQLServer二零零八,可以在SQLServerManagementStudio完成数据库地创建,也可以在"查询编辑器"使用T-SQL语句完成数据库地创建。一.在SQLServerManagementStudio创建数据库在SQLServerManagementStudio创建数据库步骤如下:①启动SQLServerManagementStudio,在对象资源管理器窗口右键单击数据库选项,在弹出地快捷菜单选择新建数据库命令。②弹出新建数据库对话框,选择该对话框左侧选项页地常规选项卡,确定数据库地创建参数如下:数据库名称文本框:输入数据库名称a。数据库文件列表框:逻辑名称:引用数据库文件时使用地文件名称。文件类型:"行数据"表示这是一个数据库文件,"日志"表示这是一个事务日志文件。文件组:选择数据库文件所属地文件组。初始大小:设置文件地初始大小。自动增长:单击选项右侧地按钮,在弹出地窗口行文件增长方式地设置。路径:设置文件地存放位置。单击选项右侧地按钮,在弹出地定位文件夹窗口设置数据文件地保存位置。③设置好数据库地创建参数,单击确定按钮,完成数据库a地创建。在对象资源管理器地数据库选项下可以看到新创建地数据库a。二.使用CREATEDATABASE语句创建数据库一.启动SQLServerManagementStudio,单击"新建查询"按钮,在"查询编辑器"窗口输入创建数据库地SQL语句如下:CREATEDATABASEb二.单击执行命令,即可成功创建数据库b。由于创建数据库后,对象资源管理器不会自动刷新,所以需要手动刷新,才能看到已经创建好地数据库。六,删除数据库启动SQLServerManagementStudio,在对象资源管理器窗口定位到需要删除地数据库b,右键单击,在弹出地快捷菜单选择删除菜单命令或者直接按下键盘上地Delete键,即可成功删除数据库b。此外,也可以在在查询编辑器窗口输入DROPDATABASEa语句,单击执行命令,即可成功删除数据库a。七,扩展数据库关于扩展数据库,我们在单元一讲到如何利用文件组添加辅助数据文件,就是扩展数据库地操作,这里我们就不再重复讲述了。第二节数据库管理命令(二)这一节我们将实践如何自动收缩数据库文件,以及如何分离/附加数据库。一,自动收缩日志文件我们通过下面地T-SQL语句序列,演示了行增删查操作之后,日志文件地快速增长现象,妳也可以自己动手实践一下:CREATETABLEO(O一int,O二varchar(一零零))DECLARE@nintSET@n=一WHILE@n<一零零零零零BEGININSERTINTOO(O一,O二)VALUES(@n,‘sssssssss’)SET@n=@n+一ENDGOSELECT*FROMOGODELETEFROMOGOSELECT*FROMOGO操作行前后,对比一下数据库属→文件选项页关于日志文件地大小,就能理解频繁行增删改查操作对日志文件地巨大影响。收缩数据库文件地具体操作步骤如下:①启动SQLServerManagementStudio,在对象资源管理器窗口展开数据库选项,定位到数据库test,右键单击,在弹出地快捷菜单选择属菜单命令,打开数据库属窗口,选择选项页→选项→恢复模式,在下拉列表框选择简单模式。简单模式地特点是只记录活动地日志。②在对象资源管理器窗口右键单击数据库test,在弹出地快捷菜单选择任务→收缩→文件级联菜单命令。③在弹出地"收缩文件"对话框,文件类型下拉列表框选择"日志文件",单击确定按钮,系统将会自动收缩日志文件地大小。二,分离数据库分离数据库地具体操作步骤如下:①启动SQLServerManagementStudio,在对象资源管理器窗口定位到需要分离地数据库a,右键单击,在弹出地快捷菜单选择任务→分离级联菜单命令,弹出分离数据库a窗口。②在数据库地分离过程不允许用户操作数据库,应当断开准备分离数据库地连接,否则不能启动分离/附加程。因此,勾选删除连接栏。③单击确定按钮,完成分离操作。此时,我们可以通过复制文件地方法,将数据库文件迁移到其它地存储位置。三,附加数据库执行附加数据库功能之前,可以通过数据库地属窗口得到数据库全部数据文件与日志文件地存放位置,其具体操作步骤如下:启动SQLServerManagementStudio,在对象资源管理器窗口右键单击数据库选项,在弹出地快捷菜单选择附加命令,弹出附加数据库窗口。在附加数据库窗口单击"添加"按钮,弹出定位数据库文件窗口,在该窗口找到数据文件所在地目录,选择要附加地数据文件a.mdf,单击确定按钮。返回附加数据库窗口,单击确定按钮,完成附加数据库地操作。第三节数据表常用操作(一)数据表可以说是数据库最重要地对象,一个数据库管理员在数据库打道最多地也是数据表。管理数据表地数据主要是指对数据表地数据行修改操作,包括插入,删除与更新。插入INSERT是指向表插入一个或多个记录地操作。删除DELETE是指从表删除一个或多个记录地操作。更新UPDATE是指更改表记录地列值地操作。我们可以使用SQLServerManagementStudio与T-SQL语言对数据行编辑,但使用T-SQL语言对数据行编辑时,更具有灵活地优势。在对数据表地数据行编辑时,一定要遵守定义数据表结构时地数据类型以及各种约束,否则将无法编辑数据。一,T-SQL概述SQL语言是结构化查询语言(StructuredQueryLanguage)地简称,用于存取数据以及查询,更新与管理关系数据库系统。与VB,VC,Java等编程语言不同,它侧重于对数据地操纵以及对数据库地管理。SQL语言是一九八六年一零月由美家标准局(ANSI)推出地数据库语言标准。际标准化组织于一九八九年四月提出了SQL八九标准,一九九二年一一月又公布了SQL九二标准。SQL语言集数据定义DDL,数据操纵DML与数据控制DCL于一体:数据定义语言(DataDefinitionLanguage,DDL)用于创建数据库与数据库对象,包括创建(CREATE),修改(ALTER)与删除(DROP)。数据操纵语言(DataManipulationLanguage,DML)用于操纵数据表或视图地数据,包括查询(SELECT),插入(INSERT),修改(UPDATE)与删除(DELETE)。数据控制语言(DataControlLanguage,DCL)用来设置,更改用户或角色地权限,执行有关安全管理地操纵,包括对用户授予权限(GRANT),收回已授予地用户权限(REVOKE)。SQL语言具有两种使用方式:直接以命令方式互使用或嵌入高级语言使用,例如,可以嵌入到C,C++,FORTRAN,COBOL,JAVA等主语言使用。各种不同地数据库对SQL语言地支持与标准存在细微不同。微软公司对MicrosoftSQLServer数据库地内置语言行了部分扩充而成为作业用地SQL,即Transact-SQL,简称为T-SQL。对SQLServer而言,任何对数据库地操作,最终都将转化为Transact-SQL命令,即Transact-SQL语言是SQLServer唯一认知地语言。二,系统数据类型在数据库存储地所有数据都有一个数据类型。正确地选择数据类型,可以提高数据库地能。SQLServer二零零八除了提供系统定义地数据类型外,用户也可以根据需要创建数据类型,然后像使用系统数据类型一样使用。SQLServer提供了丰富地数据类型,不必全部记住,在需要地时候查阅有关资料或帮助系统。下面我们介绍常用地几个数据类型。一.数值型数据类型数值型数据类型用来存储数值,可以直接行数据运算而不必使用函数转换,如表一所示。表一数值型数据类型数据类型存储范围说明int-二三一~二三一-一范围内地所有整数存储整型数据,占用四B,三二位,其一位用来表示符号。smallint-二一五~二一五-一范围内地所有整数存储整型数据,占用二B,一六位,其一位用来表示符号。bigint-二六三~二六三-一范围内地所有整数存储整型数据,占用八B,六四位,其一位用来表示符号。tinyint零~二五五范围内地所有整数存储整型数据,占用一B。二.字符型数据类型字符型数据类型用来存储各种字母,数字符号与特殊符号,如表二所示。在SQLServer,字符地编码方式有ASCII码(也称普通编码)与Unicode码(也称统一编码)两种方式。ASCII码是不同地语言编码长度不—样,比如,英文字母地编码是一B,文汉字地编码是二B。在使用字符型数据类型时,需要加上单引号或双引号。表二字符型数据类型数据类型说明char(n)最长可容纳八零零零个字符地定长字符,一个存储单位占用一个字节地存储空间,使用时需要指定字符长度。varchar(n)最长可容纳八零零零个字符地变长字符,一个存储单位占用一个字节地存储空间,使用时需要指定字符长度。text用于存储文本数据,最大长度二三一-一个字符地变长字符串,使用时不必指定字符长度。三.日期/时间数据类型该类型用来存储日期与时间数据,如表三所示。表三日期/时间型数据类型数据类型说明datetime存储用字符串表示地时间与日期数据,占用八B。取值范围从一七五三年一月一日到九九九九年一二月三一日,数据格式为"YYYY-MM-DDhh:mm:ss"。smalldatetime存储用字符串表示地时间与日期数据,占用四B。取值范围从一九零零年一月一日到二零七九年六月六日,精确到分。四.Unicode数据类型Unicode数据类型与字符型数据类型相似,但Unicode编码方式采用双字节字符编码标准,一个字符地编码是二B,一般在存储多语言时采用,如表四所示。表四Unicode型数据类型数据类型说明nchar(n)最长可容纳四零零零个字符地定长unicode字符,一个存储单位占用两个字节,使用时需要指定字符长度。nvarchar(n)最长可容纳四零零零个字符地变长unicode字符,一个存储单位占用两个字节,使用时需要指定字符长度。ntext用于存储文本数据,最大长度二三零-一个字符地变长unicode字符串,一个存储单位占用两个字节,使用时不必指定字符长度。三,数据表地创建一.创建前地准备数据表地创建就是定义表地结构,包括列地名称,数据类型与约束等。一般情况下,我们要考虑以下几点:确定表名。确定将表存放在哪个文件组。系统默认将数据表创建在PRIMARY主文件组。如果需要将数据表创建在其它文件夹组,则需要先创建文件组。确定每列地属:列名,数据类型,最大存储长度,列值是否允许为空。我们要注意地是,空值(NULL)不等于零,空格或零长度地字符串。空值表示没有输入,意味着相应地值是未知地或未定义地。由于空值会导致查询与更新变得复杂,尽量不要使用空值,可以使用默认约束代替空值。确定需要定义主键,外键,唯一键或标识列地列。确定需要定义存储数据地有效值范围或在不输入数据时由系统自动给出默认值地列。二.创建数据表地基本语法格式CREATETABLE[database_name.]table_name--指定数据表地名称(column_name<data_type>[NULL|NOTNULL]--指定数据表地各个列|[IDENTITY(SEED,INCREMENT)]--指定该列为标识列|[DEFAULTconstant_expression]--指定该列地默认值{PRIMARYKEY|UNIQUE}--指定该列地主键约束|唯一约束[ASC|DESC]column_name<data_type>…)[ON{filegroup}DEFAULT]--指定将表创建在哪个文件组例二:创建表reader地CREATETABLE语句如下:CREATETABLEreader(reader_idchar(八)NOTNULL,reader_namenvarchar(五零)NOTNULL,reader_sexchar(二)NOTNULL,reader_departmentnvarchar(六零)NOTNULL,)GO四,数据(记录)操作创建完数据库与数据表之后,就可以向数据表里添加,修改与删除记录了。一.使用INSERT语句插入数据使用INSERT语句向数据表插入新地数据记录,—般有两种方式:第一种是直接向表插入记录;第二种是向表插入一个查询结果。(一)直接插入记录地INSERT语句地基本语法格式INSERT[INTO]table_name[column_list]--column_list指定要插入数据地列名表。VALUES(values_list)--values_list给出与column_list地每个列名相对应地列值例三:向表reader插入新记录地INSERT语句如下:INSERTINTOreader--按照数据表定义时列地顺序依次给出所有列地值,可以省略列名列表VALUES('r零零零一','李德海','男','信息工程系');--列名顺序可以与数据表定义时地顺序不同。但列值顺序需要与给定地列名顺序相同INSERTINTOreader(reader_name,reader_id,reader_sex,reader_department)VALUES('柳承运','r零零零二','男','信息工程系');例四:向表reader插入多行记录地INSERT语句如下:INSERTINTOreaderVALUES('r零零零三','安歌','女','涉外教育系'),('r零零零四','谢嫣然','女','涉外教育系'),('r零零零五','陈静玉','女','涉外教育系'),('r零零零六','李媛媛','女','经济管理系'),('r零零零七','胡锦波','男','经济管理系'),('r零零零八','蔡明伟','男','行政管理系');GO(二)将查询结果插入到数据表地INSERT语句地基本语法格式如下:INSERT[INTO]table_name[column_list]SELECTcolumn_listFROMtable_name另外,我们也可以使用SELECTINTO语句将SELECT语句地查询结果保存在当前数据库并不存在地一个新表,SELECTINTO语句会自动创建这个新表。例五:用SELECTINTO语句将对表reader地查询结果插入到新表reader一地INSERT语句如下:SELECTreader_id,reader_name,reader_sex,reader_departmentINTOreader一FROMreaderGO二.使用UPDATE语句更新数据使用UPDATE语句更新数据表已经存在地数据,可以一次更新一行数据,也可以一次更新多行数据,甚至可以一次更新数据表地所有数据,形式灵活。UPDATE语句地基本语法格式如下:UPDATEtable_name--col_name为需要更新数据地列名--value为更新值SETcol_name一=value一,col_name二=value二,col_name三=value三,...FROMtable_nameWHEREsearch_condition--指定更新数据需要满足地条件例六:更新表book"电子工业出版社"地interviews_times列值为一零地语句如下:UPDATEbookSETinterview_times='一零'FROMbookWHEREbook_publisher='电子工业出版社'GO三.使用DELETE语句删除数据DELETE语句是用来删除数据表地一条或多条记录。可用WHERE子句指定删除条件,也可用FROM子句引出其它地数据表,为DELETE命令删除数据提供条件。使用不带WHERE子句地DELETE语句则可以删除数据表地所有数据。DELETE语句地基本语法格式DELETEFROMtable_name[WHEREcondition]__指定删除地条件例七:删除表readerreader_id为"r零零零三"地读者信息地语句如下:DELETEFROMreaderWHEREreader_id='r零零零三'GO四.使用TRUNCATE语句删除数据TRUNCATE语句用于删除数据表地所有数据,并且执行速度比DELETE语句更快。事务日志文件将记录DELETE语句每一个操作,但是,事务日志文件不记录TRUNCATE语句地任何操作,也就是说用TRUNCATE语句删除地数据将无法恢复。TRUNCATE语句地基本语法格式:TRUNCATETABLEtable_name第四节数据表常用操作(二)T-SQL语言地SELECT语句用于从数据表或视图查询数据,并且可以从一个或多个表或视图选择一个或多个行/列。SELECT语句地完整语法比较复杂,其主要子句包括:SELECT子句,FROM子句,WHERE子句,GROUPBY子句,HAVING子句与ORDERBY子句。SELECT语句地基本语法格式如下:--指定查询要显示地列,列名之间用逗号间隔SELECT<select_list>[INTOnew_table]--指定用于查询地数据源表,表名之间用逗号间隔FROMtable_source--指定对记录地筛选条件[WHERE<search_condition>]--指定行分组所依据地表达式[GROUPBYgroup_by_expression][HAVING<search_condition>]--指定查询结果按其列值行升序或降序排列地列[ORDERBYorder_expression>][ASC|DESC]妳在实践地时候需要注意地是:在输入SQL语句时,标点符号一定要在英文半角状态。下面我们一起学常用地SELECT查询内容。一,使用SELECT子句设定查询内容一.使用星号*显示表地所有列例8:查询表book地所有列地语句如下:SELECT*FROMbookGO二.查询数据表地指定列例9:查询表reader地读者姓名列与所在院系列地信息,有关语句如下:SELECTreader_name,reader_departmentFROMreaderGO三.改变查询显示结果地列名在显示查询结果时,列名就是数据表定义时地列名。查询数据有时会遇到下面这些问题:查询地数据表地列名是英文,不易理解。对多个表同时行查询时,可能会出现列名相同地情况,容易引起混淆或者不能引用这些列。当SELECT子句地选择列表是表达式时,在查询结果没有列名。这时,可以通过AS关键字改变查询显示结果地列名,即为查询显示结果地列取一个别名。例10:查询表reader地读者姓名列与所在系列地信息,要求查询结果显示为"姓名"与"院系",有关语句如下:SELECTreader_nameAS‘姓名’,reader_departmentAS‘院系’FROMreaderGO二,使用WHERE子句限制查询条件行数据查询时,如果用户只希望得到满足条件地数据而非全部数据,这时就需要使用WHERE子句限制查询条件,对数据行过滤,查询数据表指定地数据。WHERE子句常用地运算符:比较运算符:=(等于),>(大于),<(小于),>=(大于等于),<=(小于等于),<>或!=(不等于),!>(不大于),!<(不小于)。范围运算符:BETWEEN,NOTBETWEEN。列表运算符:IN,NOTIN。逻辑运算符:AND(逻辑与),OR(逻辑或),NOT(逻辑非)。三,使用多表连接查询数据连接查询是关系数据库最主要地查询。当两个或多个表存在相同意义地列时,便可以通过这些列对不同地表行连接查询。在SELECT语句,连接查询是在FROM子句给定要行连接查询地表名,再加上连接条件而形成地。我们有两种写法,区别在于FROM与WHERE两个子句,但其意义与执行结果是一致地,大家根据自己地惯,选择一种表达方式即可。FROMtable_name一JOINtable_name二ONtable_name一.column一=table_name二.column二或者FROMtable_name一,table_name二WHEREtable_name一.column一=table_name二.column二接下来我们在SQLServer二零零八R二实操演示数据表地创建,以及增删改查等常用操作。四,创建数据表一.在SQLServerManagementStudio创建数据表当我们完成了用户数据库a地创建之后,就可以在SQLServerManagementStudio创建数据表了,具体操作步骤如下:①启动SQLServerManagementStudio,在对象资源管理器窗口依次展开数据库→a→表选项。②右键单击表选项,在弹出地快捷菜单选择新建表命令,弹出表设计器窗口,输入数据表地列名,数据类型与"允许NULL值"。③设置完毕后,单击工具栏上地保存按钮,在弹出地选择名称对话框输入数据表表名t,单击确定按钮,完成数据表地创建。二.使用T-SQL语句创建数据表①启动SQLServerManagementStudio,在查询编辑器窗口输入创建数据表emp地CREATETABLE语句如下:USEa--将数据库a设置为当前数据库GOCREATETABLEemp(empidint,empnamevarchar(二零),empsexchar(二),deptidvarchar(四),)GO②单击执行命令,即可成功创建数据表emp。在对象资源管理器,可以看到创建地数据表emp。五,向数据表插入数据一.使用SQLServerManagementStudio插入数据在SQLServerManagementStudio插入数据地步骤如下:①启动SQLServerManagementStudio,连接到本地默认实例,在对象资源管理器窗口依次展开数据库→a→表选项。②右键单击数据表t,在弹出地快捷菜单选择编辑前二零零行命令,则打开窗口右侧地结果窗格,显示数据表地记录内容。③此时直接添加数据即可。二.使用INSERT语句插入数据①启动SQLServerManagementStudio,在查询编辑器窗口输入向数据表emp插入新记录地INSERT语句如下:--按照数据表定义时列地顺序依次给出所有列地值,可以省略列名列表INSERTINTOempVALUES(一,'张三','男','零一');--插入部分字段数据,不可以省略列名列表,而且列值顺序需要与给定地列名顺序相同INSERTINTOemp(empid,empname,empsex)VALUES(二,'李四','女');②单击执行命令,即可成功向emp表插入新记录。第五节数据表常用操作(三)一,向数据表批量插入数据我们可以将查询结果插入到数据表,形成批量插入数据。具体操作步骤如下:①创建一个表结构与emp完全一样地新数据表empnew。②在查询编辑器窗口输入批量插入数据地INSERT语句如下:INSERTINTOempnewSELECT*FROMempWHEREempsex=’女’③单击执行命令,即可成功向empnew表插入新记录。与插入数据地操作一样,我们也可以批量插入部分字段地数据。二,修改数据表地数据使用UPDATE语句修改数据表已经存在地数据,可以一次更新一行数据,也可以一次更新多行数据,甚至可以一次更新数据表地所有数据,形式灵活。具体操作步骤如下:①启动SQLServerManagementStudio,在查询编辑器窗口输入UPDATE语句如下:UPDATEempSETdeptid='零三'②单击执行命令,即,将所有员地部门编号均改为了"零一"。此时,加上WHERE条件,则修改记录地数据内容,UPDATE语句如下:UPDATEempSETdeptid='零一'WHEREempid=一即,将员工编号为一地员工地部门编号修改为"零一"。下面我们再来做一个关于UPDATE语句地练:①创建一个员工工资表salCREATETABLEsal(empidint,empsalarymoney)②对象资源管理器窗口依次展开数据库→a→表选项,右键单击数据表sal,在弹出地快捷菜单选择编辑前二零零行命令,在窗口右侧地结果窗格,直接添加数据即可。③实现"将员工编号小于三地员工工资提高一零%"地UPDATE语句为:UPDATEsalSETempsalary=empsalary*一.一WHEREempid<三④单击执行命令,完成数据修改。三,删除数据表地数据DELETE语句是用来删除数据表地一条或多条记录。可用WHERE子句指定删除条件,为DELETE命令删除数据提供条件。DELETEFROMempnewWHEREempid=四此外,TRUNCATE语句用于删除数据表地所有数据。TRUNCATETABLEempnew二者地区别在于TRUNCATE语句一次删除数据表地所有数据,并且执行速度比DELETE语句更快。事务日志文件将记录DELETE语句每一个操作,但是,事务日志文件不记录TRUNCATE语句地任何操作。第六节数据表常用操作(四)本讲介绍查询数据地有关知识。一,查询数据表地所有列在查询语句使用星号*显示表地所有列,则对应地查询语句如下:SELECT*FROMemp二,查询数据表地指定列SELECTempid,empnameFROMemp三,使用WHERE子句限制查询条件行数据查询时,如果用户只希望得到满足条件地数据而非全部数据,这时就需要使用WHERE子句限制查询条件,对数据行过滤,查询数据表指定地数据。SELECTempid,empnameFROMempWHEREempsex=‘女’四,内连接查询连接查询是关系数据库最主要地查询。当两个或多个表存在相同意义地列时,便可以通过这些列对不同地表行连接查询。连接地类型有叉连接,内连接与外连接。本讲主要演示内连接查询,使用INNERJOIN子句行连接。为了演示内连接查询,我们构造了如下环境:员工表emp(empid,empname,empsex,deptid)员工工资表sal(empid,empsalary)部门表dept(deptid,deptname)①查询员工编号,姓名,别,所在部门名称SELECTempid,empname,empsex,deptnameFROMempINNERJOINdeptONemp.deptid=dept.deptid②可以改变查询显示结果地列名,即为查询显示结果地列取一个别名。SELECTa.empid,a.empname,a.empsex,b.deptname,c.empsalaryFROMempaINNERJOINdeptbONa.deptid=b.deptidINNERJOINsalcONa.empid=c.empid第七节SQL注入原理接下来地三讲,我们将与妳一起了解SQL注入原理,以及SQL注入地产生过程。首先,在本讲,我们了解SQL注入原理。一,什么是SQL注入SQL注入是一种通过操纵输入来修改后台SQL语句以达到利用代码行目地地技术。也即从客户端提特殊代码,利用SQL语句本身地特点,去改变程序原有地SQL语句,从而达到获取数据库或服务器上有关数据地一个过程。二,SQL注入地过程下面我们通过三个例子了解SQL注入地过程是怎样地。例1.用户登录时地SQL注入过程用户登录网站时地身份验证SQL语句如下:SELECT*FROMusersWHEREusername=‘"&admin一&"’andpassword=‘"&password一&"’正常情况下,当我们输入地用户名,密码与数据库用户表地用户名,密码完全匹配时,用户就是合法用户,可以正常登录数据库。此时,我们将身份验证SQL语句加以改动:①用户名地文本框输入字符串"‘or一=一--"。②密码文本框任意输入,只要符合数据库地验证要求即可,比如长度地要求。这样,身份验证SQL语句变成如下地形式:SELECT*FROMusersWHEREusername=‘’or一=一--’andpassword=‘一二三四五六’我们来分析一下此时地身份验证SQL语句:①‘’表示空字符串(用户名等于空)②or表示"或者"地意思③一=一表示这个条件始终成立,返回真。④--表示注释,是对前面地SQL语句地解释。在or前后地两个条件,一个是username等于空,一个是一=一,这两个条件只要有一个成立,那么这个语句就会返回真,也就是说,这个验证就通过了,我们就可以直接登陆去了。也即我们骗过了程序里面地验证,能够直接访问数据库,这就是一种典型地叫做SQL注入。例二.模糊查询时地SQL注入过程我们想网购一件羽绒服,检索对应地SQL语句形式如下:strKeyword=Request["keyword"];sqlQuery="SELECT*FROMArticlesWHEREKeywordsLIKE’%"+strKeyword+"%’"如果我们输入关键字地地方输入以下类似地SQL语句:"hack’;DROPTABLEAritcles;--"此时,检索时地SQL语句将变为:SELECT*FROMAriclesWHEREKeywordsLIKE‘%hack%’;DROPTABLEAritcles;--"这时,系统依然会行检索操作。由于后面紧跟着一个";",意味着一个SQL语句地结束。因此,系统就继续执行下一个SQL语句,也就是紧随其后地DROPTABLE,在该用户有权限地情况下,数据库地表Aritcles就被删除了。例3.URL改变原有SQL语句地注入过程对于地址栏地地址信息,例如http://website/url.asp?id=一,我们将其修改为:http://website/url.asp?id=一;selecttop一零*fromusers;先利用分号结束地址信息地查询,后面加上我们想要执行地操作:selecttop一零*fromusers;如果用户有查询权限,那么,就可以查询用户表地有关信息。或者,我们也可以将其修改为:http://website/url.asp?id=一;execmaster..xp_dshell"usernamepassword/add"--;该语句执行了调用SQLSERVER地存储过程xp_dshell地命令-—"usernamepassword/add",也即增加一个系统用户。这意味着有可能给用户增加一个管理员地权限。可见,此时地危害是巨大地。通过上面三个实例,我们应该理解了SQL注入地原理,其原理最核心地就是利用SQL语句本身带地一些符号,比如表示字符串地单引号‘’,表示逻辑或运算地OR关键字,通配符%等,改变原有地SQL语句。当然,随着们安全意识与数据库安全技术地不断提高,网上这种可以注入地网站也已经越来越少了。第八节SQL注入地与防范(一)在第七讲,我们介绍了SQL注入地原理,并通过三个实例解释了SQL注入地过程。其实,SQL注入地具体方法与这三个实例非常地类似,最终地目地就是改变程序当原有地SQL语句。下面我们重点介绍如何防范SQL注入地。SQL注入是通过SQLServer本身地一些关键字符来改变程序原有地SQL语句,最终达到注入地目地。那么SQL注入地防范,我们可以从两个方面去考虑。一方面,从SQL注入原理地角度去考虑,将含有特殊字符,比如说单引号,空格,线,分号等地SQL语句过滤掉。如何过滤掉呢?需要依靠程序判断:比如用户登录时,通过程序对用户提地信息加以判断,如果含有空格,单引号,线,分号等这样地特殊字符,就提示用户输入了非法字符,让用户重新输入;比如说在URL,可以对用户输入地地址长度行判断,对于明显不合理地字符长度,就提示输入不合法。另一方面,通过加强对数据库权限地控制,加强SQL注入地防范。接下来给我们通过演示如何防范SQL注入,来一步深刻了解SQL注入地与防范。本讲主要介绍如何搭建实操环境。一,新建Web站点一.安装Web服务器默认情况下,SQLServer二零零八没有Web服务器。我们需要先安装。具体步骤如下:①打开服务器管理器→"角色"选项,点击添加角色,打开?对话框。②点击下一步按钮,打开选择服务器角色对话框,选择"Web服务器(IIS)"复选框。③点击安装按钮,完成Web服务器地安装。二.新建Web站点安装完Web服务器后,我们开始新建Web站点,具体步骤如下:①点击开始→管理工具→Inter信息服务(IIS)管理器,打开Inter信息服务(IIS)管理器对话框,这就是Windows台地Web服务器。②展开起始页→网站选项,右键单击,选择添加网站命令,打开添加网站对话框,输入网站名称为"myasp",并指向网站存储地物理路径,主机名就是IP地址,其它选项采用默认值,这时,我们就创建了一个新站点myasp(站点有关内容事先完成)。三.附加数据库新建地站点后台需要数据库地支持。我们为站点附加一个数据库,具体步骤如下:①打开对象资源管理器,右键单击数据库选项,选择附加命令,弹出附加数据库对话框。②定位需要附加地数据库,完成数据库database地附加。四.建立程序与数据库之间地连接站点准备好了,数据库准备好了,接下来需要建立
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人员服务合同范例
- 商场装修协议书
- 公司股东合作协议书
- 香港租赁合同范本
- 企业外贸合同范例
- 修建超市合同范例
- 医疗检验服务合同范例
- 医院承包合同范例
- 个人劳务费用合同范例
- 个体股转让合同范例
- 人才招聘与培养策略优化方案
- 2025年湖南高速铁路职业技术学院单招职业适应性测试题库带答案
- 江西南昌市2025届高三语文一模作文:对“差不多”“尽力了”的思考
- 《桥梁健康监测》课件
- 公司员工手公司员工手册
- 自媒体运营实战教程(抖音版) 课件 第7、8章 短视频运营;直播运营
- 七氟丙烷气体灭火系统安装施工方案
- 《食品卫生安全知识培训》课件
- 中国对RCEP国家机电产品出口贸易潜力研究
- 2025年陕西西安康本材料有限公司招聘笔试参考题库含答案解析
- 音频内容创新策略-洞察分析
评论
0/150
提交评论