Oracle的用户权限分为哪几类?如何导出用户的权限?

0    267    2

Tags:

👉 本文共约1560个字,系统预计阅读时间或需6分钟。

权限是指执行特定类型SQL命令或访问其他用户对象的权利,包括系统权限(System Privilege)、对象权限(Object Privilege)、角色权限(Role Privilege)、列权限。

Oracle的用户权限分为哪几类?如何导出用户的权限?

(一)系统权限

系统权限是指执行特定类型SQL命令的权利。它用于控制用户可以执行的一个或是一组数据库操作。通过查询系统表SYSTEM_PRIVILEGE_MAP可以获取所有系统权限,查询视图DBA_SYS_PRIVS可以获取每个用户拥有的系统权限。以下示例显示了SCOTT用户具有的系统权限:

一般情况,授予系统权限是由DBA完成的,如果用其他用户来授予系统权限,那么要求该用户必须具有GRANT ANY PRIVILEGE的系统权限。在授予系统权限时,可以带有WITH ADMIN OPTION选项,这样,被授予权限的用户或角色还可以将该系统权限授予其他的用户或角色。

(二)对象权限

对象权限指访问其它用户(SCHEMA)对象的权利,用户可以直接访问自己用户的对象,但是如果要访问别的用户的对象,那么必须具有该对象的相应权限。常用的对象权限有:ALTER、DELETE、SELECT、INSERT、UPDATE等。通过数据字段视图DBA_TAB_PRIVS可以查询用户或角色所具有的对象权限。下列示例列举出了所有的对象权限的种类:

可以单独赋权,也可以多个权限用逗号隔开:

也可以使用ALL来赋权:

需要注意的是,系统权限和对象权限不能放在一个GRANT语句中进行授权,分开单独授权即可,否则会报错:

(三)列权限

可以基于列进行赋权,只不过只能赋予INSERT、REFERENCES和UPDATE的权限,举例如下:

基于列的权限可以查询DBA_COL_PRIVS视图。

(四)角色权限

角色即用户权限的集合,可以对用户直接赋予某一个角色,这样,该用户就拥有了角色的所有权限。如果想查询角色所拥有的权限,那么可以通过视图DBA_SYS_PRIVS来查询;如果想查询某个用户拥有哪些角色,那么可以通过视图DBA_ROLE_PRIVS来查询。
角色权限需要注意默认角色(Default Role)的问题。一个用户一旦被赋予某个角色之后,其默认角色为YES,即角色权限处于激活状态,该角色拥有的权限是生效的;若默认角色为NO,则代表目标用户被赋予了某个角色,但是该角色拥有的权限并没有生效。可以使用如下SQL语句让角色生效:

(五)如何获取用户的权限

若要获取一个用户的角色、系统权限、对象权限以及列权限,则可以通过以上介绍的数据字典视图来获取也可以通过DBMS_METADATA.GET_GRANTED_DDL来获取。
若使用SYS用户创建了如下的用户LHRSYS并赋予相应的权限:

存储过程获取

若通过数据字典来获取权限则可以通过如下的程序来获取LHRSYS的所有权限:

Oracle的用户权限分为哪几类?如何导出用户的权限?

可以直接运行EXEC_SQL列来创建用户并赋予相应的权限。

视图获取

另外,可以创建如下的视图:

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

这样就可以直接查询某个用户的权限了:

DBMS_METADATA.GET_DDL和DBMS_METADATA.GET_GRANTED_DDL获取

通过系统包DBMS_METADATA.GET_DDL也可以获取用户的权限信息,如下所示:

将结果拷贝出来简单的用文本编辑工具编辑后即可运行。

通过exp或expdp

另外还可以通过exp或expdp来获取用户的权限,这里不再演示。

其它

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部