数据库安全性控制
4.2.1 用户身份鉴别
4.2.2 存取控制
4.2.3 自主存取控制方法
4.2.4授权与收回对数据的操作权限
4.2.5 数据库角色
4.2.6 强制存取控制方法
1. 用户管理
1) 创建用户
在oracle中要创建一个新的用户,一般当前用户是具有DBA(数据库管理员)的权限才能使用。
命令格式:
create user 用户名
identified {by 口令 | externally | globally as ‘cn=user’} //① 密码验证。用户信息和密码存储在数据库内部。 ② 外部验证。表示用户名在操作系统下验证。 ③ 全局验证。表示用户名由Oracle安全域中心服务器验证,CN名字表示用户的外部名。
[default tablespace 默认表空间名user]
[temporary tablespace 临时表空间名temp]
[quota {整数[K | M]| unlimited} on 表空间名]
[quota {整数[K | M]| unlimited} on 表空间名] //表示该用户在指定表空间中允许占用的最大空间。 如果建立用户时没有为表空间指定quota子句,那么用户在特定表空间上的配额为0,用户将不能在表空间上建立数据对象。
[password expire]
[account {lock | unlock}]
[profile {概要文件名 | default}]
创建的新用户没有任何权限,甚至连登录数据库的权限都没有,需要为其指定相应的权限。
示例:
在数据库中创建新用户u1,口令为123456,默认表空间为users,临时表空间为temp,并且该用户使用users表空间不受限制。
create user u1
identified by 123456
default tablespace users
temporary tablespace temp
quota unlimited on users
2) 修改用户
alter user 用户名
identified {by 口令 | externally | globally as ‘cn=user’}
[default tablespace 默认表空间名]
[temporary tablespace 临时表空间名]
[quota {整数[K | M]| unlimited} on 表空间名]
[quota {整数[K | M]| unlimited} on 表空间名]
[password expire] //口令过期
[account {lock | unlock}]
[profile {概要文件名 | default}]
示例:将用户u1的口令修改为过期状态。
--> alter user u1 password expire
3) 删除用户
一般以dba的身份删除某个用户,如果用其它用户去删除用户则需要具有 drop user的权限。 命令格式:
drop user 用户名 [cascade]
如果指定cascade,将会删除这个用户所拥有的所有对象。
2. 模式--是用户拥有的数据库对象的集合
模式与用户
①模式与用户相对应,一个模式只能被一个用户所拥有,并且模式的名称与这个用户的名称相同;
②同一模式中数据库对象的名称必须唯一,而在不同模式中的数据库对象可以同名。
③默认情况下,用户访问的对象是与自己同名模式中的对象,如果要访问其他模式中的对象,必须附加模式名作为前缀。
④用户主要是用来连接数据库和访问数据库。模式是数据库对象的集合,是用来创建和管理对象的。
⑤创建模式要创建用户,而语句create schema不能用来创建模式;
模式的选择与切换
normal -- ‘用户名’模式 sysdba -- 'sys'模式 sysoper -- 'public'模式
模式对象与非模式对象
模式对象:属于特定的模式,包括表、索引、索引化表、分区表、物化视图、视图等;
非模式对象:不属于任何模式;
3. 权限管理
系统权限
系统权限:是在系统级对数据库进行存取和使用的机制--用户是否能够连接到数据库系统上,是否能够执行系统级的DDL语句(如create、alter和drop)等;
系统权限可以分配给一个用户、角色或Public。 Oracle 19c中有257种系统权限,这些系统权限都被列举在system_privilege_map视图中;
一些系统权限:create table//创建表; create any table//在任何用户模式中创建表;
授予系统权限
grant {系统权限|角色}[,{系统权限|角色}]…
to {用户|角色|public}[,{用户|角色|public}] …
[with admin option]
为用户U1授予在任何用户模式下建表的权限和查询任何模式中基本表中数据的权限。
回收系统权限
revoke { 系统权限 | 角色 } [, { 系统权限 | 角色 } ]…
from { 用户 | 角色 | public} [, { 用户 | 角色 | public}] …
对象权限
指某一个用户对其他用户的表、视图、序列、存储过程、函数、包等进行操作的权限。
对象权限可以是对数据的查询(select)、修改(update)、删除(delete) 、插入(insert)或引用(references) ,也可以是是否可以执行(execute)程序的权限,或修改对象结构(alter)的权限。
授予对象权限
grant {对象权限[,对象权限]…| all[privileges]}
on [模式.] 对象名
to { 用户|角色|public}[,{用户|角色|public}] …
[with grant option]
示例:把对S表的全部权限授予用户U1和U2;
grant all [privileges]
on s
to u1, u2;
把查询S表和修改学生学号的权限授给用户U3,并允许他再将此权限授予其他用户。
grant update(sno), select
on s
to u3
with grant option; //u3已有相关的权限,可以传播给u4
grant update(sno), select
on s
to u4; //但是u4已经无法再传播,因为无with grant option;
回收对象权限
revoke {对象权限[,对象权限 ]…|all[privileges]}
on [模式.] 对象名
from { 用户|角色|public}[,{用户|角色|public}] …
把用户U3修改学生学号的权限收回。
revoke update(sno)
on s
from u3;
4. 角色管理
角色是一组权限的集合。
CONNECT:连接数据库。
RESOURCE:建立聚集、索引类型、操作者、序列、表、触发器、类型等数据库对象。
DBA:所有系统权限。
创建角色语句格式:
create role 角色名
[not identified | identified { by 口令 | externally | globally}]
修改角色语句格式:
alter role 角色名
[not identified | identified { by 口令 | externally | globally}]
删除角色语句格式:
drop role 角色名
授予角色系统权限
grant {系统权限|角色}[,{系统权限|角色}]…
to {用户|角色|public}[,{用户|角色|public}]…
[with admin option]
回收角色系统权限
revoke{系统权限|角色}[,{系统权限|角色}]…
from {用户|角色|public}[,{用户|角色|public}] …
授予角色对象权限
grant {对象权限 [,对象权限 ] … | all [ privileges ]}
on [模式.] 对象名
to {用户|角色|public}[,{用户|角色|public}]…
[with grant option]
回收角色对象权限
revoke {对象权限[,对象权限 ]…|all[ privileges]}
on [模式.]对象名
from { 用户|角色|public}[, {用户|角色|public}] …