Oracle入门(九)之用户、角色与权限之间关系

转载自 Oracle 用户,角色,权限等

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

    权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级、System 系统级、Role 角色级。这些权限可以授予给用户、特殊用户public或角色,如果授予一个权限给特殊用户"Public"(用户public是oracle预定义的,每个用户享有这个用户享有的权限),那么就意味作将该权限授予了该数据库的所有用户。对管理权限而言,角色是一个工具,权限能够被授予给一个角色,角色也能被授予给另一个角色或用户。用户可以通过角色继承权限,除了管理权限外角色服务没有其它目的。权限可以被授予,也可以用同样的方式撤销。

    Oracle 的角色存放在表 dba_roles 中,某角色包含的系统权限存放在  dba_sys_privs 中,包含的对象权限存放在 dba_tab_privs 中。

下面是“角色”、“用户”和“权限”的互查:

一、用户

例:

@>conn system/888888
Connected.
SYSTEM@userdata>create user user50 identified by user50;User created.SYSTEM@userdata>grant connect,resource to user50;Grant succeeded.

查看当前登录用户拥有的所有角色和系统权限

USER50@userdata>select * from session_privs;PRIVILEGE
------------------------------------------------------------------------------------------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE10 rows selected.USER50@userdata>select * from role_sys_privs;ROLE             PRIVILEGE                ADMIN_OPT
---------------- ------------------------ ---------
RESOURCE         CREATE SEQUENCE            NO
RESOURCE         CREATE TRIGGER             NO
RESOURCE         CREATE CLUSTER             NO
RESOURCE         CREATE PROCEDURE           NO
RESOURCE         CREATE TYPE                NO
CONNECT          CREATE SESSION             NO
RESOURCE         CREATE OPERATOR            NO
RESOURCE         CREATE TABLE               NO
RESOURCE         CREATE INDEXTYPE           NO9 rows selected.

 查看某一用户所拥有的角色和系统权限

SYSTEM@userdata>select * from dba_role_privs where GRANTEE='USER50';GRANTEE                      GRANTED_ROLE       ADMIN_OPT DEFAULT_R
------------------------------ -------------------- --------- ---------
USER50                         RESOURCE          NO          YES
USER50                         CONNECT            NO          YES
SYSTEM@userdata>select * from dba_sys_privs where GRANTEE='USER50';GRANTEE                         PRIVILEGE                     ADMIN_OPT
------------------------------ ------------------------------ ---------
USER50                          UNLIMITED TABLESPACE           NO

查看某一用户拥有的对象权限

SYSTEM@userdata>grant select on scott.emp to user50;SYSTEM@userdata>select * from dba_tab_privs where GRANTEE='USER50';GRANTEE               OWNER           TABLE_NAME      GRANTOR         PRIVILEGE      GRANTABLE  HIERARCHY
-------------------- --------------- --------------- --------------- --------------- --------- ---------
USER50                SCOTT           EMP             SCOTT           SELECT         NO         NO


二、 权限

  • 系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
  • 对象权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。

(1)系统权限管理

A. 系统权限分类

  • DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
  • RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
  • CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。

对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。

B.系统权限授权命令

[系统权限只能由DBA用户授出:sys, system]
授权命令:SQL> grant connect, resource, dba to 用户名1 [,用户名2]...;

[普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。]

 C.权限相关的视图

与权限,角色相关的视图大概有下面这些:

       DBA_SYS_PRIVS: 查询某个用户所拥有的系统权限

      USER_SYS_PRIVS:   当前用户所拥有的系统权限

      SESSION_PRIVS:     当前用户所拥有的全部权限

      ROLE_SYS_PRIVS:     某个角色所拥有的系统权限

       注意: 要以SYS用户登陆查询这个视图,否则返回空.

      ROLE_ROLE_PRIVS:    当前角色被赋予的角色

      SESSION_ROLES:      当前用户被激活的角色

      USER_ROLE_PRIVS:   当前用户被授予的角色

      另外还有针对表的访问权限的视图:

       TABLE_PRIVILEGES

        ALL_TAB_PRIVS   

       ROLE_TAB_PRIVS:     某个角色被赋予的相关表的权限


三、 角色

(1)何为角色
  角色。角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。

(2)系统预定义角色
  预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下介简单的介绍一下这些预定角色。角色所包含的权限可以用以下语句查询:
sql>select * from role_sys_privs where role='角色名';

1.CONNECT, RESOURCE, DBA
这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。将来的版本中这些角色可能不会作为预定义角色。

 

2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE
这些角色主要用于访问数据字典视图和包。

 

3.EXP_FULL_DATABASE, IMP_FULL_DATABASE
这两个角色用于数据导入导出工具的使用。

 

4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE
AQ:Advanced Query。这两个角色用于oracle高级查询功能。

 

5. SNMPAGENT
用于oracle enterprise manager和Intelligent Agent

 

6.RECOVERY_CATALOG_OWNER
用于创建拥有恢复库的用户。关于恢复库的信息,参考oracle文档《Oracle9i User-Managed Backup and Recovery Guide》

 

7.HS_ADMIN_ROLE
A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary.

 

(3) 管理角色


1.建一个角色
sql>create role role1;


2.授权给角色
sql>grant create any table,create procedure to role1;


3.授予角色给用户
sql>grant role1 to user1;


4.查看角色所包含的权限
sql>select * from role_sys_privs;


5.创建带有口令的角色(在生效带有口令的角色时必须提供口令)
sql>create role role1 identified by password1;


6.修改角色:是否需要口令
sql>alter role role1 not identified;
sql>alter role role1 identified by password1;


7.设置当前用户要生效的角色
(注:角色的生效是一个什么概念呢?假设用户a有b1,b2,b3三个角色,那么如果b1未生效,则b1所包含的权限对于a来讲是不拥有的,只有角色生效了,角色内的权限才作用于用户,最大可生效角色数由参数MAX_ENABLED_ROLES设定;在用户登录后,oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。)
sql>set role role1;//使role1生效
sql>set role role,role2;//使role1,role2生效
sql>set role role1 identified by password1;//使用带有口令的role1生效
sql>set role all;//使用该用户的所有角色生效
sql>set role none;//设置所有角色失效
sql>set role all except role1;//除role1外的该用户的所有其它角色生效。
sql>select * from SESSION_ROLES;//查看当前用户的生效的角色。


8.修改指定用户,设置其默认角色
sql>alter user user1 default role role1;
sql>alter user user1 default role all except role1;
详见oracle参考文档


9.删除角色
sql>drop role role1;
角色删除后,原来拥用该角色的用户就不再拥有该角色了,相应的权限也就没有了。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows原生运行Linux的技术细节

Microsoft最近宣布了将Linux Bash与Windows 10进行集成的意图,通过这种集成,Windows 10用户将能在操作系统中原生运行Linux ELF64二进制程序。为避免对该技术的实现方法产生错误的猜测,Windows Subsystem for Linux团队主管Deepu Thomas详细介…

6.操作系统多进程图像

【README】 本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 多进程图像定义:多个进程使用cpu的图像; 多进程图像是操作系统的核心图像; 【1】概述 1) PCB&#xf…

骞云科技 python_骞云科技SmartCMP6.0版本正式发布!

骞云科技作为业内领先的云管理平台及服务提供商,秉持着强力助推企业客户全面提升IT管理水平的理念。历时106天的精细打磨,涵盖110个新功能用户故事,倾注上百位研发、产品、测试小伙伴的心血投入,累计完成4343次代码提交&#xff0…

Oracle入门(五E)之讲解show parameter命令模糊查询

转载自 讲解Oracle show parameter命令的小技巧Oracle参数查询命令show parameter的一个小技巧,可以使用模糊查询,比如我想查询包含db_的参数,那么我就可以用: SQL> show parameter db_; NAME TYPE VALUE --------------------…

.NET平台开源项目速览-最快的对象映射组件Tiny Mapper之项目实践

晚上浏览博客园 看到一篇非常实用的博客:.NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper,花了10分钟简单了解了一下。 看评论也是挺有价值,同时也看到许多新手同学问道在实际项目中使用的情况。 下面就原作者的代码的基础上略作调整…

myeclipse窗口布局控件任意_木辛老师的编程课堂:Python和Qt第2讲之布局管理初探(三)...

在主窗口中放置多个控件,最好的方法是使用布局。控件的布局是学习PyQt路上比较关键也也是比较难理解的部分,赶快跟着木辛老师一起去看看吧。请点击右上角“关注”按钮关注我们哟:跟着木辛老师学习Python编程知识,变身快乐的编程达…

7.用户级线程

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.本文会介绍进程与线程的区别,线程切换,用户态线程,内核级线程等; 【1】多进程回顾 问题&#xff1a…

Oracle入门(五D)之如何设置show parameter显示隐含参数

转载自 oracle如何设置show parameter显示隐含参数在sqlplus中show parameter是显示不了隐藏参数的,需要做一个处理,如下所示: 以SYS用户登录: C:\Documents and Settings\guogang>sqlplus / as sysdba; SQL> create or r…

使用VS Code 从零开始开发并调试.NET Core 应用程序

使用VS Code 从零开始开发并调试.NET Core 应用程序,C#调试。上一篇 使用VS Code开发 调试.NET Core 应用程序 得到了大家的支持。 现在为大家带来从零开始教程,让你更好的了解.NET Core 应用程序。使用VS Code 开发C# 程序 并调试程序。 并且也会解决上…

8.内核级线程(核心级线程)

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.为什么要讲线程呢。实际要讲进程的切换;进程的切换包括切换指令,切换资源;切换指令就是切换线程(简…

Oracle入门(五F)之11g show spparameter 命令的使用

转载自 oracle 11g show spparameter 命令的使用 当我们要获取oracle数据库当前的参数值时,可以通过查询v$parameter动态性能视图得到,当然了也可以使用show parameter p_name这样的方式得到。但是在Oracle11g以前,show parameter只能获得当前…

跨平台与云端创新,为企业和开发者开辟更广阔的未来

从制造业到零售业,从市场营销到客户关系,数字化转型正在给各行各业带来巨大的变革和冲击。面对云计算、大数据、社交和移动计算,企业需要更主动地加速自身业务模式的转变,而开发者和开发团队将在这一转变过程中发挥至关重要的作用…

注解@resource的作用_Bean基于Annotation(注解)的装配方式

在Spring中,尽管使用XML配置文件可以实现Bean的装配工作,但如果应用中有很多Bean时,会导致XML配置文件过于臃肿,给后续的维护和升级工作带来一定的困难。为此,Spring提供了对Annotation(注解)技术的全面支持。Spring中…

Oracle入门(十二H)之设置、恢复和删除不可用列

转载自 Oracle设置和删除不可用列一、不可用列的定义 1、不可用列是什么? 就是表中的1个或多个列被ALTER TABLE…SET UNUSED 语句设置为无法再被程序利用的列。 2、使用场景? If you are concerned about the length of time it could take to drop colu…

9.内核级线程代码实现

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 【说明】 本文中提到的父线程可以理解为父进程因为进程包括运行资源和执行指令,又执行指令表示为线程,所以也可以说 进程包括…

python 列表生成表格_【转】Python 列表生成式

原文:https://blog.csdn.net/heartyhu/article/details/509880071. 生成列表要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11):>>> range(1, 11)[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]但如果要生成[1x1, 2x2, 3x3, ……

Linux(CentOS 6.7)下配置Mono和Jexus并且部署ASP.NET MVC3、4、5和WebApi(跨平台)

1.开篇说明 a. 首先我在写这篇博客之前,已经在自己本地配置了mono和jexus并且成功部署了asp.net mvc项目,我也是依赖于在网上查找的各种资料来配置环境并且部署项目的,而其在网上也已有了很多这方面的文章,故而我就想我是写还是不…

10.操作系统演进过程

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》的《操作系统的那棵树》,内容非常棒,墙裂推荐; 2.思维僵化与发散 the mind is not a vessel that needs filing, but wood that needs igniting. 头脑不是需要归档的容器&am…

Oracle入门(十二I)之误删除数据的恢复方法

转载自 oracle误删除数据的恢复方法今天主要以oracle数据库为例,介绍关于表中数据删除的解决办法。(不考虑全库备份和利用归档日志)删除表中数据有三种方法:delete(删除一条记录)drop或truncate删除表格中数…

Oracle入门(七A)之表空间配额(quota)

转载自 oracle表空间配额(quota)一、quota相关视图 1)dba_ts_quotas(查看所有用户的表空间配额) BYTES字段表示用户已经使用的空间;MAX_BYTES如果为-1表示没有限制,其他值表示限制配额 --只有用alter user user_name quota on tab…