当前位置:Gxlcms > 数据库问题 > Oracle 用户,角色,权限等

Oracle 用户,角色,权限等

时间:2021-07-01 10:21:17 帮助过:61人阅读

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

,包含的对象权限存放在 dba_tab_privs 中。
下面是“角色”、“用户”和“权限”的互查:

1. 用户

例:

@>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 INDEXTYPE

10 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           NO

9 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

2. 权限

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

2.1. 系统权限管理

2.1.1 系统权限分类

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

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

2.1.2 系统权限授权命令

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

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

 2.1.3.权限相关的视图

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

       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:     某个角色被赋予的相关表的权限

3. 角色

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

3.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.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;
角色删除后,原来拥用该角色的用户就不再拥有该角色了,相应的权限也就没有了。

Oracle 用户,角色,权限等

标签:uid   dba   特权   权限管理   OLE   tee   source   所有权限   ack   

人气教程排行