数据库实验—9

数据库安全性控制


在这里插入图片描述

数据库的授权

grant授权

GRANT语句的一般格式:
GRANT <权限>[,<权限>]…
[ON <对象类型> <对象名>]
TO <用户>[,<用户>]…
[WITH GRANT OPTION];
注:如果加入with grant option,则获得权限的用户可以继续向下传递拥有的权限。但是不允许循环授权,也就是形成了相当于一个正环的存在。

【例4.1】把查询Student表的的权限授给用户lc.

grant select
on table Student
to lc;-----语句错误+用户不存在

--------------------------
grant select
on Student
to lc;-----语句正确

在这里插入图片描述
这里是因为lc用户并不存在…,所以在执行语句前一定要保证有相应的用户存在就可以。创建用户的操作就在数据库->安全性里面

【例4.2】把对Student表和Course表的全部权限授予用户U2和U3

--错误代码:
grant all privileges 
on table Student,Course 
to U2,U3;

----------------------
grant all privileges
on Student 
to U2 , U3;
grant all privileges
on Course
to U2 , U3;------正确代码

在这里插入图片描述
上图的报错其实是有点多的

  1. 首先我们需要去掉table的词语
  2. 我们不能同时对两个表进行操作,所需需要去掉其中一个表。
    在这里插入图片描述
    在这里插入图片描述
    【例4.3】 把对表SC的查询权限授予所有用户
grant select 
on SC
to public;

【例4.4】 把查询Student表和修改学生学号的权限授给用户U1

grant select,update
on Student
to U1;

-----------------------------------------------------

grant update(Sno),select --对属性列进行授权须指出相应属性列名:
on Student 
to U4;

【例4.5】 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户。

grant insert 
on SC 
to U5
with grant option;

在这里插入图片描述
【例4.6】 U5权限赋予U6:

grant insert 
on SC 
to U6
with grant option;

【例4.7】

grant insert 
on SC 
to U7;
----注意此时U7不能再给其他人授权了。

revoke收回权限

REVOKE <权限>[,<权限>]…
[ON <对象类型> <对象名>]
FROM <用户>[,<用户>]…
[WITH GRANT OPTION];

【例4.9】 收回所有用户对表SC的查询权限

revoke select
on SC
from public;

【例4.10】把用户U5对SC表的INSERT权限收回

revoke insert
on SC
from U5---错误语句
--------------------------------------------
revoke insert
on SC
from U5 cascade;---正确语句

上面因为涉及到了级联,所以我们需要加入cascade语句来收回U5及其U5授权的用户的权限,否则系统拒绝执行(如果有除了U5以外的用户授予权限则不会被收回,也就是只会收回和U5本身及其U5赋予的操作)。



数据库对象

对象是被命名的一组与数据库操作相关的权限,角色是权限的集合。可以为一组具有相同权限的用户创建一个角色。也就是我们所说的归类。


create role<角色名>   --创建空角色

grant<权限>[,<权限>]... 
on <对象类型>对象名  
to <角色>[,<角色>...



grant<角色1>[,<角色2>]…
to <角色3>[,<用户1>][with admin option]--依旧具有传递性


revoke <权限>[,<权限>]...
on <对象类型> <对象名>
from <角色>[,<角色>]...---收回操作

【例4.11】通过角色来实现将一组权限授予一个用户。

create role lc;---创建角色

grant select, update, insert 
on Student 
to lc;-----授权赋予


grant R1 
to 王平,张明,赵玲;-----运行不通的语句(sqlsever不支持这种语句):
----------------------------
alter role R1
add member 王平;
alter role R1
add member 张明;
alter role R1
add member 赵玲;-----将这个角色授予王平,张明,赵玲。使他们具有角色lc所包含的全部权限



--这句话和上一步骤相同错误:
revoke R1 
from 王平;
----------------------解决:

exec sp_droprolemember 'R1','王平';


无语,add还有一个个加,这不得累死。。。。我从csdn也没找到相应的资料,有大佬知道的话求告知一下hhh。
还有奇奇怪怪的revoke函数,感觉半小时后我就能忘了。。。

【例4.12】角色的权限修改(使角色R1在原来的基础上增加Student表的delete权限)

grant delete 
on Student
to lc;

【例4.13】 删除lc 的select权限

revoke select
on Student
from lc;

感觉sql sever对象里面的组成操作有点麻烦,但是如果直接对”对象“操作还是和书上差不多的。


视图机制

可以通过视图机制把保密的数据对无权存取的
我们前面说过视图其实就是一种虚表,而且具有隐藏信息的功能,在这里就是体现了隐藏信息的功能。

【例4.14】 建立计算机系学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明


create view CS_Student
as 
select  *
from  Student
where Sdept='CS';      --建立计算机系学生的视图CS_Student


grant select
on CS_Student  
to 张明;

grant all 
on CS_Student  
to U2;    --在视图上进一步定义存取权限

这里要说的是我们授予权限可以在用户和数据库用户上面进行授权,在这里U2是用户,张明是数据库用户。

审计

1、把用户对数据库的所有操作记录在上面
2、审计员利用审计日志监控数据库中的各种行为,找出非法存取数据的人、时间和内容。(就是相当于监察单位hhh)

【例4.15】 对修改SC表结构或修改SC表数据的操作进行审计

grant delete
on Student
to R1;  sql sever无法执行
-----------------------------------------------
USE master ;  

GO  
-- Create the server audit.   创造记录
CREATE SERVER AUDIT Payrole_Security_Audit  
    TO FILE ( FILEPATH =   
'D:\SQLAudit' ) ;  -- make sure this path exists  确保路径存在
GO  
-- Enable the server audit.  
ALTER SERVER AUDIT Payrole_Security_Audit   
WITH (STATE = ON) ;  
GO  
-- Move to the target database.   转移到目标数据库
USE Data ;  
GO  
-- Create the database audit specification.  
CREATE DATABASE AUDIT SPECIFICATION Audit_Pay_Tables  
FOR SERVER AUDIT Payrole_Security_Audit  
ADD (UPDATE ,select
     ON SC BY public  )  
WITH (STATE = ON) ;  
GO

【例4.16】 取消对SC表的一切审计

noaudit alter,update
on SC;-----教材书例子

CREATE DATABASE AUDIT SPECIFICATION (Transact-SQL)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值