如何限制有修改权限的人修改以前的数据
我公司的工资表格大体如下(假设:公司仅有两个人,赵一和钱二)
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




