CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

如何限制有修改权限的人修改以前的数据

楼主youthw()2006-07-01 16:09:25 在 MS-SQL Server / 疑难问题 提问

我公司的工资表格大体如下(假设:公司仅有两个人,赵一和钱二)  
  GZ:  
  --------------------------------------------  
  姓名     月份         基本工资       补贴         累计工资  
  赵一       1                   800             200             1000  
  钱二       1                   820             300             1120  
  赵一       2                   850             270             1120  
  钱二       2                   790             400             1190  
  -------------------------------------------  
  以上表格是公司员工一月份和二月份的工资,由部门A通过SQL导入(用EXCEL表导入到SQL),因为部门A在进行数据导入时会出现错误,所以部门A有修改数据的权限.现在的问题是:一旦导入3月份的数据,就意为着以前的数据(1月份和2月份)是经验证无误的,对以前的数据就要限制部门A修改;或着说当2月份的数据导入后,经验证无误后,就要限制部门A对数据的修改.如何能做到以上的功能.  
   
  目前在SQL中对部门A的设定如下:部门A,类型(标准),服务器访问(许可),服务器角色(Database   Creators),数据库访问(数据库:GZ,角色中允许:PUBLIC,db_datareader,db_datawriter)  
  如何设置或在数据库GZ中甚至表格GZ中如设修改. 问题点数:20、回复次数:7Top

1 楼zjcxc(邹建)回复于 2006-07-01 20:23:25 得分 0

sql中没有记录级的权限控制.  
   
  可以考虑通过其他手段限制  
  例如写触发器来限制  
  或者是设置两个表,   一个表只保存最近可以修改的数据,   另一个表保存验证后的数据,   在保障数据访问的统一上,   通过视图关联两个表.Top

2 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-07-01 21:13:09 得分 0

SQL   Server只有字段级,即列级权限,而没有行级,即记录级权限控制。  
   
  使用触发器可以实现楼主的要求。Top

3 楼youthw()回复于 2006-07-02 22:47:07 得分 0

请教如何用?Top

4 楼LouisXIV(夜游神)回复于 2006-07-02 23:02:13 得分 20

--如下语句执行一下看看  
   
  if   object_id('test')   is   not   null   drop   table   test  
  go  
  create   table   Test  
  (  
  months   int,  
  employeeid   int,  
  salary   int  
  )  
  insert   into   Test  
  select   1,1,100   union   all  
  select   1,2,200   union   all  
  select   1,3,   300   union   all  
  select   2,1,200   union   all  
  select   2,2,240   union   all  
  select   2,3,400  
  select   *   from   Test  
  go  
  create   trigger   Tri_Limit   on   Test  
  for   Update  
  as  
  if   (select   min(months)   from   inserted)<>(select   max(months)   from   Test)  
  begin  
  print   'Updating   Not   Allowed'  
  rollback   transaction  
  end  
  go  
  select   *   from   test   where   months=2   and   employeeid=2  
  update   test  
  set   salary=400  
  where   months=2   and   employeeid=2  
  go  
  select   *   from   test   where   months=2   and   employeeid=2  
  go  
  select   *   from   test   where   months=1   and   employeeid=2  
  update   test  
  set   salary=400  
  where   months=1   and   employeeid=2  
  go  
  select   *   from   test   where   months=1   and   employeeid=2  
  go  
  drop   table   Test  
  Top

5 楼youthw()回复于 2006-07-04 22:30:56 得分 0

关键是公司有800多人,每一个有20多列数据(姓名,序号,银行帐号,月份,岗位工资,绩效工资,职务补贴,医疗补贴,工龄补贴,养老金     ............       累计实发)  
  另一个问题是,如果上述"LouisXIV(夜游神)"代码可行,直接拷贝在"视图"运行吗?Top

6 楼youthw()回复于 2006-07-04 23:24:01 得分 0

初学者,请多指教.Top

7 楼youthw()回复于 2006-07-30 22:46:29 得分 0

请高手帮忙解答Top

相关问题

关键词

得分解答快速导航

  • 帖主:youthw
  • LouisXIV

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo