在设计权限系统时,我要对用户授予的权限精确到每条记录,比如你授予了用户a对id=123的记录拥有读取的权限,对id=235的记录有删除的权限。当你删除了id=235的记录,再添加一条记录时,发现还没授权,a用户就有权删除该记录了,这不出现问题吗?
 即使权限没有精确到每条记录,而是精确到某一类记录(具有相同的classID,也是自动编号),这样删除某一类文章时,重新建立一个文章类,也一样出现问题。
 如果mysql任何时候都不从重用自动编号,那麽复杂的权限控制问题的设计可以更加简单的。

解决方案 »

  1.   

    的确是个问题!不过,如果在表之间建立严格的约束(foreign key)的话, 那么你根本删不掉已经被引用的记录.
    除非改变这个引用.   可以新增一个类别(classid), 
      引用指向这个新的类别, 
      再删除旧类别.这样就不会出现问题.
      

  2.   

    这不是bug,mysql就是这样处理的!比如你授予了用户a对id=123的记录拥有读取的权限,对id=235的记录有删除的权限。
    当你删除了id=235的记录时,你也应该同时删除用户a对id=235记录的删除权限!!
      

  3.   

    删除记录时是应该同时删除权限。但是还是不明白为何不采用sql server那种自动编号不重用的策略(即使重启服务器也不会重用),不会是担心自动编号会用完吧,help文档里说到即使每秒插入100万条记录,也要30万年才可能用完的。
      

  4.   

    自己写个临时表记录当前最大的id流水号,再写个proc自动同步,下次不就可以从临时表里读最大的了吗?那样就不会重用一个值了^_^愚见。
      

  5.   

    能不能重用AUTO_INCREMENT各有利弊:重用可以保持数值连续性,多用户并发插入性能低,事务表的并发回滚无法处理;不重用数值没有连续性,并发插入性能高,可以处理并发事务回滚。这个不是产品Bug。楼主的问题可以写个序号发生器来解决。