oracle管理角色和权限

介绍

这一部分主要看看oracle中如何管理权限和角色,权限和角色的区别在哪里。

当刚刚建立用户时,用户没有任何权限,也不能执行任何操作。如果要执行某种特定的数据库操作,则必需为其授予系统的权限;如果用户要访问其它方案的对象,则必需为其授予对象的权限,为了简化权限的管理,可以使用角色。

权限:

权限是指执行特定类型sql命令或是访问其它方案对象的权利,包括系统权限和对角权限两种。

系统权限介绍

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

create session 连接数据库;

create view 建视图;

create procedure 建过程、函数、包;

create cluster 建簇;

create table 建表;

create public synonym 建同义词;

create trigger 建触发器;

显示系统权限

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

基本语法:

select * from system_privilege_map order by name;

oracle11GR2中提供了208个系统权限。

授予系统权限

一般情况,授予系统权限是有dba完成的,如果用其它用户来授予系统权限,则要求用户必需具有grant any privilege的系统权限在授予系统权限时,可以带有with admin option选项,这样,被授予权限的用户或是角色还可以将该系统权限授予其它的用户或是角色。为了让大家快速入门,我们举例说明:

1、创建两个用户ken,tom初始阶段他们没有任何权限,如果登陆就会出错误的信息。

1.1、创建两个用户,并指定密码。

SQL>create user ken identified by ken;

SQL>create user tom identified by tom;

2、给用户ken授权

2.1、授予create session和create table权限时带with admin option

授权基本语法:

grant 权限名称 to 用户名;

SQL>grant create session to ken with admin option;

SQL>grant create table to ken with admin option;

2.2、授予create view时不带with admin option

SQL>grant create view to ken;

3、给用户tom授权

我们可以通过ken给tom授权,因为with admin option是加上的。当然也可以通过dba给tom授权,我们就用ken给tom授权:

SQL>grant create session to tom with admin option;

SQL>grant create table to tom with admin option;

SQL>grant create view to tom;//报错,由于ken被dba授权时没有带with admin option参数,所以ken没有权限对tom进行create view的授权。

回收系统权限

一般情况下,回收系统权限是dba来完成的,如果其它的用户来回收系统权限,要求该用户必需具有相应系统权限及转授系统权限的选项(with admin option)。回收系统权限使用revoke来完成,当回收了系统权限后,用户就不能执行相应的操作了,但是请注意,系统权限级联收回问题?(不会级联回收权限)

system==>>ken==>>tom

(create session)(create session)(create session)

用system执行如下操作:

revoke create session from ken;请思考tom还能登录吗?可以登录。

回收系统权限基本语法:

revoke 系统权限名 from 用户名;

特别说明:系统权限的回收不是级联回收。

对象权限介绍

访问其它方案对象的权利,用户可以直接访问自己方案的对象,但是如果要访问别的方案的对象,则必需具有对象的权限,比如smith用户要访问scott.emp表(scott:方案,emp:表)

则必需在scott.emp表上具有对象的权限。常用的权限有:

alter 修改、delete 删除、select 查询、insert 添加、update 修改、index 索引、references 引用、execute执行。

查看oracle提供的所有的对象权限(仅dba用户可以查看)

select distinct privilege from dba_tab_privs;

重要查询文档

查看当前用户的表(自己的表)

select table_name from user_tables;

查询oracle中所有的系统权限,一般是dba

select * from system_privilege_map order by name;

查询oracle中所有的角色,一般是dba

select * from dba_roles;

查询oracle中所有对象权限,一般是dba

select distinct privilege from dba_tab_privs;

查询数据库的表空间

select tablespace_name from dba_tablespaces;

查询当前用户具有什么样的系统权限

select * from user_sys_privs;

查询当前用户在别人的表上,具有什么样的对象权限

select * from user_tab_privs; (查看对表的权限)

select * from user_col_privs; (查看对表的列的权限)

查询某个用户具有怎样的角色

select * from dba_role_privs where grantee=‘用户名‘;

查看某个角色包括哪些系统权限。

select * from dba_sys_privs where grantee=‘DBA‘;

或者是:

select * from role_sys_privs where role=‘DBA‘;

查看某个角色包括的对象权限

select * from dba_tab_privs where grantee=‘角色名‘;

当某个角色具有什么样的系统权限或对象权限,也可通过pl/sql developer工具直接查看即可。

显示执行的错误信息

在执行完语句后,就执行下面的语句

show error;

显示oracle某个操作用时

set timing on;

授权对象权限

在oracle9i前,授予对象权限是由对象的所有者来完成的,如果用其它的用户来操作,则需要用户具有相应的(with grant option)权限,从oracle9i开始,sys,system可以将任何对象上的对象权限授予其它用户,授予对象权限是用grant命令来完成的。

授权基本语法:

grant 对象权限 on 数据库对象 to 用户名 [with grant option] [,角色名]

特别说明:可以把权限直接赋给用户或角色。[with grant option]选项只能授予用户,不能授予角色。

我们看几个案例:

1、monkey用户要操作scott.emp表,则必需授予相应的对象权限。

(1)、希望monkey可以查询scott.emp的表数据,怎样操作?

SQL>grant select on scott.emp to monkey;

(2)、希望monkey可以修改scott.emp的表数据,怎样操作?

SQL>grant update on scott.emp to monkey;

(3)、希望monkey可以删除scott.emp的表数据,怎样操作?

SQL>grant delete on scott.emp to monkey;

(4)、有没有更加简单的方法,一次把所有权限赋给monkey?

SQL>grant all on scott.emp to monkey;

2、授权alter权限

如果black用户修改scott.emp表的结构,则必需授予alter对象权限

SQL>grant alter on scott.emp to black;

3、授予execute权限

如果用户想要执行其它方案的包/过程/函数,则需有execute权限。比如为了让ken可以执行包dbms_transaction,可以授予execute权限。

SQL>grant execute on dbms_transaction to ken;

4、授予index权限

如果想在别的方案的表上建立索引,则必需具有index对象权限,如为了让black可以在scott.emp上建立索引,就给其index的对象权限

SQL>grant index on scott.emp to blake;

5、使用with grant option选项

该选项用于转授对象权限,但是该选项只能被授予用户,而不能授予角色。

例:由blake给jones授予select权限

先由dba给blake授予select权限

SQL>conn system/orcl;

SQL>grant select on scott.emp to blake with grant option;

SQL>conn blake/orcl;

SQL>grant select on scott.emp to jones;

回收对象权限

在oracle9i中,收回对象的权限可以由对象的所有者来完成,也可以用dba用户(sys,system)来完成。

这里要说明的是:收回对象权限后,用户就不能执行相应的sql命令,但是要注意的是对象的权限是否会被级联收回?(级联回收)

请看案例:

scott========>>blake========>>jones

select on emp  select on emp  select on emp

对象权限回收基本语法:

revoke 对象权限 on 数据库对象 from 用户名[,角色名];

特别说明:对象的权限回收是级联回收。

1、切换system用户

SQL>conn system/orcl;

2、建立blake和jones用户

SQL>create user blake identified by blake;

SQL>create user jones identified by jones;

3、给blake和jones用户赋系统权限(登录权限)

SQL>grant create session to blake with admin option;

SQL>grant create session to jones;

4、切换scott用户给blake赋对象权限(查看权限)

SQL>conn scott/tiger;

SQL>grant select on emp to blake with grant option;

5、切换blake用户给jones赋对象权限(查看权限)

SQL>conn blake/blake;

SQL>grant select on scott.emp to jones;

6、切换scott用户回收blake对象权限

SQL>conn scott/tiger;

SQL>revoke select on emp from blake;

7、切换blake用户测试查看对象权限是否还能用。

SQL>conn blake/blake;

SQL>select * from scott.emp;//报错,blake无查询权限。

8、切换jones用户测试查看对象权限是否还能用。

SQL>conn jones/jones;

SQL>select * from scott.emp;//报错,jones无查询权限。

管理权限和角色--角色

介绍

角色就是相关权限的命令集合,使用角色的主要目的就是为了简化权限的管理。

请看一个问题:假定有用户1,2,3为了让他们都拥有权限。

1、连接数据库

2、在scott.emp表上select,insert,update

如果采用直接授权操作,则需要进行12次授权。

角色分为预定义角色和自定义角色。

预定义角色

预定义角色是指oracle所提供的角色,每种角色都用于执行一些特定的管理任务,下面我们介绍常用的预定义角色connect,resource,dba

特别说明:角色可以包含系统权限,也可以包含对象权限。

要查看角色有怎样的权限可以通过下列语句查看:

select * from dba_sys_privs where grantee=‘DBA‘;

注意:查询时角色的名称要大写(DBA、CONNECT、RESOURCE),小写无法查询

使用system登录可以查询所有预定义角色:

select * from dba_roles;

如何知道某个用户具有什么样的角色:

select * from dba_role_privs where grantee=‘用户名‘;

通过角色给用户赋权限基本语法:

grant 角色名[,角色名2,...] to 用户名;

1、connect角色

connect角色具有一般应用开发人员需要的大部分权限,只要给用户授予connect和resource角色就够了,connect角色具有哪些系统权限呢?

connect角色具有:

create session 创建连接权限

2、resource角色

resource角色具有应用开发人员所需要的其它权限,比如建立存储过程、触发器等。这里需要注意的是resource角色隐含了unlimited tablespace系统权限。

resource角色具有:

create trigger  创建触发器

create sequence 创建序列

create type     创建类型权限

create procedure创建过程

create cluster  创建集群

create operator 创建运营商

create indextype创建索引类型

create table    创建表

3、dba角色

dba角色具有所有的系统权限,及with admin option选项,默认的dba用户为sys和system他们可以将任何系统权限授予其它用户,但是要注意的是dba角色不具备sysdba和sysoper的特权(启动和关闭数据库)

案例:

创建一个用户,然后赋给connect角色和resource角色

SQL>create user tempuser identified by tempuser;

SQL>grant connect,resource to tempuser;

创建一个用户jack并将其设为具有dba角色的用户

SQL>create user jack identified by jack;

SQL>grant dba to jack;

自定义角色

顾名思义就是自己定义的角色,根据自己的需要来定义,一般是dba来建立,如果使用别的用户来建立,则需要具有create role的系统权限。在建立角色时可以指定验证方式(不验证,数据库验证等)

1、建立角色(不验证)

如果角色是公用的角色,可以采用不验证的方式建立角色。

建立角色不验证基本语法:

create role 角色名 not identified;

2、建立角色(数据库验证)

采用这样的方式时,角色名、口令存放在数据库中。当激活该角色时,必需提供口令。在建立这种角色时,需要为其提供口令。

建立角色需数据库验证基本语法:

create role 角色名 identified by 口令;

角色授权

当建立角色时,角色没有任何权限,为了使得角色完成特定任务,必需为其授予相应的系统权限和对象权限。

(一)给角色授权

给角色授予权限和给用户授权没有太多区别,但是要注意系统权限的unlimited tablespace和对象权限的with grant option选项是不能授予角色的

给角色授权基本语法:

grant 对象权限 on 数据库对象 to 自定义角色名;

案例:

完成将create session,select on scott.emp,insert on scott.emp,update on scott.emp授予角色,然后将该角色授予a,b,c用户。

1、使用system用户创建自定义角色

SQL>conn system/orcl;

SQL>create role crud_scott not identified;

2、给自定义角色crud_scott授权

SQL>grant create session to crud_scott;

SQL>grant select on scott.emp to crud_scott;

SQL>grant insert on scott.emp to crud_scott;

SQL>grant update on scott.emp to crud_scott;

3、通过将授权过的角色crud_scott给用户进行授权

SQL>grant crud_scott to a;

SQL>grant crud_scott to b;

SQL>grant crud_scott to c;

(二)分配角色给某个用户

一般分配角色是由DBA来完成的,如果要以其它用户身份分配角色,则要求用户必需具有grant any role的系统权限

通过角色名授权用户基本语法:

grant 角色名 to 用户名 [with admin option];

如果给用户赋权限时带了with admin option选项,被授权的用户可以继续将此权限授予其它用户。

删除角色

使用drop role,一般是dba来执行,如用其它用户则要求该用户具有drop any role系统权限

删除角色基本语法:

drop role 角色名;

显示角色信息

1、显示所有角色

select * from dba_roles;

2、显示角色具有的系统权限

select privilege,admin_option from role_sys_privs where role=‘角色名‘;

3、显示角色具有的对象权限

通过查询数据字典视图dba_tab_privs可以查看角色具有的对象权限或是列的权限。

select * from dba_tab_privs where grantee=‘角色名‘;

4、显示用户具有的角色,及默认角色

当以用户的身份连接到数据库时,oracle会自动的激活默认的角色,通过查询数据库字典视图dba_role_privs可以显示某个用户具有的所有角色及当前默认的角色

select granted_role,default_role from dba_role_privs where grantee=‘角色名‘;

精细访问控制(只做了解,不详细介绍)

是指用户可以使用函数、策略实现更加细微的案例访问控制。如果使用精细访问控制,则当在客户端发出sql语句(select,insert,update,delete)时,oracle会自动在sql语句后追加谓语(where子句),并执行新的sql语句。通过这样的控制,可以使得不同的数据库用户在访问相同的表时,返回不同的数据信息。使用函数或策略是为了更好的保护数据安全性,为不同权限的用户提供不同的安全级别,可有效的保障信息安全。

原文地址:https://www.cnblogs.com/yucoder/p/11057764.html

时间: 2024-08-11 07:31:45

oracle管理角色和权限的相关文章

Oracle用户及角色的权限管理[Oracle基础]

1.查看所有用户: select * from dba_users; select * from all_users; select * from user_users; 2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限): select * from dba_sys_privs; select * from user_sys_privs; 3.查看角色(只能查看登陆用户拥有的角色)所包含的权限 sql>select * from role_sys_privs; 4.查看用户对象权限:

Oracle12C多租户管理用户、角色、权限

在Oracle12C中,用户权限的管理相对传统的 Oracle 单数据库环境稍有不同.在多租户环境中有两种类型的用户. ①:共同用户(Common User): 该用户存在所有容器 (根和所有的 Pdb) 中. ②:本地用户(Local User): 用户只有在特定的 PDB 中存在.同样的用户名中可以存在多个Pdb中创建,但它们之间没有关系. 同样,有两种类型的角色:如 ①:共同角色(Common Role): 该角色在所有容器 (根和所有的 Pdb) 中. ②:本地角色(Local Role

Oracle中的系统权限管理

在实际的IT项目管理中,对数据库的管理显得尤为重要,一般情况下,数据库的管理工作会有公司中的DBA人员来负责.但是,不是任何有关数据库的操作都要去联系DBA啦,万一人家不在或有其它事情不能立即处理时该怎么办呢?所以,掌握一些常用的数据库管理知识就很有必要的.求人不如求自己靠谱些. 鉴于此,我们先简单的介绍一下数据库中的权限管理吧!其它方面的知识点后面再记录!     在数据库中,我们一般讲权限划分为系统权限和对象权限.我们稍稍介绍一下它们的概念:    1.系统权限:能够正常的访问或使用数据库:

Oracle基础学习5-- Oracle权限之”角色”

任何与权限相关的东西都少不了"角色"的概念,Java如此,.Net如此,Oracle当然也不例外. 角色其实就是权限的集合,将多个权限打包到一个角色中,这样每个角色有特定的权限.当需要给某个对象赋予某种权限时,就找到具有相应权限的角色,然后将它加到这个集合当中.下面就简单看看Oracle中角色的运用. 上篇文章讲到,为了给多用户授予各种权限,我们用到了"权限传递"来代替给用户们一个个授权,简化了授权过程.但这种方式较之用"角色"方式授权还是有很多

Oracle 角色、权限

Oracle 角色管理 一.何为角色     角色:角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限.二.系统预定义角色 预定义角色是在数据库安装后,系统自动创建的一些常用的角色. 下介简单的介绍一下这些预定角色.角色所包含的权限可以用以下语句查询: sql>select * from role_sys_privs where role='角色名'; 1.CONNECT, RESOURCE, DBA 这些预定义角色主要是为了向后兼容.其主要是用于数据库管理.orac

oracle角色、权限和用户

oracle角色.权限和用户 [转贴 2010-1-25 10:29:45]  字号:大 中 小 Oracle内置角色connect与resource的权限 首先用一个命令赋予user用户connect角色和resource角色: grant connect,resource to user; 运行成功后用户包括的权限: CONNECT角色: --是授予最终用户的典型权利,最基本的 ALTER SESSION --修改会话 CREATE CLUSTER --建立聚簇 CREATE DATABAS

Oracle 用户,角色,权限等

权限管理是 Oracle 系统的精华,不同用户登录到同一数据库中,可能看到不同数量的表,拥有不同的权限.Oracle 的权限分为系统权限和数据对象权限,共一百多种,如果单独对用户授权,很囧,有一些用户需要的权限是相同的,就把这些用户归为同一类--某种角色,通过设立一些有预定权限的角色简化和明确授权操作,角色出现的动机也就是为了简化权限管理,它是权限的集合.一般做法是:系统把权限赋给角色,然后把角色赋给用户,当然也可以直接把某权限赋给用户.Oracle 提供细粒度的权限,可以对表的某一列单独设置权

Oracle命令:授权-收回权限-角色

Oracle命令:授权-收回权限-角色 oracle grant 不论授予何种权限,每条授权(grant)语句总是由三部分组成: 1) 接受者部分是准备获得权限的一个或多个用户的列表. 2)关键字权限部分由grant后跟一种或多种权限组成.如果在同一条grant语句中有多个权限,权限之间用逗号分隔. 3)  表名部分由关键字o n起头并列出准备在其上授权的表. 看下面的详细介绍,主要是介绍如何把添加.删除.修改.查询四种权限授予用户,如下: 一.insert insert权限允许在其他用户的表中

【视频分享】Liger UI实战集智建筑工程管理系统配商业代码(打印报表、角色式权限管理)

QQ 2059055336 课程讲师:集思博智 课程分类:.net 适合人群:中级 课时数量:23课时 用到技术:Liger UI框架.AJAX.JSON数据格式的序列化与反序列化.角色的交叉权限管理 本课程代码为商业版代码,用户可直接部署运行. 一.系统介绍: 集智建筑工程管理系统是专为建筑类企业打造的一款管理软件.本着"一工程一台帐"的原则,加强对工程的资金管理,解决工程技术部门.工程管理部门.财务部之间数据的共享,方便领导查询工程进度与回款情况,更好的进行查询统计,提供多种统计图