Oracle中的用户、角色和权限控制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_17503037/article/details/83023222

用户

用户分为 系统用户 和 普通用户 两类

Oracle中的用户概况

在Oracle中,视图dba_users存储了所有用户的基本信息。查看用户信息:

select * from dba_users

利用系统用户创建新用户

create user 用户名 identified by 密码 default tablespance 表空间

identified by 选项是必需的,用于指定新用户的密码

用户的对象集合–模式

模式(Schema)是用户的附属对象,依赖于对象的存在而存在。一个用户在数据库中所拥有的所有对象的集合即为该用户的模式。这些对象包括表、索引、视图和存储过程等。可以通过视图dba_objects来查看一个对象的拥有者。

desc dba_objects;

引用一个用户的所有对象,可以使用user.schema的形式。

创建用户事件触发器

create or replace trigger tr_truncate_table
after truncate
on system.schema
begin
	insert into truncate_log values (ora_dict_obj_name,user,sysdate);
end;

用户的schema与用户同名,例如用户System的Schema名称同为system。

通过骚起来语句查看当前登录用户

select sys_context('userenv','current_user') current_user,sys_context('userenv','current_schema') current_schema from dual;

sys_context是一个系统函数;sys_context(‘userenv’,‘current_user’) 获取当前用户的用户名;sys_context(‘userenv’,‘current_schema’)获取当前用户的schema

系统用户–system与sys

sys的用户角色为sysdba(数据库管理员),是数据库中权限最高的用户。system的用户角色为sysoper(数据库操作员),权限仅次于sys用户

为用户解锁

alter User system account unlock

重置用户密码

alter User system identified by abc123

权限

权限分为系统权限和对象权限

系统权限

系统权限是Oracle内置的、与具体对象无关的权限类型。这些权限不指向具体对象,而是针对某种操作而言。例如创建表的权限

获得系统权限信息

视图dba_sys_privs描述系统权限及权限分配情况

desc dba_sys_privs

视图system_privilege_map描述Oracle的系统权限信息

desc system_privilege_map

分配系统权限

grant用户分配权限;

grant create session to test

将create session 权限分配给用户test

利用system用户为test分配在表空间users上的可用空间

alter User test quota 100m on users quota 20m on temp

quota用于为用户test分配可用空间。在users分配100m,在temp分配20m

admin option

admin option可以将权限接着传播给下一个用户,分配权限时不指定admin option 那么权限就无法传播给下一个用户。

利用用户system为用户test重新分配权限,并指定admin option

grant create session,create table to test with admin option;

一次性分配多个权限时,用‘,’(逗号)分隔

利用用户test为用户test_user分配权限

grant create session,create table to test_user

收回用户的系统权限

例如,收回用户test的权限

revoke create session,create table from test

此时test没有权限,但是test_user权限不变,说明使用admin option 传播的权限。不会因传播者权限的变更而失效

对象权限

对象权限主要包括:

select、insert、Update、delete、
execute:函数、存储过程、程序包等的调用或执行
index:为表创建索引
references:为表创建外键
alter:修改表或者序列的属性

查看一个用户针对某个数据表的权限,通过视图user_tab_privs或者dba_tab_privs

分配权限

grant 权限 on 对象 to 用户

将表employee的select权限分给用户test

grant select on employee to test

分配 Update、insert权限

grant update,insert on employee to test

分配所有权限

grant all on employee to test

with grant option

with grant option允许权限传播

grant select on employee to test with grant option

收回权限

revoke update,insert on employee from test

因为select权限被传播了,那么收回用户test的select权限时。用户test_user的的权限也会被回收。这与admin option 传播的系统权限完全不同

角色

利用角色进行权限分配

创建角色

create Role role_employee;

利用用户system为角色分配权限

grant select,Update,insert,delete on employee to role_employee;

利用角色为用户分配权限

grant role_employee to test,test_user;

角色的延伸–继承

一个角色可以继承其他角色的权限集合

creat Role role_test;
grant role_employee to role_test
grant creat session,creat table to role_test

将角色分配给角色实际是实现了角色的继承。

从其他角色继承来的权限不会体现在数据字典中,但可以在视图dba_role_privs中获得继承信息

禁用/启用角色

禁用用户test的角色

alter User test default role none

启用用户test的角色

set role role_employee

role_employee为用户所拥有的角色,set role role_employee用于设置当前用户的默认角色。

Oracle常见的三个内置角色

dba角色:数据库管理员角色

connect角色:创建会话、创建表、创建视图等权限。这些权限在用户自己的schema内部。admin_option均为no。表名这些权限不可传播

resource角色:这些权限在用户自己的schema内部。admin_option均为no。表名这些权限不可传播,此角色隐含另一个权限–unlimited tablespane。该权限不局限于表空间磁盘配额的限制,可以任意扩展大小。

如果安全性要求并非特别高,可以将两种角色同时赋予用户

猜你喜欢

转载自blog.csdn.net/qq_17503037/article/details/83023222