第四章 sql 控制功能

50
第第第 SQL 第第第第

Upload: finn-ayala

Post on 02-Jan-2016

157 views

Category:

Documents


5 download

DESCRIPTION

第四章 SQL 控制功能. 数据库安全. 好的制度 制定时,有罪推定 审判时,无罪推定. 存取控制 准入,标识+口令 权限控制 只能干什么 pk 不能干什么 资源控制 配额:遥远的粮票、阶梯水费、 dos, ddos 跟踪 监视:无处不在的摄像头 审计:一切尽在掌握. 存取控制. 安全性控制定义 安全性控制保护数据库以防止不合法的使用所造成的数据泄露和破坏。其基本措施是 存取控制 安全性措施 物理级 人际级 操作系统级 网络级 数据库系统级. 存取控制. 权限的转授和回收 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第四章  SQL 控制功能

第四章 SQL 控制功能

Page 2: 第四章  SQL 控制功能

数据库安全 存取控制

准入,标识+口令 权限控制

只能干什么 pk 不能干什么 资源控制

配额:遥远的粮票、阶梯水费、 dos, ddos 跟踪

监视:无处不在的摄像头 审计:一切尽在掌握

Page 3: 第四章  SQL 控制功能

存取控制 安全性控制定义

安全性控制保护数据库以防止不合法的使用所造成的数据泄露和破坏。其基本措施是存取控制

安全性措施 物理级 人际级 操作系统级 网络级 数据库系统级

Page 4: 第四章  SQL 控制功能

存取控制 权限的转授和回收

允许用户把已获得的权限转授给其他用户,也可以把已授给其他用户的权限再回收上来

权限图 结点是用户,根结点是 DBA ,有向边 Ui→Uj ,表

示用户 Ui 把某权限授给用户 Uj 一个用户拥有权限的充分必要条件是在权限图中有

一条从根结点到该用户结点的路径

Page 5: 第四章  SQL 控制功能

存取控制

DBA

U1

U2

U3

U4

U5DBA

U1

U2

U3

U4

U5

DBA

U2

U3

DBA

U2

U3

DBA

U2

U3

DBA

U2

U3

Page 6: 第四章  SQL 控制功能

存取控制 授权命令

grant 表级权限 on { 表名 | 视图名 } to

{ 用户 [ ,用户 ]… | public}

[with grant option]

表 级 权 限 包 括 : select, update, insert, delete, index, alter, drop, resource 等以及它们的总和 all ,其中对 select , update 可指定列名with grant option 表示获得权限的用户可以把权限再授予其它用户

Page 7: 第四章  SQL 控制功能

存取控制 回收权限

revoke 表级权限 on { 表名 | 视图名 } from

{ 用户 [ ,用户 ]… | public}

收回权限时,若该用户已将权限授予其它用户,则也一并收回。授权路径的起点一定是 DBA

示例 grant select , insert on S to Liming

with grant option

revoke insert on S from Liming

Page 8: 第四章  SQL 控制功能

存取控制 支持多库的数据库系统中授权对象可以是数据库

grant 数据库级权限 to { 用户 [ ,用户 ]… | public}

数据库级权限包括:connect :允许用户在 database 语句中指定数据库resource : connect 权限 + 建表、删除表及索引权利dba : resource 权限 + 授予或撤消其他用户的connect 、 resource 、 dba 权限不允许 dba 撤消自己的 dba 权限

Page 9: 第四章  SQL 控制功能

存取控制:用户

declare @usr char(30)

set @usr = user

select 'The current user is: '+ @usr

select *

from S

where SNAME = user

• 普通员工只能查看自己的记录• 部门经理可以查看他所管理的员工• 人力资源代表可以查看所有员工

Page 10: 第四章  SQL 控制功能

存取控制:角色

角色是一组相关权限的结合,即将多个不同的权限集合在一起就形成了角色

用户

权限

用户

权限

角色

Page 11: 第四章  SQL 控制功能

存取控制:角色

Page 12: 第四章  SQL 控制功能

存取控制: SQL Server

登录 sp_addlogin sp_revokelogin

角色 sp_addrole sp_droprole

成员 sp_addrolemember sp_droprolemember

安全帐户 sp_grantdbaccess sp_revokedbaccess

报告 sp_helpuser

Page 13: 第四章  SQL 控制功能

资源控制: Oracle

CPU 使用时间限制 CPU_PER_SESSION逻辑读个数限制 LOGICAL_READS_PER_SESSION用户会话限制 SESSION_PER_USER会话空闲时间限制 IDLE_TIME会话可持续时间限制 CONNECT_TIME会话专用 SGA 空间限制 PRIVATE_SGA口令限制 PASSWORD_LIFE_TIM

PASSWORD_LOCK_TIME

FAILED_LOGIN_ATTEMPTS

用户

PROFILE

Page 14: 第四章  SQL 控制功能

审计 审计就是

对指定用户在数据库中的操作情况进行监控和记录,用以审查用户的相关活动

数据被非授权用户删除,用户越权管理,权限管理不正确,用户获得不应有的系统权限等

监视和收集关于指定数据库获得的数据 哪些表经常被修改,用户共执行了多少次 I/O 操作等,

为优化提供依据

Page 15: 第四章  SQL 控制功能

审计 审计级别

语句级只审定某种类型的 SQL 语句

权限级只审计某个系统权限的使用情况

实体级只对一个指定模式上的实体的指定语句进行审计

Page 16: 第四章  SQL 控制功能

审计 审计类别

按语句执行成功与否 只审计成功语句 只审计不成功语句 不论成功与否都进行审计

按语句执行次数 会话审计

语句每执行一次就审计一次 存取方式审计

多次执行的同一语句只审计一次

Page 17: 第四章  SQL 控制功能

语句级审计 语法

选项:代表某一类 SQL 语句by 用户名 :只审计特定用户的 SQL 语句by Session :按会话方式审计by Access :按存取方式审计Whenever Successful :只审计成功语句Whenever Not Successful :只审计不成功语句

Audit [ NoAudit ] SQL 语句或选项

[ by 用户名 ][ by Session | Access ]

[ Whenever [NOT] Successful

audit table by tom by access

Page 18: 第四章  SQL 控制功能

权限级审计 语法

audit create table whenever not successful

Audit [ NoAudit ] 权限名称[ by 用户名 ]

[ by Session | Access ]

[ Whenever [NOT] Successful ]

Page 19: 第四章  SQL 控制功能

实体级审计 语法

Audit [ NoAudit ] 实体选项 ON Schema.实体名称

[ by 用户名 ]

[ by Session | Access ]

[ Whenever [NOT] Successful

audit delete on clj.department by session whenever not successful

Page 20: 第四章  SQL 控制功能

统计数据库安全性 用户只能查询数据的聚集值,不能访问个体 隐私保护挖掘 漏洞一

个体太少 查询选修“古典哲学史” 的学生的平均成绩

漏洞二 多次查询,太多交叠 查询 n 个学生的总成绩为 x 查询 n 个学生+ A 的总成绩为 y A 的总成绩为 y-x

Page 21: 第四章  SQL 控制功能

统计数据库安全性 防范措施

查询引用的数据不能少于 n 两个查询的交不能多于 m 推出个体信息至少需要 1+(n-2)/m 次查询

Student(ID, GPA) , ID 从 1 到 50

任何查询结果只能是一个聚集值每次至少使用 4 条元组

任何两个查询的交不能大于 2 条元组给出一个查询集合,使得能确定 ID=9 的 GPA

Page 22: 第四章  SQL 控制功能

SQL 注入 认证过程发出的查询语句

SELECT * FROM users WHERE username = ‘jake’ and PASSWORD = ‘jakespasswd’.

攻击者篡改这个 SQL 语句SELECT * FROM users WHERE username = ‘jake’

and (PASSWORD = ‘jakespasswd’ or ‘x’ = ‘x’).

Page 23: 第四章  SQL 控制功能

其他安全概念 自助访问控制和强制访问控制

多级安全级别:绝密 (TS),机密 (S),秘密 (C), 一般(U)

Bell-LaPadula 模型 主体 ( 用户、账户、程序 ) 和客体 ( 关系、元组、列、视

图、操作 )划分到 TS 、 S 、 C 和 U这四个安全性级别中 class(S) 表示主体 S 的许可证, class(O) 表示客体 O

的级别 除非 ,否则不允许主体 S 读访问客体 O 。这被称为简单安全性特性

除非 , 否则不允许主体 S写客体 O 。这被称为* 特性

加密算法: DES , RSA

)()( OclassSclass

)()( OclassSclass

Page 24: 第四章  SQL 控制功能

第四章 视图

Page 25: 第四章  SQL 控制功能

视图 定义

视图是命名的、从基本表中导出的虚表,它在物理上并不存在,存在的只是其定义

视图中的数据是从基本表中导出的,每次对视图查询都要重新计算

视图之上可以再定义视图 视图 Vs 临时关系变量

视图 V1 视图 V2

基本表 B1 基本表 B3基本表 B2

Page 26: 第四章  SQL 控制功能

视图 视图的优点

个性化服务 简化了用户观点,使不同用户可以从不同角度观察同一

数据 安全性

“知必所需”,限制用户数据的访问范围 逻辑独立性

视图作为基本表与外模式之间的映象

Page 27: 第四章  SQL 控制功能

视图 定义视图

create view view_name[( 列名 [ ,列名 ] …)]

as (查询表达式)[with check option]

视图的属性名缺省为子查询结果中的属性名,也可以显式指明 with check option 指 明 当 对 视 图 进 行insert , update 时,要检查是否满足视图定义中的条件

撤消视图drop view view_name

Page 28: 第四章  SQL 控制功能

视图 示例

create view COMPUTER_PROF

as

(select P# , PNAME , SAL

from PROF , DEPT

where PROF.P# = DEPT.P#

and DEPT.DNAME = “ 计算机系” )

Page 29: 第四章  SQL 控制功能

视图 给出计算机系工资超过 800 的老师姓名

select PNAME

from COMPUTER_PROF

where SAL > 800

select PNAME

from PROF, DEPT

where PROF.P# = DEPT.P#

and DEPT.DNAME = “ 计算机系” and SAL > 800

基于视图

视图消解

Page 30: 第四章  SQL 控制功能

视图 授权 Tom 只有察看职工平均工资的权限

create view avg_sal as

( select avg(sal) from PROF)

grant SELECT on avg_sal to ”Tom”

Page 31: 第四章  SQL 控制功能

视图更新 with check option

create view SC_V as

(select * from SC where GRADE > 85)

with check option

insert into SC_V values(‘s2’, ‘c4’, 82)

Page 32: 第四章  SQL 控制功能

视图更新 示例

create view P_SALas (select P# , PNAME , SAL from

PROF )

Page 33: 第四章  SQL 控制功能

视图更新create view SN_AGE

as (select SNAME, AGE from S )

Page 34: 第四章  SQL 控制功能

视图更新create view S_G(S#, AVERAGE )

as (select S#, avg(GRADE) from SCgroup by S#)

update S_Gset AVERAGE = 85where S# = S1

Page 35: 第四章  SQL 控制功能

视图更新create view S_Dean

as (select SNAME, DEAN from S, DEPTwhere S.D# = DEPT.D# )

insert into S_Deanvalues ( “张立” , “叶开”, 97 )

Page 36: 第四章  SQL 控制功能

视图更新S# SN AGE D#

s1 张三 20 d1

s2 李四 23 d2

s3 王五 22 d3

null 张立 null null

D# DN DEAN

d1 物理 莫愁d2 数学 乐天d3 化学 安然null null 叶开

SN DEAN

张三 莫愁

李四 乐天

王五 安然

张立 叶开连接属

性连接属

视图定义中不包括连接属性 D#

因此 SDEPT 结果中不包括 (张立 , 叶开 )

带标识的 null:⊥i ⊥i = ⊥i ⊥i ≠ ⊥k

Page 37: 第四章  SQL 控制功能

视图更新create table T1(col11 int, col12 int)

create table T2(col21 int, col22 int)

create view V1 as

(select col11, col12, col21, col22

from T1 left outer join T2 on col11 = col21)

insert into V1 (col11, col12) values(1, 2)

insert into V1 (col21, col22) values(null, null)

insert into V1 values(1, 2, null, null)

delete from V1

update V1 set col12 = 4 where col11 = 1

update V1 set col12 = 4, col22 = 6 where col11 = 1 and col21 = 1

Page 38: 第四章  SQL 控制功能

视图更新create view V2 as

(select col11, col12, col21, col22

from T1 inner join T2 on col11 = col21)

insert into V2 (col11, col12) values(1, 2)

create view V3 as

(select col11, col12, col21, col22

from T1 inner join T2 on col11 = col21)

with check option

insert into V3 (col11, col12) values(1, 2)

Page 39: 第四章  SQL 控制功能

视图更新 视图更新约束

select子句中的目标列不能包含聚集函数 select 子句中不能使用 unique 或 distinct 关键字

不能包括 group by子句 不能包括经算术表达式计算出来的列 对于行列子集视图可以更新(视图是从单个基本表

使用选择、投影操作导出的,并且包含了基本表的主码) ( 列举一种不可更新的行列子集视图 )

Page 40: 第四章  SQL 控制功能

物化视图 视图的计算结果被实际存储起来 物化视图可以看成是数据库的 cache 查询物化视图比重新计算视图要快许多 需要进行物化视图与基本表之间的一致性维护 应用场合

任何需要快速访问派生数据、或视图的重新计算非常昂贵、或查询需要耗费非常高的 CPU 和磁盘吞吐量的应用场合,都可以使用物化视图来提高效率

Page 41: 第四章  SQL 控制功能

物化视图 应用示例

一个零售数据库,存储 terabytes 数量级的几个月的销售数据。而诸如某个商店的某件商品的销售总量这样的查询,每天可能要被零售商、仓库管理员、市场部人员执行若干次。这时可以将商品的销售总量查询结果定义为物化视图

一个处理定单与产品的事务系统,大量的查询需要连接定单与产品表,可以将定单与产品表的连接结果定义为物化视图

Page 42: 第四章  SQL 控制功能

物化视图

Page 43: 第四章  SQL 控制功能

物化视图: SQL Server

create viewProduct_Totalswith schemabindingasselect productid, total_volume=sum(unitPrice *

Quantity),total_qty = sum(Quantity), number =

count_big(*)from dbo."order details"group by productidcreate unique clustered index PV_IDX

on Product_Totals(productid)

视图索引

Page 44: 第四章  SQL 控制功能

物化视图: SQL Server

create table t1(a int , b int , c as a/b)

insert into t1 values(2,0)

create index i1 on t1(c)

create table t2(a int , b datatime , c as dataname(mm , b)

create index i2 on t2(c)

在计算列上创建索引

Page 45: 第四章  SQL 控制功能

物化视图: Oracle

create materialized view my_grade_aggsbulid immediaterefresh on commitenable query rewriteasselect S#, avg(GRADE)from SCgroup by S#

select S#, avg(GRADE)from SCwhere S# = s1

Page 46: 第四章  SQL 控制功能

物化视图: Oracle

create materialized view SALES_SUMMARY as

select SALES.CUST_ID, TIME.MONTH,

SUM(SALES_AMOUNT) AMT

from SALES, TIME

where SALES.TIME_ID = TIME.TIME_ID

group by SALES.CUST_ID, TIME.MONTH

Page 47: 第四章  SQL 控制功能

物化视图: Oracle

select CUSTOMER.CUST_NAME, TIME.MONTH, SUM(SALES.SALES_AMOUNT) from SALES, CUSTOMER, TIMEwhere SALES.CUST_ID = CUST.CUST_ID

and SALES.TIME_ID = TIME.TIME_IDgroup by CUSTOMER.CUST_NAME, TIME.MONTH

重写后的查询为: select CUSTOMER.CUST_NAME,

SALES_SUMMARY.MONTH, SALES_SUMMARY.AMT from CUSTOMER, SALES_SUMMARYwhere CUSTOMER.CUST_ID = SALES_SUMMARY.CUST_ID

Page 48: 第四章  SQL 控制功能

物化视图: Oracle

create materialized view sales_mv

as

select sales.cust_id, sum(sales.sales_amount),

time_hierachy.mmyyyy

from sales, time_hierarchy

where sales.trans_date = time_hierarchy.day

group by sales.cust_id, time_hierarchy.mmyyyy

Page 49: 第四章  SQL 控制功能

物化视图: Oracle

select sum(sales.sales_amount),

time_hierachy.mmyyyy

from sales, time_hierarchy

where sales.trans_date = time_hierarchy.day

group by time_hierarchy.mmyyyy

select sum(sales.sales_amount),

time_hierachy.qty_yyyy

from sales, time_hierarchy

where sales.trans_date = time_hierarchy.day

group by time_hierarchy.qty_yyyy

Page 50: 第四章  SQL 控制功能

物化视图: Oracle

create dimension time_hierarchy_dimlevel day is time_hierarchy.daylevel mmyyyy is time_hierarchy.mmyyyylevel qty_yyyy is time_hierarchy.qty_yyyylevel yyyy is time_hierarchy.yyyy

hierarchy time_rollup(

day child ofmmyyyy child ofqty_yyyy child ofyyyy

)