SQL Server实战5

前言:最后一个实验!

目的: 1.掌握数据库安全管理机制中的常规方法,理解登录、用户、架构、角色、权限的概念、定义及使用;

2.掌握视图存储过程触发器的概念、定义及如何发挥特殊的安全控制作用。

实验内容

用户与权限

⑴ 建立采油一矿的成本的视图,把该视图的查询权限授予给采油一矿的用户user11,以user11的身份查询该视图,观察执行情况;再以其他用户的身份查询该视图,观察执行情况。

create view 采油一矿_成本
as
select *
from 成本,单位
where 预算单位 = 单位代码
and 单位名称 like '采油一矿%'

-- 创建登录名
create login user01 with password = '12345'
-- 创建用户
create user user11 for login user01

grant select
on 采油一矿_成本
to user11

select *
from 采油一矿_成本

-- 在user11用户下查询成本表 发现没有权限
-- 拒绝了对对象 '成本' (数据库 'zyxt',架构 'dbo')的 SELECT 权限。
setuser 'user11'
select *
from 成本

-- 再次setuser切换用户
setuser 
-- 即可查询成本表

setuser: 如果未指定 username,将重置模拟用户的系统管理员或数据库所有者的原始标识。

存储过程

⑵ 创建一个用户user12,以user12的身份执行实验四中所定义的存储过程,观察记录是否成功执行;然后把该存储过程的执行权限授予给user12,再次以user12的身份执行该存储过程,观察记录是否成功执行。

-- 创建登录名
create login user02 with password = '12345'
-- 创建用户
create user user12 for login user02

setuser 'user12'

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'
-- 拒绝了对对象 '_someDepCost' (数据库 'zyxt',架构 'dbo')的 EXECUTE 权限
-- 即user12没有使用此存储过程的权限

setuser
-- 更改用户后才能进行授权

grant execute on _someDepCost
to user12

setuser 'user12'

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'

image-20220419222619039

触发器

⑶ 定义触发器,实现只能在工作时间内更新“成本表”的数据,然后通过选择不同的时间进行适当的更新操作来验证。

create trigger trmytr7 
after update on 成本
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
  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值