已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络数据库技术与应用 课件 第8章西安航空职业技术学院王姝制作 第8章数据完整性和安全性 8 1基本概念8 2几种常见的约束8 3触发器及其创建8 4实例教学 触发器应用8 5数据安全性8 6事务 锁和批8 7小结 随着网络的发展 电子商务 网上银行 在线课堂等都需要后台数据库的支持 从而使网络数据库的保护问题更加重要 数据库的保护有多方面的内容 概括起来主要是保护后台数据库系统的完整性和安全性 使之具有随时可正常运行的功能 防止机密数据的泄漏 数据库的完整性是指为了防止数据库中存在不合语义的数据 防止错误信息的输入与输出造成无效操作或错误结果 数据库的安全性是为了防止恶意地破坏和非法地存取 使用 安全性措施的防范对象是非法用户和非法操作 完整性措施的防范对象是不合语义的数据 8 1基本概念 8 1 1约束为维护数据库的完整性 DBMS必须提供一种机制来检查数据库的数据 看其是否满足语义规定的条件 我们将这些加在数据库数据之上的语义约束条件称为数据库完整性约束条件 简称约束 它们与数据一起存入数据库中 设计数据库表时 可对表中的一个字段或多个字段的组合设置约束条件 让SQLServer检查该字段的输入值是否符合这个约束条件 约束条件分为表级约束和字段级约束两种 表级约束是一个表中几个字段的约束 字段级约束则是对表中一个字段的约束 8 1 2数据完整性根据数据完整性措施所作用的数据库对象和范围不同 可以将数据完整性分为以下几种 1 实体完整性又称为行完整性 它把表中的每行都看作一个实体 要求所有行都具有惟一标识 在SQLServer中 可以通过建立PRIMARYKEY约束 UNIQUE约束等措施来实施实体完整性 例如 对 客户信息表 客户编号就可以作为主键 每个客户的编号能够惟一地确定该客户对应的记录信息 那么在输入数据时 则不能有相同客户编号的记录存在 通过对客户编号这一字段建立主键约束 可实现 客户信息表 的实体完整性 2 域完整性域完整性又称为列完整性 它要求表中指定列的数据具有正确的数据类型 数据格式和有效的数据范围 域完整性可以通过制定相应的规则 FOREIGNKEY约束 CHECK约束 默认值对象等方法实现 如对于 学生成绩表 学生的某门课程的学分应在10分以内 为了对学分这一数据项输入的数据进行限制 可以定义该表的学分字段的约束条件 例8 1定义 学生成绩表 以及学分字段的约束条件CREATETABLE学生成绩表 课程号CHAR 6 NOTNULL 课程名CHAR 18 NOTNULL 学分TINYINTCHECK 学分 0and学分 10 NULL PRIMARYKEY 课程号 3 参照完整性又称为引用完整性 它保证主表 被参照表 中的数据与从表 参照表 中数据的一致性 在SQLServer中 它通过主键约束PRIMARYKEY和外键FOREIGNKEY约束实现 在数据库管理系统中 保证数据库的完整性是非常重要的 参照完整性确保键值在所有表中一致 在被参照的表中 当其主键值被其他表参照时 该行记录既不能被删除 也不允许被改变 返回 8 2几种常见的约束 建立和使用约束的目的就是为了保证数据的完整性 约束作为SQLServer强制实行的应用规则 它能够限制用户存放到表中的数据的格式和可允许的值 约束作为数据库定义的一部分 在CREATETABLE语句中申明 所以约束往往又被称作申明完整性约束 当表被删除时 附属于该表的所有约束定义也将被删除 1 主键约束 PRIMARYKEY PRIMARYKEY即前面提到的主键 用它保证表中每条记录的惟一性 设计一个数据库表时 可用一个字段或多个字段 最多16个字段 的组合作为这个表的主键 用单个字段作为主键时 使用字段约束 用字段组合作为主键时 则使用表级约束 每个表只能有一个主键 虽然一个表也可以不设主键 但最好还是设置一个主键 如果不在主键字段中输入数据 或输入的数据在前面已经输入过 则这条记录将被拒绝 2 外键约束 FOREIGNKEY FOREIGNKEY即前面提到的外键 外键字段与其他表中的主键字段或具有惟一性的字段相对应 其值必须在所引用的表中存在 而且所引用的表必须存放在同一数据库中 如果在外键字段中输入一个非NULL值 但该值在所引用的表中并不存在 则这条记录也会被拒绝 因为这样将破坏两表之间的关联性 外键字段本身的值不要求是惟一的 3 其他约束除主键约束和外键约束外 常见的约束还有以下几种 1 NULL与NOTNULL若在一个字段中允许不输入数据 则可以将该字段定义为NULL 如果在一个字段中必须输入数据 则应当将该字段定义为NOTNULL 一个字段中出现NULL值意味着用户还没有为该字段输入值 NULL值既不等价于数据值型数据中的0 也不等价于字符型数据中的空串 2 UNIQUE如果一个字段值不允许重复 则应当对该字段添加UNIQUE约束 与主键不同的是 在UNIQUE字段中允许出现NULL值 但为保持惟一性 最多只能出现一次NULL值 3 CHECKCHECK约束用于检查一个字段或整个表的输入值是否满足指定的检查条件 在表中插入或修改记录时 如果不符合这个检查条件 则这条记录将被拒绝 4 DEFAULTDEFAULT约束用于指定一个字段的默认值 当尚未在该字段中输入数据时 该字段中将自动填入这个默认值 若对一个字段添加了NOTNULL约束 又没有设置DEFAULT约束 就必须在该字段中输入一个非NULL值 否则将会出错 返回 8 3触发器及其创建 1 触发器的功能触发器是一种特殊类型的存储过程 与表紧密相连 当用户修改表中的数据时 触发器将自动执行 使用触发器可以实现多个表间数据的一致性 一般可以使用触发器完成如下功能 1 级联修改数据库中相关的表 如在产品信息数据库中有两个表 客户表cust table和订单表order table 订单表order table中包含订单信息和有业务往来的客户信息 如果出于某一需要删除了客户表cust table中的某一客户信息 那么在订单表order table中所有与该客户有关的记录都应该做相应的调整 2 执行比检查约束更为复杂的约束操作 在触发器中可以书写更加复杂的T SQL语句 如可以引用多个表 并使用IF ELSE等语句做更加复杂的检查 3 拒绝或回滚违反引用完整性的操作 检查对数据表的操作是否违反引用完整性 并选择相应的操作 4 比较表修改前后数据之间的差别 并根据差别采取相应的操作 如 如果规定每次工资的变动幅度不能超过40 使用触发器可以将修改后的表数据和修改前的表数据进行比较 如果超过40 的限制 可以回滚该修改操作 2 触发器类型和触发操作触发器可以分为AFTER触发器和INSTEADOF触发器两种 AFTER触发器 这种类型的触发器在数据变动 INSERT UPDATE DELETE操作 完成以后才被激发 一般情况下 对表数据的操作有插入 修改 删除 因而维护数据的触发器也可分为三种类型 INSERT UPDATE和DELETE 同一个表中可以使用多个触发器 即使同一类型的触发器 也可使用多个 它对变动的数据进行检查 如果发现错误 将拒绝或回滚变动的数据 INSTEADOF触发器 INSTEADOF触发器是SQLServer2000中新增的功能 这种类型的触发器将数据变动以前被激发 并取代变动数据的操作 INSERT UPDATE DELETE操作 转而去执行触发器定义的操作 在建立触发器时 还必须指定触发操作 INSERT UPDATE DELETE操作 至少要指定一种 也可以同时指定多种 在同一个数据表中可以创建多个AFTER触发器 但是在表或视图上 每个INSERT UPDATE DELETE语句最多可以定义一个INSTEADOF触发器 3 创建触发器方式一利用SQL命令创建触发器用SQL命令创建触发器的语法格式如下 CREATETRIGGERtrigger nameON table view WITHENCRYPTION FOR AFTER INSTEADOF DELETE INSERT UPDATE NOTFORREPLICATION ASSql statement N 方式二用企业管理器创建触发器用企业管理器建立触发器的步骤如下 1 登录到SQLServer服务器后 展开服务器组 然后展开服务器 2 展开将定义触发器的表所属的数据库 然后单击 表 文件夹 3 选择将在其上创建触发器的表 用鼠标右击 出现快捷菜单 选择 所有任务 菜单项下的 管理触发器 子菜单项 4 在 名称 对应的下拉列表框中单击 新建 在 文本 框中输入触发器文本 若要检查语法 单击 检查语法 按钮 返回 8 4实例教学 触发器应用 下面在客户表cust table中创建一个AFTERINSERT触发器 当有新客户加入时 给出欢迎信息 在 定义触发器的界面 中的 文本 框中输入如下SQL代码 CREATETRIGGERnew cust 新建触发器 ONcust tableAFTERINSERTASPRINT 欢迎您的加盟 GoSETNOCOUNTON 关闭影响行数信息 INSERTINTOcust table Cust id Cust name Credit limit Linkman Phone VALUES 1001 JCPInc 500000 张言 53412573 GO 用户在创建触发器以后的使用过程中 可能会发现使用触发器虽然可以保证数据引用的完整性 但却会影响系统性能 有时要将触发器升级为新版本 这都需要删除触发器 可以在图8 2所示的 定义触发器的界面 中选定相应的触发器名称后 单击 删除 按钮 也可以用T SQL语句删除 删除触发器的语句为 DROPTRIGGERtrigger name trigger name2 返回 8 5数据安全性 8 5 1用户安全管理8 5 2权限安全管理8 5 3使用SQLServer管理用户返回 8 5 1用户安全管理 所谓用户安全是指用户身份的合法性 用户身份的验证是通过用户标识与鉴别来实现的 登录账户也称为登录标识符 LoginID 它是控制访问SQLServer系统的账户 如果事先没有指定有效的登录账户 用户是不能连接到SQLServer的 在SQLServer中 有两类登录账户 一类是由SQLServer自身负责身份验证的登录账户 另一类是登录到SQLServer的WindowsNT 2000网络账户 可以是组账户或用户账户 使用这些账户进行登录时 SQLServer将 相信 WindowsNT 2000操作系统己经验证了的用户身份而不再进行身份验证 显然 在Windows98 Me操作系统下使用SQLServer桌面版时是不能使用第二类登录账户的 返回 8 5 2权限安全管理 建立连接后 用户必须使用特定的用户账户才能对数据库进行访问 才可以查看经授权可以查看的表和视图 只能执行经授权可以执行的存储过程和管理功能 将这种机制称为权限管理 定义一个用户的存取权限就是要定义这个用户可以在哪些数据对象上进行哪些类型的操作 也称为授权 当验证了用户的身份并允许其登录到SQLServer之后 在用户访问的每个数据库中都要求设置单独的用户账户 这样做的目的是为防止一个用户在连接到SQLServer之后 对服务器上的所有数据库进行访问 每个数据库中的用户账户都用于为该数据库中的对象 表 视图和存储过程等 设置安全权限 无论是WindowsNT账户 SQLServer用户账户 用户所属的WindowsNT组 还是SQLServer登录账户 都可以在数据库中映射为不同的数据库用户账户 用户获得对数据库的访问权限之后 SQLServer就可接收并执行命令 用户在数据库中进行的所有活动 都是通过T SQL语句传到SQLServer中的 当SQLServer连到这些语句时 将确定用户是否具有在数据库中执行该语句的权限 如果用户没有执行语句的权限 或者没有访问该语句所使用对象的权限 SQLServer将向用户返回一个权限错误 返回 8 5 3使用SQLServer管理用户 安装SQLServer后 启动企业管理器 在树形窗格中依次展开服务器组 服务器和 安全性 然后单击 登录 节点 就会在内容窗格中看到以下三个内置登录账户 如果系统采用的是Windows98操作系统 只能看到系统内置的登录账户sa 1 域名 Administrator 一个WindowsNT用户账户 允许作为SQLServer登录账户使用 2 BUILTIN Administrators 一个WindowsNT组账户 凡属于该组的用户账户都可作为SQLServer登录账户使用 3 sa是SQLServer系统管理员登录账户 需要特别说明的是 在安装SQLServer之后 系统管理员登录账户sa并没有设置密码 在这种情况下 建议立即为sa账户设置一个登录密码 以防止未经授权使用sa登录访问SQLServer 另外 虽然sa是内置的系统管理员登录账户 但最好不要在日常管理中使用sa进行登录 只有当其他系统管理员不可用或忘记了密码 没有其他方法登录到SQLServer的情况下 才使用sa这个特殊的账户 1 添加登录账户在对SQLServer进行维护和管理时 通常需要添加一些登录账户 有了登录账户 才能连接到SQLServer 添加登录账户的任务可以使用企业管理器或T SQL语句来完成 在此主要介绍用企业管理器对账户的操作 启动企业管理器 在 树 窗格中 展开服务器组 选择展开一个服务器 展开 安全性 文件夹 单击 登录 节点 右击内容窗格的空白处 从弹出的快捷菜单中选择 新建登录 L 命令 在弹出的 SQLServer属性对话框 中选择 常规 选项卡 在 名称 后的文本框中输入一个SQLServer登录账户名称 如果要在连接SQLServer时使用Windows身份验证模式 请选择 WindowsNT身份验证 选项 并在 域 M 列表中选择一个WindowsNT 2000域 如果要在连接SQLServer时使用SQLServer身份验证模式 请选择 SQLServer身份验证 选项 并在 密码 P 后的文本框中输入一个登录密码 在 默认设置 区域中可以定义登录到SQLServer之后将连接到的数据库 默认值为系统数据库master 在 语言 后的列表中可设置显示给用户的信息所用的默认语言 完成上述设定后 单击 确定 按钮 在弹出的确认密码对话框中进一步确认密码后 关闭对话框 2 修改登录密码对于一个已经存在的SQLServer登录账户 可以用企业管理器添加或更改相应的登录密码 操作过程如下 1 启动企业管理器 2 在 树 窗格中 展开服务器组 选择展开一个服务器 3 展开 安全性 文件夹 单击 登录 节点 4 在内容窗口中 右击想要修改密码的那个登录账户 从弹出的快捷菜单中选择 属性 命令后 弹出 登录属性 对话窗口 可在 密码 P 后的文本框中输入 或修改 登录密码 5 单击 确定 当出现 密码确认 窗口时 再次输入密码 单击 确定 即可 3 禁止登录账户若要暂时禁止一个SQLServer登录账户连接到SQLServer 只需修改该账户的登录密码就行了 若要暂时禁止一个使用Windows身份验证的登录账户 一个组或一个用户 连接到SQLServer 可以用企业管理器实现 操作如下 1 在 树 窗格中 展开服务器组 然后选择展开一个服务器 2 展开 安全性 文件夹 单击 登录 节点 3 在内容窗口中 右击想要禁止的那个登录账户 从弹出的快捷菜单中选择 属性 命令后 弹出 登录属性 的对话窗口图 在该窗口中选中 拒绝访问 Denyaccess 选项后 单击 确定 按钮即可 4 删除登录账户若要永久禁止使用一个登录账户 无论它使用哪种身份验证模式 连接到SQLServer 就应该将该登录账户删除 在企业管理器中进行如下操作 1 在 树 窗格中 展开服务器组 选择展开一个服务器 2 展开 安全性 文件夹 单击 登录 节点 3 在内容窗口中 右击想要删除的那个登录账户 从弹出的快捷菜单中选择 删除 命令或者按delete键 在弹出的确认对话框中单击 是 确定对该登录账户的删除操作 返回 8 6事务 锁和批 8 6 1事务的概念事务是SQLServer中的一个重要概念 在数据库应用中普遍使用 一个事务作为一个整体来执行 它的关键在于 如果在执行过程中发生了错误 可以回退事务 使数据库恢复到事务开始之前的状态 就好像什么都没发生过一样 从而有效地保证数据的完整性 实现数据库的并发访问 事务具有以下几个重要属性 原子性 一个事务对数据库所作的修改要么全部被执行 要么全部被取消 从保持数据状态上来讲 它是一个不可分割的整体 一致性 事务所作的修改必须遵守数据库中的各种约束 规则的要求 隔离性 如果有两个或者多个事务 这些事务必须按照一定的时间顺序排序执行 而不能在执行一个事务的同时又执行另一个事务 这可以通过锁来实现 4 永久性 事务一旦完成 它对数据库所进行的修改将被永久保留 另外 SQLServer每次启动时都会根据事务日志来修复可能存在的错误 回退所有未完成的事务 8 6 2事务的分类事务可分为显式事务 隐式事务 自动事务和分布式事务 1 显式事务显式事务就是由用户显式地指定具体的事务处理语句而定义的事务 显式事务由以下几个事务处理语句构成 1 BEGINTRANSACTION语句用于定义事务的开始 当开始一个事务后 就在内存中为这次操作开辟一个缓冲区 在实际应用中 事务往往是嵌套的 即在一个事务还没有处理完前又开始了另一个事务 这样高层的事务在提交自己的修改以前就可以判断低层的事务是否成功提交或被取消 通常BEGINTRANSACTION返回一个整型值 表示该事务所在的嵌套层 最高层的事务将返回1 2 COMMITTRANSACTION语句标志着事务的结束 在事务中对数据库所作的修改在此时提交 3 ROLLBACKTRANSACTION语句用于取消此次事务以来所有对数据源所做的操作 这是结束事务的一种方式 一般是因为在事务的执行过程中发生了错误 需要执行这条语句使数据库放弃在事务中所作的更改 数据恢复到事务开始之前的状态 执行ROLLBACKTRANSACTION后 本次事务将结束 2 隐式事务用户可以执行SETIMPLICIT TRANSACTIONON语句使SQLServer进入隐式事务处理模式 这时用户不必再执行BEGINTRANSACTION来启动事务处理 而只需使用COMMITTRANSACTION或ROLLBACKTRANSACTION来结束事务 当用户执行了COMMITTRANSACTION或ROLLBACKTRANSACTION之后 SQLServer就自动进入下一个事务 将这种事务称为隐式事务 3 自动事务模式这是SQLServer默认的事务处理方式 当任何一条语句被成功执行以后 它对数据库所作的修改都将被自动提交 如果发生错误则自动回退 如果想取得更大的灵活性 可以用BEGINTRANSACTION进入显式事务模式或者打开IMPLICIT TRANSACTION进入隐式事务模式 这时 可以将若干条数据库操作语句组合成一个事务 4 分布式事务前面所介绍的事务都是在一个服务器上的操作 还有一种称为分布式事务的用户定义事务 分布式事务跨越两个或多个服务器 通过建立分布式事务并执行它 通过事务管理器负责协调事务管理 保证数据的完整性 主要的事务管理器是Microsoft分布式事务处理协调器MSDTC 对于应用程序 管理分布式事务很像管理本地事务 事务结束时 应用程序请求提交或回滚事务 不同的是 分布式提交必须由事务管理器管理 以尽量避免出现因网络故障而导致一个事务由某些资源成功提交 由另一些资源管理器回滚的情况 8 6 3锁在实际应用中 可能会出现对数据库的并发操作 如多个用户同时对同一数据进行修改 或者查询正在被别的进程更新的数据 这都可能引起数据的混乱 为了有效地控制多用户的并发操作 SQLServer引入了资源锁机制 1 锁的类型SQLServer中有不同类型的锁 具体为 1 排它锁 它不允许别的事务读取或修改已被锁定的资源 2 共享锁 它允许别的事务读取已被锁定的资源 但不允许对锁定的资源进行修改操作 3 修改锁 在可能进行修改操作的开始阶段运用修改锁来锁定资源 在需要修改时 将修改锁转变为排它锁或共享锁 4 结构锁 在进行表的创建或者修改时 SQLServer使用结构修改锁 当编译或查询时 SQLServer使用结构稳定锁 5 意向锁 意向锁说明SQLServer有在该资源上获得共享锁或者排它锁的意向 意向锁可分为共享意向锁 排它意向锁和共享排它意向锁三种 2 锁的粒度被锁定的资源单位称为锁的粒度 或称锁定粒度 根据情况 SQLServer中的锁可以灵活运用在不同的资源层次上 锁定粒度由小到大可分为有以下几种 RID行标识符 锁定表中的单行数据 键值 具有索引的行数据 页面 一个数据页面或者索引页面 区域 一组连续的行数据页或索引页面 表 整个表 数据库 整个数据库 锁的粒度不同 系统的开销不同 锁定粒度与数据库访问并发度是一对矛盾 锁定粒度大 系统开销小 但并发度会降低 锁定粒度小 系统开销大 但可提高并发度 在多用户环境中 当不同的用户分别锁定一资源 又都在等待对方首先释放该资源时 就会出现无限等待的情况 这称为死锁 为了减少死锁的发生 在设计程序时 应尽量减少事务对资源的锁定时间 SQLServer定期查看并标识所有的锁定请求 如果在下一次查看过程中发现某请求仍然处于等待状态 SQLServer将会搜索系统中是否有死锁现象 如果存在死锁 则根据死锁的优先级别 先结束一个优先级较低的事务 除此之外 用户还可以设置LOCK timeout来设置程序请求锁定的最长等待时间 如果一个锁定请求等待超过了最长等待时间 则该语句被自动取消 设置LOCK timeout的语法格式为 SETLOCK timeout timeout period 其中 timeout period以毫秒为单位 如要将当前的锁定请求时间限设
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 古诗教学:送元二使安西专题课程方案
- 企业员工职业发展规划与培训体系搭建
- 小学英语新教师培训经验总结报告
- 创业企业融资方案书模板
- 学生心理健康教育课件与方案
- 小学快乐阅读活动组织方案
- 工厂安全生产责任险管理方案范文
- 国际贸易争端解决机制与法律实务考试及答案
- 波形护栏施工方案
- 注塑设备安全培训
- 《混凝土碳排放计算方法及评价标准》 DB64-T 1954-2023
- 2024-2025学年统编版道德与法治八年级下册期末检测卷(含答案)
- 机器人驱动与运动控制 课件 第7章 永磁同步电机及其驱动控制技术
- 2024年小学科学教师专业考试试题及答案(三套)
- ZYJ7道岔故障处理
- (正式版)SHT 1844-2024 工业用乙烯、丙烯中痕量氢气、一氧化碳、二氧化碳的测定 气相色谱-氦离子化检测法
- 销售技巧-连带销售课件
- GB/T 18849-2023机动工业车辆制动器性能和零件强度
- 成年片黄网站色网址
- 二次结构施工工艺标准化图文并茂
- 全过程跟踪审计和结算审计服务方案技术标投标方案
评论
0/150
提交评论