文章目录
一、利用SQL语言实现数据库自主安全性
1.SQL语言的用户与权利
1.超级用户(DBA)→账户级别(程序员用户)→关系级别(普通用户)
- (级别一)Select :读(读DB,Table,Record,Attribute,…)
- (级别二)Modify :更新
Insert:插入(插入新元组,…)
Update:更新(更新元组中的某些值,…)
Delete:删除(删除元组,…) - (级别三) Create:创建(创建空间,模式,表,索引,视图等)
Create:创建
Alter:更新
Drop:删除
2.级别高的权利自动包含级别低的权利。
2.SQL-DCL的命令及其应用
授权命令
Grant {all previleges}
ON [TABLE] tablename
TO {user-id}
[WITH GRANT OPTION];
- user-id,某一个用户账户,由DBA创建的合法账户。
- public,允许所有有效用户使用授予的权利。
- privilege是以下权利:SELECT|INSERT|UPDATE|DELETE|ALL PRIVILEGES.
- WITH GRANT OPTION选项是允许被授权者传播这些权利。
示例:
SQL-DCL的控制安全性示例
收回授权命令
REVOKE{all privilege}
ON tablename|viewname
FROM{user};
示例:
二、安全型控制的其他简介
1.自主安全性的授权过程及其问题
授权过程
第一步:DBM创建DB,并为每一个用户创建一个账户。
第二步:DBA授予某用户账户级别的权利。
第三步:具有账户级别用户可以创建基本表或视图,他也自动成为该表或视图的属主账户,拥有该表或该视图的访问权利。
第四步:拥有属主账户的用户可以将其中一部分权利授予另外的用户,该用户也可将2权利进一步授权给其他用户。
注意授权范的传播范围:
传播范围包括两个方面:
- 水平传播数量是授权者的再授权者用户数目(树的广度)
- 垂直传播数量是授权者传播给被授权者,再被传播另一个被授权者(树的深度)
有些系统提供了传播范围控制,有些系统并没有提供,SQL标准中并没有限制。
三、嵌入式SQL语言概述
1.交互式SQL语言的局限
从SQL本身角度
特别复杂的检索结果难以用一条交互式SQL语句完成,此时需要结合高级语言经常出现的顺序,分支和循环结构来帮助处理。
2.嵌入式SQL语言与交互式SQL语言的对比
示例:交互式SQL语言
select Sname,Sage form Student where Sname=‘张三’;
示例:嵌入式交互语言
以宿主语言C语言为例”
exec sql select Sname,Sage into:vSname,:vSage from
Student where Sname=‘张三’;
典型特点
- exec sql 引导SQL语句:提供给C编译器,以便对SQL语句预编译成C编译器可识别的样子。
- into语句用来指出接收SQL语句检索结果的程序变量。
- 有冒号引导的程序变量:‘:vSname’,‘:vSage’。