Oracle系列之权限

涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等

赋予权限:前三个要在管理员权限用户下进行操作

方法1:
grant dba to db_user;--赋予用户数据库管理权限
方法2:
grant connect to db_user;--赋予用户连接权限  注意:在这里,准确的讲,connect不是权限,而是角色。
grant resource to db_user;--赋予用户资源权限
方法3:
grant create session to db_user;--赋予用户创建会话的权限,能够正常登录了
grant resource to db_user;--赋予用户资源权限
方法4:connect db_user/db_user_pw as sysdba或者as sysoper;--连接数据库并赋予权限

管理权限和角色

介绍
这一部分我们主要看看Oracle中如何管理权限和角色,权限和角色的区别在那里。 当刚刚建立用户时,用户没有任何权限,也不能执行任何操作。如果要执行某种特定的数据库操作,则必须为其授予系统的权限;如果用户要访问其它方案的对象,则必须为其授予对象的权限。为了简化权限的管理,可以使用角色。
系统权限
用户名,权限,角色
在建立用户时,Oracle会把用户的信息存放到数据字典中,当给用户授予权限或是角色时,Oracle会将权限和角色的信息存放到数据字典。
通过查询dba_users可以显示所有数据库用户的详细信息;
通过查询数据字典视图dba_sys_privs,可以显示用户所具有的系统权限;
通过查询数据字典视图dba_tab_privs,可以显示用户具有的对象权限;
通过查询数据字典dba_col_privs可以显示用户具有的列权限;
通过查询数据库字典视图dba_role_privs可以显示用户所具有的角色。

select * from system_privilege_map order by name;--Oracle的所有系统权限,一般是dba 
select distinct privilege from user_tab_privs;--显示数据库中用户的对象权限
select * from user_sys_privs;--显示数据库中用户的系统权限
select * from dba_sys_privs where grantee='db_role';--显示数据库中角色的管理员权限
select * from role_sys_privs where role='db_role';--显示数据库中角色的系统权限
select * from dba_tab_privs where grantee='db_role';--显示数据库中角色的对象权限


权限是指执行特定类型sql命令或是访问其它方案对象的权利,包括系统权限和对象权限两种。
系统权限
系统权限介绍
系统权限是指执行特定类型sql命令的权利。它用于控制用户可以执行的一个或是一组数据库操作。比如当用户具有create table权限时,可以在其方案中建表,当用户具有create any table权限时,可以在任何方案中建表。Oracle提供了200多种
系统权限。 常用的有:

create session;--连接数据库 
create user;--建用户
create table; --建表 
create view; --建视图 
create public synonym;--建同义词 
create synonym synonym_name for db_user.table_name;
create procedure;--建过程、函数、包 create trigger 建触发器 
execute any procedure;--执行任何过程
create cluster;--建簇


显示系统权限
Oracle提供了100多种系统权限,而且Oracle的版本越高,提供的系统权限就越多,我们可以查询数据字典视图
system_privilege_map;--可以显示所有系统权限。

授予系统权限

一般情况,授予系统权限是由dba完成的,如果用其他用户来授予系统权限,则要求该用户必须具有grant any privilege的系统权限。在授予系统权限时,可以带有with admin option选项,这样,被授予权限的用户或是角色还可以将该系统权限授给其他用户
回收系统权限
一般情况下,回收系统权限是dba来完成的,如果其它的用户来回收系统权限,要求该用户必须具有相应系统权限及转授系统权限的选项(with admin option)。回收系统权限使用revoke来完成。 当回收了系统权限后,用户就不能执行相应的操作了,但是请注意,系统权限级联收回的问题?[不是级联回收!]
system --->ken --->tom
conn system/123456;
grant create session to ken with grant option;
conn ken/123456;
grant create session to tom;
用system执行如下操作:
revoke create session from ken; --请思考tom还能登录吗?
答案:能,可以登录
对象权限
对象权限介绍
指访问其它方案对象的权利,用户可以直接访问自己方案的对象,但是如果要访问别的方案的对象,则必须具有对象的权限。比如smith用户要访问system.tb_Employee表(system:方案,tb_Employee:表)
常用的有:
alter 修改 delete 删除 select 查询 insert 添加
update 修改 index 索引 references 引用 execute 执行
显示对象权限
通过数据字段视图可以显示用户或是角色所具有的对象权限。视图为dba_tab_privs
conn system/123456;
select distinct privilege from dba_tab_privs;
select grantor, owner, table_name, privilege from dba_tab_privs where grantee='db_role';
1.授予对象权限
在oracle9i前,授予对象权限是由对象的所有者来完成的,如果用其它的用户来操作,则需要用户具有相应的(with grant option)权限,从oracle9i开始,dba用户(sys,system)可以将任何对象上的对象权限授予其它用户。授予对象权限是用grant命令来完成的。 对象权限可以授予用户,角色,和public。在授予权限时,如果带有with grant option选项,则可以将该权限转授给其它用户。但是要注意with grant option选项不能被授予角色。
1.test用户要操作system.tb_Employee表,则必须授予相应的对象权限
1). 希望test可以查询system.tb_Employee表的数据,怎样操作?
grant select on tb_Employee to test;
2). 希望test可以修改system.tb_Employee的表数据,怎样操作?
grant update on tb_Employee to test;
3). 希望test可以删除system.tb_Employee的表数据,怎样操作?
grant delete on tb_Employee to test;
4). 有没有更加简单的方法,一次把所有权限赋给test?
grant all on tb_Employee to test;
2.能否对test访问权限更加精细控制。(授予列权限)
1). 希望test只可以修改system.tb_Employee的表的sal字段,怎样操作?
grant update on tb_Employee(sal) to test;
2).希望test只可以查询system.tb_Employee的表的ename,sal数据,怎样操作?
grant select on tb_Employee(ename,sal) to test;
...
3.授予alter权限
如果test用户要修改system.tb_Employee表的结构,则必须授予alter对象权限
conn system/123456;
grant alter on tb_Employee to test;
当然也可以用sys来完成这件事。
4.授予execute权限
如果用户想要执行其它方案的包/过程/函数,则须有execute权限。比如为了让ken可以执行包dbms_transaction,可以授予execute权限。
conn system/123456;
grant execute on dbms_transaction to ken;
5.授予index权限
如果想在别的方案的表上建立索引,则必须具有index对象权限。如果为了让test可以在system.tb_Employee表上建立索引,就给其index的对象权限
conn system/123456;
grant index on system.tb_Employee to test;
6.使用with grant option选项
该选项用于转授对象权限。但是该选项只能被授予用户,而不能授予角色
conn system/123456;;
grant select on tb_Employee to test with grant option;
conn test/123456;
grant select on system.tb_Employee to jones;
回收对象权限
在oracle9i中,收回对象的权限可以由对象的所有者来完成,也可以用dba用户(sys,system)来完成。 这里要说明的是:收回对象权限后,用户就不能执行相应的sql命令,但是要注意的是对象的权限是否会被级联收回?【级联回收】
如:system--->test--->jones
conn system/123456;
revoke select on tb_Employee from test;
请大家思考,jones能否查询system.tb_Employee表数据。
答案:查不了了(和系统权限不一样,刚好相反)

收回用户系统权限

revoke system_privileges from db_user;
原文地址:https://www.cnblogs.com/tufujie/p/5074513.html