数据库实验七

本文介绍了一个具体的SQL示例,展示了如何创建视图、登录用户、分配权限,并实现了一个触发器来限制非工作日的数据更新操作。通过这些步骤,可以更好地管理数据库的安全性和数据的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--(1)----------------------------------
create view 采油一矿
as
select *
from 作业项目表,单位代码表
where 单位代码 = 单据号 and 单位名称 like '采油一矿%';

create login user01 with password = '12345';
create user user00 for login user01;
grant select
on 采油一矿
to user00;
--(2)---------------------------------------------
create login login007 with password = '12345';
create user user12 for login login007
go
setuser 'user12'
go
execute _someDepCost @单位代码 = '1122',@起始日期 = '2016-5-1',@结束日期 = '2016-5-29';
execute _someDepCost @单位代码 = '112201',@起始日期 = '2016-5-1',@结束日期 = '2016-5-29';
execute _someDepCost @单位代码 = '112201001',@起始日期 = '2016-5-1',@结束日期 = '2016-5-29';
go

use zyxt
grant execute on _someDepCost
to user12
go
set user12
go

execute _someDepCost @单位代码 = '1122',@起始日期 = '2016-5-1',@结束日期 = '2016-5-29';
execute _someDepCost @单位代码 = '112201',@起始日期 = '2016-5-1',@结束日期 = '2016-5-29';
execute _someDepCost @单位代码 = '112201001',@起始日期 = '2016-5-1',@结束日期 = '2016-5-29';
go
--(3)----------------------------------------------
if OBJECT_ID('trmytr7','TR') is not null
drop trigger tr_mytr7
go
create trigger trmytr7 on 作业项目表
after update
as
declare @currenttime datetime
set @currenttime = getdate();
declare @current_day varchar(10)
set @current_day = convert(varchar(10),DATEPART(dw,@currenttime)-1);
if @current_day not between 1 and 5
begin
if @@TRANCOUNT>0
begin
rollback
print '非工作日不能更新数据'
end
end
go
--测试数据
begin tran
update 作业项目表
set 预算人 = 'test'
where 单据号 = 'zy2017001'
if @@TRANCOUNT>0
begin
commit
end
go

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值