要点应用程序知识点总结.docx
《要点应用程序知识点总结.docx》由会员分享,可在线阅读,更多相关《要点应用程序知识点总结.docx(12页珍藏版)》请在冰豆网上搜索。
![要点应用程序知识点总结.docx](https://file1.bdocx.com/fileroot1/2023-1/5/a041e2d8-9dcf-42b4-a258-c2a6dc29a7d6/a041e2d8-9dcf-42b4-a258-c2a6dc29a7d61.gif)
要点应用程序知识点总结
数据库为收集到的数据提供结构化机制。
任何类型的数据库应包含以下特点:
它不是将数据保存在网络中的几台不同的服务器上,从而进行集中化管理。
它的备份过程更加方便。
它提供事务持续性。
由于在一个中心位置保存和维护所有数据,它可以实现更大的一致性。
它提供恢复和容错能力。
它允许多个用户共享数据。
它提供安全控制,执行完整性检查、访问控制和必要的机密性。
数据库模型:
关系数据库模型、层次数据库模型、网络数据库模型、面向对象的数据库模型、对象-关系数据库模型。
关系数据库模型(RelationalDatabaseModel)使用属性(行)和元组(列)包含和组织信息。
关系数据库模型是今天应用最广泛的数据库组织形式,它以表(Table)的形式表示信息。
一个关系数据库由一些二维表构成,每个表包含行、列和存储单元(行与列的交叉位置)。
每个存储单元仅包含一个数据值,表示一个特定元组的特殊属性值主键(PrimaryKey)是将记录中的所有数据与一个唯一值联系起来的字段。
层次数据库模型(HierarchicalDatabaseModel)是另一种通用的数据库模型。
数据元素之间的结构和关系与关系数据库中不同。
层次数据模型由记录(Record)和字段(Field)构成,它们之间是逻辑的树形关系。
在层次数据库中,父节点可以有一个子节点或者多个子节点,也可以没有子节点。
树形结构包含许多分支(Branch),分支又会有一定数量的叶子(Leaf),或者数据字段。
这些数据有定义明确、预先指定的访问路径,但在建立关系方面不如关系数据库灵活。
层次数据库通常用于映射一对多的数据关系。
层次数据库是人们最开始创建的数据库模型,但它并不如关系数据库应用普遍。
最常用的层次模型为轻量级目录访问协议(LightweightDirectoryAccessProtocol,LDAP)模型。
这种模型也用在Windows注册表结构和不同的文件系统中,但最新的数据库产品通常并不采用这种模型。
网络数据库模型建立在层次数据库模型之上。
与层次数据库模型不同,在网络数据库模型中,要找到一个数据元素,你不必知道如何从一个分支进入另一个分支,然后从一个父节点进入一个子节点;网络数据库模型允许每个数据元素拥有多个父节点和子记录。
形成了一种类似网络的冗余结构,而非严格的树结构(网络数据库这个名称并不表示数据在网络上或在分布在整个网络中,它只是描述数据元素的关系)。
网络模型为了实现冗余而建立一种类似于网状网络拓扑的结构;另外,与层次模型相比,网络模型检索数据的速度更快。
这种模型使用一种记录(Record)和集合(Set)的结构。
一个记录包含字段,它可以通过一个层次化的结构列出。
集合是定义不同记录之间的一对多的关系。
一个记录可以是任何数量的集合的“所有者”,同一个“所有者”又可能是许多不同的集合。
这种结构可以为确立不同数据元素之间的关系提供相当大的灵活性。
面向对象的数据库(Object-OrientedDatabase)可以管理多种不同类型的数据(如图像、语音、文档和视频等)。
在关系数据库中,应用程序必须使用它自己的过程从数据库中获得数据,然后根据自己的需求处理这些数据;而传统的关系数据库并不像面向对象的数据库那样能提供访问数据的过程。
面向对象的数据库用类(Class)来定义数据属性和数据访问过程。
建立这种模型的目的在于突破关系数据库在保存和处理大量数据时遇到的限制。
另外,面向对象的数据库并不依赖SQL进行交互,因此,并非SQL客户端的应用程序也可以使用这种类型的数据库。
ODBMS并不如关系数据库那样用途广泛,但它主要用于工程和生物学等领域,并满足金融领域的某些需求。
对象-关系数据库或对象-关系数据库管理系统(ORDBM)是一种含有一个以面向对象编程语言编写的软件前端的关系数据库。
主要用于对保存的数据执行不同的商业逻辑。
开放数据库连接(ODBC)是一个应用程序编程接口(API),允许应用程序与本地或者远程的数据库通信。
应用程序向ODBC发出请求,ODBC把它翻译成数据库的命令。
应用程序可以不用关心数据库的驱动(Driver),这些都由ODBC完成。
是一种针对基本的数据访问技术(如OLEDB)的高级数据访问编程接口。
是一组用于访问数据来源,而不只是数据库访问的COM对象。
它允许开发者编写程序来访问数据,而不用知道数据库如何运行。
在使用ADO时,SQL命令不需要访问数据库。
对象链接和嵌入数据库(OLEDB)是运行在客户端或者服务器上的中间件,把数据分成多个部分。
它提供底层接口,允许访问不同数据库的数据以及不同格式的数据。
以下是OLEDB的一些特点:
●替代ODBC,扩展它的功能以支持更广泛的非关系数据库,如对象数据库和不一定执行SQL的电子数据表。
●一组基于COM的接口,允许应用程序以统一的方式访问保存在不同数据源中的数据。
●由于OLEDB以COM为基础,因此它仅限于基于微软Windows的客户端工具使用(与OLE无关)。
●开发者通过ActiveX数据对象(ADO)访问OLEDB服务。
●它允许不同的应用程序访问不同类型和来源的数据。
ActiveX数据对象(ADO)是一个API,允许应用程序访问后台数据库系统。
它是一组ODBC接口的集合,用可访问(Accessible)的对象来展示数据库的功能,进而操作数据库。
ADO通过OLEDB接口与数据库连接,可以用多种不同的脚本语言开发,下面是他的特点:
●是一种针对基本的数据访问技术(如OLEDB)的高级数据访问编程接口。
●是一组用于访问数据来源,而不只是数据库访问的COM对象。
●它允许开发者编写程序来访问数据,而不用知道数据库如何运行。
●在使用ADO时,SQL命令不需要访问数据库。
Java数据库连接性(JDBC)是一个API,允许Java应用程序与数据库通信。
应用程序可以直接或者通过ODBC逹接到数据库。
以下是JDBC的一些特点:
●是一个提供和ODBC相同功能的API,但专门为Java数据库应用程序设计。
●在Java平台与一系列数据库之间,使用独立于数据库的连接。
●JDBC是一种使Java程序执行SQL语句的JavaAPI。
可扩展标记语言(XML)—个数据结构化的标准,用于基于Web技术的程序的数据交换。
XML是一种自定义的标记语言,可以灵活地表现数据库中的数据。
Web浏览器可以解析XML的标签,向用户说明开发者如何表示数据。
数据定义语言(DDL)定义数据库的结构(Structure)和数据架、构(Schema)。
结构说明表的大小、键位置、视图和数据元素关系。
数据架构描述数据库存储和操作的数据类型以及它们的属性。
DDL定义了数据库的结构、访问操作和完整性过程。
数据操作语言(DML)包含了使用户能查看、操纵和使用数据库的所有命令(view、add、modify、sort和delete命令)。
査询语言(QL)使用户可以对数据库提出査询请求。
报表生成器(ReportGenerator)提供用户定义的数据过程输出。
数据字典是数据元素定义、架构对象(SchemaObject)和引用键(ReferenceKey)的集合。
架构对象可以包含表、视图、索引、过程、函数和触发器。
数据字典可以包含列的默认值、数据完整性信息、用户姓名、用户的权限和角色,以及审计信息。
它是一种通过控制数据库中有关数据的数据集中管理数据库各个部分的工具,提供成组数据元素和数据库之间的交叉引用关系。
数据库管理软件创建并读取数据字典,确认架构对象存在,并检查特定用户的进程访问权限。
当检索数据库时,用户对数据的访问被特定的视图所限制。
在数据字典中,定义了对每个用户的视图权限设置。
当需要增加新的记录、表、视图或者架构时,应该更新数据字典以反映这些变化。
主键是一个行的唯一标识符,它用于在关系数据库中编写索引。
每个行必须拥有一个主键。
当用户请求查询一条数据记录时,数据库通过这个唯一的主键跟踪这条记录。
数据库软件执行3种类型的完整性服务:
语义完整性(SemanticIntegrity),参考完整性(ReferentialIntegrity)和实体完整性(EntityIntegrity)。
语义完整性机制保证结构化规则和语义规则得到遵守。
这些规则与以下因素有关:
数据类型、逻辑值、唯一性约束以及可能负面影响到数据库结构的操作。
如果所有外键参考现有的主键,则说明一个数据库具有参考完整性。
应通过某种机制确保没有外键引用不存在的记录的主键,或者空值。
实体完整性保证了元组由主键值唯一确定。
为了保持实体完整性,每一个元组必须包含—个主键。
如果不包含主键,数据库就不能引用此元组。
一些可配置的操作被用来帮助保护数据库中数据的完整性,这些操作包括回滚、提交、保存点和检查点(Checkpoint)。
回滚(Rollback)指的是结束当前事务并取消对数据库做的更改。
这些更改可能是数据本身发生的更改或者是架构(Schema)修改。
执行回滚后,所做的变更被取消,数据库恢复到先前的状态。
回滚发生在数据库出现意想不到的故障或者外部接口处理程序出现错误时。
数据库恢复到原始状态,而不是仅仅重传或者更正部分数据。
同时,数据库会记录错误和操作日志,以便日后审査。
提交(Commit)是指结束事务操作,执行用户做出的数据变更。
顾名思义,一旦提交命令执行,用户变更就得到确认,并反映到数据库中。
这些变更可以是数据或者数据架构,
通过提交操作,其他用户或者应用程序就能访问到更新的数据。
如果用户数据变更的提交命令没有正确执行,那么数据库会执行回滚命令。
这保证了不会由于发生部分变更而引起数据混乱。
保存点(Savepoint)用来保证系统发生故障或者探测到错误时,数据库可以回到系统故障之前的状态。
两阶段提交(TwoPhaseCommit)机制是数据库用来确保数据完整性的另一种控制。
数据库通常会执行事务处理,表示用户与数据库同时进行交互。
与事务处理相反的是批处理(BatchProcessing),即数据库变更的请求被放入一个队列中并一次性激活——而不是在用户提交请求时立即激活。
聚合是指这种情形:
如果用户没有访问特定信息的权限,但是他有访问这些信息的组成部分的权限。
这样,他就可以将每个组成部分组合起来,得到受限访问的信息。
用户可以通过不同的途径得到信息,再综合得到本不具备明确访问权限的信息。
为了防止聚合,需要防止主体和任何主体的应用程序和进程获得整个数据集合的权限,包括数据集合的各个独立组成部分。
客体可以进行分类并赋予较高的级别,存储在容器中,防止低级别权限的主体访问。
对主体的查询,可以进行跟踪,并实施基于上下文的分类。
这将记录主体对客体的访问历史,并在聚合攻击发生时限制访问企图。
另一个安全问题是推理(Inference),和聚合很相似。
推理指的是主体通过他可以访问的信息推理出受限访问的信息。
当安全级别较低的数据可以描述出较髙级别的数据时,就会发生推理攻击。
例如,假设一个职员不应该知道军队在某个国家的行动计划,但是由于他可以访问到食品需求表格和帐篷位置的文档,那么他就可以根据食品和帐篷运送的目的地推算出军队正在向特定地区移动.一个办法是防止主体或者与主体有关的应用程序和进程间接得到能推论的信息。
在数据库开发过程中,可以实施基于内容或者基于情形的访问控制来解决这个问题。
基于内容的访问控制(Content-DependentAccessControl)是根据数据的敏感程度实施访问控制。
数据越敏感,能够访问数据的个体就越少。
基于上下文的访问控制是指软件根据请求的状态和次序,“了解”应允许哪些行为。
这表示,用户必须追踪用户以前的访问尝试,并知道什么顺序的访问步骤得到许可。
基于内容的访问控制就像是这样:
“Julio有权访问文件A吗?
”系统在ACL上检查文件A并返回一个响应:
“Julio能够文件这个文件,但只能读取它。
”基于上下文的访问控制则更像是这样:
“Julio有权访问文件A吗?
”系统然后检查几个数据:
Julio做了哪些其他访问尝试?
这个请求是否没有按照安全请求的顺序?
这个请求是否在系统允许的访问时间内(上午8时至下午5时)提出?
如果所有这些问题的答案都与一组事先设置的参数相符,则Julio能够访问文件A。
否则,他就不能访问文件A。
防止推理攻击的常见措施有单元抑制(CellSuppression)、采用数据库分隔,或者噪声和扰动。
单元抑制是一种用来隐藏或者不显示特定存储单元内容的技术,防止这些信息被用来进行推理攻击。
分隔数据库(PartitioningaDatabase)包括将数据库分成不同的部分,使未授权用户很难访问到可以用于推理攻击的相关数据。
噪声和扰动(NoiseandPerturbation)是一种在数据库中插入伪造信息的技术,目的是误导和迷惑攻击者,使得真实的推理攻击不能成功。
多数情况下,数据库在规划和开发过程中并没有将安全集成进来。
安全需要事后考虑,作为替代,往往需要开发一个数据库可信前端(FrontEnd)。
这种方法限制了安全粒度及可以发挥作用的安全功能。
数据库可以允许一个组或者一个特定用户访问特定信息,而限制另一个组访问。
这种功能通过数据库视图(DatabaseView)实现。
多实例(Polyinstantiation)建立了相同主键的多元组和由安全级别定义的实例之间的关系。
当一条信息插入到数据库中时,需要限制低级别用户访问这条信息。
通过建立另一组数据迷惑低级别用户,使用户认为他得到的信息是真实的,而不是仅仅限制信息的访问。
联机事务处理(OnlineTransactionProcessing,OLTP)用于多数据库集群提供容错和高性能的情况。
OLTP提供一种监测问题的机制,并在问题发生时立即进行适当处理。
OLTP的主要作用是确保事务正确发生或根本不发生。
通常,事务处理表示一些不可分割的操作独立发生。
如果其中一个操作失败,则剩下的操作需要回滚,以确保只向数据库中输入准确的数据。
处理事务的一组系统由一个软件OLTP产品管理和监控,以确保一切顺利平稳地进行。
OLTP可以对入站请求做负载均衡。
OLTP要实时记录所出现的事务(Transaction)。
在一个分布式环境下,这个过程同时修改多个数据库。
这个复杂的举动会引起许多关于完整性的威胁,所以数据库软件应该具有一种叫做ACID测试的特性。
原子性(Atomicity)把事务分成多个工作单元,确保所有的修改都生效或者没有一个修改生效。
数据库接受所有修改或者不接受任何修改。
—致性(Consistency)事务必须遵守每个数据库的完整性策略,保证在不同数据库中的数据的一致性。
隔离性(Isolation)事务完全分开进行,事务之间互不影响。
在事务完成之前,所有的修改都没有生效。
持久性(Durability)—旦事务在所有的系统上都被认为是正确的,它就要提交,数据库不能拒绝它。
为了信息检索和数据分析,将多个数据库或数据源联合成一个大的数据库。
从各个不同的数据库中提取数据传输到一个中央数据存储区,这个存储区就叫做数据仓库(DataWarehousing)。
这些数据被标准化,也就是说删除冗余的信息,并以数据仓库期望的方式对其进行格式化。
这使得用户只需查询一个实体,而不用访问和查询不同的数据库。
数据仓库提取数据的数据源是用于操作。
建立数据仓库是为了进行分析,从而做出商业预测决策,确定营销效率、商业趋势甚至是欺诈行为。
相关数据会先进行总结和相互关联,然后再呈现给用户。
用户得到的并不是最初的每一项数据,而是最能适合他的需求的更加精简的数据。
尽管数据仓库提供更方便的访问控制,但是由于它的集中性,数据仓库需要更严格的安全。
如果入侵者进入数据仓库,那么他就可以立即访问整个组织的数据信息了。
数据挖掘(DataMining)是对数据仓库中的数据进行进一步处理以得到更有用信息的过程。
数据挖掘工具被用来发现数据的联系和相关性来生成元数据(Metadata)。
元数据可以揭示单个信息子集中隐含的相关性,可以用来发现不明显的异常模式。
数据挖掘可以检查复杂的数据,通过模糊逻辑(FuzzyLogic)、集合理论(SetTheory)、专家系统(ExpertSystem)技术来简化查询,执行数学函数,查找到数据中的隐含模式。
元数据比它的原始数据来源更有价值。
数据仓库和数据挖掘的目标是提取信息,以了解与组织活动和趋势有关的知识,数据挖掘是一个分析数据仓库的过程,它在不知道数据所包含意义的情况下,用一些工具去分析数据的趋势、相关性、关联和异常。
元数据(Metadata)就是把数据放在数据库中,然后用工具挖掘出来的结果。
数据进入数据库,而元数据从数据库中出来。
数据挖掘也称作数据库知识发现(KnowledgeDiscoveryInDatabase,KDD),它组合了发现有效及有用模式的各种技巧。
下面是KDD系统用于发现这些模式的3种方法:
●分类根据共同的相似性来组合数据。
●可能性确定数据之间的相互依赖关系,并将可能性应用到它们的关系中。
●统计确定数据元素之间的关系,并使用规则发现。
系统或者产品通常会遵循如下生命周期阶段:
项目启动(ProjectInitiation)。
功能设计分析和规划(FunctionalDesignandPlanning)。
系统详细设计(SystemDesignSpecifications)。
软件开发(SoftwareDevelopment)。
.
安装/实施(Installation/Implementation)。
运行/维护(Operational/Maintenance)。
处理(Disposal)。
安全计划(SecurityPlan)应该在项目开发之初就制定,并且集成到功能计划中,以保证安全不被忽视。
第一个安全计划应该是广泛的,涉及各个方面,并且引用其他参考文档以得到更详细的信息。
这些参考文档包括计算机标准(如RFC文档、IEEE标准和一些最佳实践)、先前项目文档、安全策略、认证声明、事件处理计划以及国家或国际安全指南(如橘皮书、红皮书、通用准则等)。
这些文档将使安全计划更易读易用。
安全计划应该有自己的生命周期。
安全计划和项目管理活动需要进行审计,以保证安全相关的决定可被理解。
项目启动
项目组的每一个人都应当充分理解项目需求和项目使用的范围。
这个阶段包括对市场上已有产品的评估,明确现有厂商没有满足的用户需求。
需求也可能是来自现有客户和潜在客户的对特定产品的直接要求。
这个建议书将被提交到高级管理层,来决定是否启动项目,或者还需要向他们提供进一步的信息。
在这个阶段中将明确用户需求,确认产品的基本安全目标。
本阶段必须明确产品是否进行敏感信息的处理,定义这些信息的敏感度级别(LevelofSensitive)。
在风险管理过程建立之后,应该设计一个基本安全框架。
风险管理将在整个项目的生命期内持续进行。
风险管理
风险管理阶段最重要的一个方面就是明确要提问的正确问题。
风险分析
进行风险分析的目的是鉴别相关风险和潜在的危险后果。
项目组需要分析与项目失败相关的风险,这与安全风险分析有很大的不同。
安全风险包括其他不同的威胁和问题。
功能设计分析和规划
在这个阶段,需要制定项目计划来定义安全行为,制定安全检查点(SecurityCheckpoint)来保证安全控制措施(SecurityControl)的质量控制,以及识别配置过程和变更控制过程。
在这个阶段,进行资源确定、形成测试计划和评估准则来保证安全控制措施的正确测试。
正式的功能基线的形成意味着以一种正式的方式,通常是文档化,勾勒出产品的期望轮廓。
测试计划在每个阶段需要被更新,以保证所有问题都被正确测试。
在生命周期中可能需要不止一次风险分析。
因此在编码开始之前,需要有明确的目标和方向,
系统详细设计
信息模型(InformationalModel)规定被处理信息的类型以及如何进行处理。
功能模型(FunctionalModel)概括应用程序需要执行的任务和功能。
行为模型(BehavioralModel)说明应用程序在特定事务发生过程中和发生之后的状态。
这个阶段需要确认任务分解结构(WorkBreakdownStructure,WBS),包括开发阶段和实施阶段。
WBS包含测试、开发、分段实施、集成测试和产品发布等各个阶段的时限和详细活动。
系统设计是用来描述用户需求和系统内部行为的工具,它通过映射这两个方面来描绘系统是如何通过内部行为完成用户需求的。
在本阶段的开始,需要考虑产品的更多细节以及产品的工作环境。
功能性需求在最后确定。
本阶段解决了提供这种功能所需的工作机制,决定如何进行编码、测试和实施。
产品的模块化和重用(ModularityandReusability)问题,或者说产品组件问题,需要在这个阶段解决。
提供关键安全功能的代码设计应该尽量简洁,以便能够以尽可能明确的方式发现错误。
在早期阶段,需要考虑产品和组件的可测试性,而不是在后期考虑。
在这个阶段,需要进一步仔细考虑在项目启动阶段提出的问题,保证详细设计中解决了每一个问题。
在设计阶段所作的决定,对开发阶段而言是关键的。
设计是用户需求转化为软件的唯—途径;这样,软件设计就是整个产品开发的基础。
软件开发
在这个阶段,程序员和开发者都需要深度参与。
在这个阶段,程序员应当持一种不允许产生软件缺陷的态度进行工作。
正式或者非正式的测试应该尽快开始。
单元测试(UnitTesting)可以在开发早期开始。
不同的环境类型(开发、测试和生产)应当敢正确分离,功能和操作不应该重叠。
安全测试应当针对项目早期识别出的风险。
在这个阶段通常需要进行安全攻击和渗透测试来发现任何遗漏的软件缺陷,功能、性能和抗渗透性被进一步评价。
产品应该在不同的环境中测试不同的应用、不同的配置和不同的硬件平台。
安装/实施
实施阶段着重于如何使用和操作开发好的系统或者应用程序。
在这个阶段,用户已经购买了开发好的产品,并安装到工作环境中。
产品需要配置到一个正确的保护等级,通过执行功能和性能测试并进行结果分析,验证产品是否满足用户的安全需求。
系统配置应当被记录到文档中。
要开发出用户指南和运行维护手册,以使用户知道如何正确使用系统,使技术人员知道在需要时如何正确配置产品。
需要监视安全活动,以确
保系统或应用以服务水平协议(ServiceLevelAgreement,SLA)保证的方式运行。
认可(Accreditation)应当在开发之后,系统应用开始运行之前进行。
这个过程需要遵循认证过程,正式或者非正式地测试所有的安全特征,以确认产品是否完成所需的安全功能。
认证(Certmcation)是一个检查和评估安全控制的过程,通常由外部独立的机构执行。
认可是管理层对系统的正式接受,也是明确对风险的接受。
—旦确认新系统提供的安全功能并且理解和接受残余风险,管理层应当发布一个正式的认可声明。
应当打开审计功能并监视事故恢复计划(ContingencyRecoveryPlanning),开发响应程序并进行测试,以保证系统和产品在系统故障和紧急情况下能够正确响应。
运行/维护
运行保证(OperationalAssurance)通过以下活动执行:
进行弱点测试、系统行为监控、事件审计。
测试类型
单元测试(Unitesting)体组件位于一个受控的环境中,程序员在这里确认数据结构、逻辑和边界条件。
集成测试(IntegrationTesting)验组件是否按设计规范中规定的那样协同工作。
验收测试(AcceptanceTesting)保代码满足客户的需求。
回归测试(RegressionTesting)进行系统变更后重新进行测试,以确保功能性、性能和保护级别。
垃圾收集(Garba