用户
用户分为 系统用户 和 普通用户 两类
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。该权限不局限于表空间磁盘配额的限制,可以任意扩展大小。
如果安全性要求并非特别高,可以将两种角色同时赋予用户
本文来自博客园,作者:NE_STOP,转载请注明原文链接:https://www.cnblogs.com/alineverstop/p/18004635