数据库安全保护.ppt
*北京林业大学软件教研室*(2)实体完整性约束:说明了关系键的属性列必须唯一,其值不能为空或部分为空。(3)参照完整性约束:说明了不同关系的属性之间的约束条件,即外部键的值应能够在参照关系的主键值中找到或取空值。(4)统计约束,规定某个属性值与一个关系多个元组的统计值之间必须满足某种约束条件。例如,规定系主任的奖金不得高于该系的平均奖金的40%。,不得低于该系的平均奖金的20%。这里该系平均奖金的值就是一个统计计算值。其中,实体完整性约束和参照完整性约束是关系模型的两个极其重要的约束,被称为关系的两个不变性。统计约束实现起来开销很大。*北京林业大学软件教研室*5.2.3.2从约束对象的状态分为静态约束和动态约束1.静态约束静态约束是指对数据库每一个确定状态所应满足的约束条件,是反映数据库状态合理性的约束,这是最重要的一类完整性约束。上面介绍的值的约束和结构的约束均属于静态约束。2.动态约束动态约束是指数据库从一种状态转变为另一种状态时,新旧值之间所应满足的约束条件,动态约束反映的是数据库状态变迁的约束。例如,学生年龄在更改时只能增长,职工工资在调整时不得低于其原来的工资。5.2.4数据完整性的实施*北京林业大学软件教研室*声明式数据完整性声明式数据完整性是将数据所需符合的条件融入到对象的定义中,这样SQLServer会自动确保数据符合事先制定的条件。声明式数据完整性的特点是:通过针对表和字段定义声明的约束,可使声明式数据完整性成为数据定义的一部分。使用约束、默认值与规则实施声明式数据完整性。*北京林业大学软件教研室*程序化数据完整性如果所需符合的条件以及该条件的实施均通过所编写的程序代码完成,则这种形式的数据完整性称为程序化数据完整性。程序化数据完整性的特点是:①程序化数据完整性可以通过相关的程序语言及工具在客户端或服务器端实施。②SQLServer可以使用存储过程或触发器实施程序化数据完整性。综上所述,实施数据完整性的方法有5种:约束(Constraint)、默认值(Default)、规则(Rule)、存储过程(StoredProcedure)、触发器(Trigger)。5.2.5规则*北京林业大学软件教研室*规则(Rule)就是数据库对存储在表中的列或用户自定义数据类型中的值的规定和限制。规则与其作用的表或用户自定义数据类型是相互独立的,即表或用户自定义对象的删除、修改不会对与之相连的规则产生影响。规则与CHECK约束很相似。规则是单独存储的独立的数据库对象。规则和约束可以同时使用,表的列可以有一个规则和多个CHECK约束。在ALTERTABLE和CREATETABLE命令中使用的CHECK约束是更标准的限制列值的方法,但CHECK约束不能直接作用于自定义数据类型。*北京林业大学软件教研室*创建规则CREATERULErule_nameAScondition_expression[例5-12]创建学生年龄规则。CREATERULEage_ruleAS@age=18and@age=50查看规则用存储过程sp_helptext查看规则sp_helptext[@objname=]name其中,[@objname=]‘name’字句指明对象的名称,用sp_helptext存储过程查看的对象可以是当前数据库中的规则、默认、触发器、视图、或未加密的存储过程。[例5-13]用存储过程sp_helptext查看名称为“age_rule”的规则内容。EXECsp_helptext’age_rule’condition_expression中的表达式必须以字符@开头规则的绑定与松绑*北京林业大学软件教研室*1创建规则后,规则仅仅是一个存在于数据库中的对象,并未发生作用。需要将规则与数据库表或用户自定义对象联系起来,才能达到创建规则的目的。2所谓绑定就是指定规则作用于哪个表的哪一列或哪个用户自定义数据类型。3解除规则与对象的绑定称为“松绑”。用存储过程sp_bindrule绑定规则sp_bindrule[@rulename=]rule, [@objname=]object_name [,futureonly]注:‘futureonly’选项仅在绑定规则到用户自定义数据类型上时才可以使用。[例5-14]绑定规则age_rule到S表的字段Age。EXECsp_bindruleage_rule,S.Age‘规则对已经输入表中的数据不起作用。