数据库安全性控制
文章目录
- 数据库的授权
- grant授权
- revoke收回权限
- 数据库对象
- 视图机制
- 审计
数据库的授权
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;------正确代码
上图的报错其实是有点多的
- 首先我们需要去掉table的词语
- 我们不能同时对两个表进行操作,所需需要去掉其中一个表。
【例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)