适合小白学习
用户(A)(B)
授权(grant) 撤销(revoke)
给用户赋予权限
create user A identified by 123456; //创建用户A 密码123456
给用户授予权限
grant create session to A;
grant connect,resource to A;
执行上面的sql语句后用户包括的权限:
CONNECT角色: --是授予最终用户的典型权利,最基本的
ALTER SESSION --修改会话
CREATE CLUSTER --建立聚簇
CREATE DATABASE LINK --建立数据库链接
CREATE SEQUENCE --建立序列
CREATE SESSION --建立会话
CREATE SYNONYM --建立同义词
CREATE VIEW --建立视图
RESOURCE角色: --是授予开发人员的
CREATE CLUSTER --建立聚簇
CREATE PROCEDURE --建立过程
CREATE SEQUENCE --建立序列
CREATE TABLE --建表
CREATE TRIGGER --建立触发器
CREATE TYPE --建立类型
查看:
show user; //查看当前登录用户
select * from all_users; //查看所有用户
创建:
create user A identified by 123456; //创建用户A 密码123456
授权——系统权限:
grant create session to A; //授予A用户创建session的权限,即登陆权限 (必须授予,登录使用)
grant create table to A; //授予A用户创建表的权限
grant unlimited tablespace to A; //授予A用户使用表空间的权限(想创建表,必须具有使用表空间权限)
grant drop any table to A; //授予删除表的权限
grant insert any table to A; //插入表的权限
grant update any table to A; //修改表的权限
grant create view to A; //创建视图权限
grant create session public; //把创建session的权限,授予所有的用户;
撤销权限(基本语法同grant,关键字为revoke):
查看:
我们使用A用户登录,查看它具有的系统权限;
select * from user_sys_privs; //查看当前用户所有系统权限
select * from user_tab_privs; //查看所用用户对表的权限
oracle中对象是彼此分开的,默认情况下,不能相互访问数据,但是可以通过授予对象权限的方式,让不同用户之间的相互访问;
我们使用A用户创建的表Atable ,然后在没有给B授权的情况下,让B查询Atable;(没有权限)
select * from A.Atable; //提示出现错误
我们让A用户把权限授予B用户,同时也可以撤销授予其他用户的权限,授予的权限还可以具体到表的某一列上;
grant select on Atable to B; //授权(查询)权限,select可替换为insert/update/insert<id>即(插入/修改/插入id)权限
revoke insert on Atable to B; //撤销插入权限,同上
我们可以查看对象所具备的权限;(以B为例)
set linesize 300;
select * from user_tab_privs;
权限传递:
在默认情况下,权限之间是不可以相互传递的;但是当我们加上admin option 之后就能进行传递;
grant alter any table to A with admin option; //系统用户操作授权
A也具备授予B,alert any table的权限;
grant alter any table to B; //A授权给B
角色:
角色即权限的集合,可以把一个角色授予给用户
create role myrole; //创建角色
grant create session to myrole; //将创建session的权限授予myrole
grant myrole to A; //授予A用户myrole的角色
drop role myrole; //删除角色