PB下实现多用户安全访问.docx

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PB 下实现多用户安全访问 (深圳:独孤求败 2003-05-27) PowerBuilder(以下简称 PB)是一个非常优秀的数据库前端开发工具,在 C/S 结构中它处于客户端。在PB 中,所有关于数据库方面的操作都交给 DBMS 完成,在一般情况下不用考虑多个用户同时访问数据库的问题。但 DBMS 提供的多用户支持仅仅限于 SQL 语句级,即保证两条 SQL 语句不会同时对一条记录进行操作。 比如,有 SQL 语句 A 和 B: A:Update target Set col1=col1+1 Where keycol=key; B: Update target Set col1=col1+2 Where keycol=key; 其中,keycol 是表 target 的关键字,col1 是待修改的字段。 显然,A 语句和 B 语句都是可以再细分的操作,具体可以细分如下: A1: 查找 keycol 值为key的记录A2: 读取 col1 字段的值,并计算结果A3: 将结果写回数据库 B1-B3 同 A1-A3 一样,只是 B2 在具体计算上有所不同。 如果 DBMS 无法保证 A 语句和 B 语句的互斥,就有可能发生写丢失。比如 col1 的值为 2,如果执行次序为(A1,A2,A3,B1,B2,B3)或(B1,B2,B3,A1,A2,A3),即 A、B 语句互斥,结果应为 5。但如果执行次序为(A1,A2,B1,B2,B3,A3),结果 col1 的值就成了 3,B3 进行的写操作就丢失了。所以 DBMS 在设计时,充分考虑了 SQL 语句级的并发性。但是,如果上面的 A 和 B 不是单条 SQL 语句,而是 SQL 语句序列, 那DBMS 就无法保证并发性的安全了。尤其是考虑到 PB 可以在脚本(Script)中混排 SQL 语句和 PB 语句, 这种安全性就更加无法保障。比如语句序列C 是由 SQL 语句和 PB 语句混排而成,同时有多个实例运行,让我们看一看在这种情况下,如何保证并发的安全性。为了方便起见,在例子中的 PB 语句是用伪语言写的。语句序列 C 为: C1:select col1 into :value from target where keycol=key; //将 col1 的值赋给变量 value C2:chg=value100 //chg 为逻辑变量 C3:if chg //执行 SQL 语句 A else //执行 SQL 语句 B end if 其中,A、B 指的是前面的 SQL 语句 A 和 B。 如果两台计算机上同时运行序列 C,就有可能发生写丢失。因此,语句序列一级的并发安全性必须由程序来保证。上述问题如何解决呢?在写记录时,检查该记录是否被修改过,如果被修改过,就放弃写操作。 以上面的语句序列 C 为例,只要在 C1 执行完毕后,将读到的记录值存下来,等到 C3 执行的时候,在A 和 B 中加入相应的 where 条件,比较现在的记录值是否与原来一致,就能够判断出在 C1 和 C3 之间该记录是否被修改过。设表 target 只有 keycol 和 col1 两列,那么只用修改 A 和 B,就能将序列 C 改为具有并发安全性的序列。 A 和 B 的修改如下: A:Update target Set col1=col1+1 Where keycol=key And col1=:value; B: Update target Set col1=col1+2 Where keycol=key And col1=:value; 其中,变量 value是前面在 C1 运行的时候中记录下来的。 如果表中还有其他序列,就要修改语句 C1,将其他序列同时记录下来,并在 A 和 B 的条件中加入相应的判断条件。在使用这种办法的时候要注意,应该用一条Select 语句来记录表中的记录值,而不要分散到多条语句中去。同样,在写记录时,应该在 Update 语句中加入判断条件,而不要先判断,再写入。否则, 仍然会存在并发性问题。

文档评论(0)

tianya189 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档