博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle初学者之grant授权
阅读量:3588 次
发布时间:2019-05-20

本文共 2813 字,大约阅读时间需要 9 分钟。

 
  1. 1、给数据库用户授权(对象为用户表)

  2. GRANT privilege[, ...] ON object[, ...] TO { PUBLIC | GROUP group| username}

  3.  
  4. privilege:

  5. select:查询

  6. insert:插入

  7. update:更新

  8. delete:删除

  9. rule:

  10. all:所有

  11.  
  12. grant select,insert,update on tablename to public;

  13. 给所有用户授予查询、插入、更新tablename表的权限

  14. revoke select,insert,update on tablename from public;//收回所有用户查询、插入、更新tablename表的权限

  15.  
  16. object:

  17. table:表

  18. view:视图

  19. sequence:序列

  20. index:索引

  21.  
  22. grant select,insert,update on tablename,viewname,sequencename,indexname to public;

  23.  
  24. public:对所有用户开放权限

  25. GROUP groupname:对该组所有用户开放权限

  26. username:对指定用户开放权限

  27.  
  28. 2、给数据库用户授权(对象多为系统表,如dba可以查看的表)

  29.  
  30. grant dba to username;

  31. 不给用户授予dba权限,用户将无法查看系统表,例如v$datafile,dba_data_files等

  32. revoke dba from username;//对用户username回收dba权限

  33. 注:如果使用pl/sql登录,授予dba权限后,需要重新登陆(初始理解,错误)

  34. 后经验证,不需要重新登陆,只需要重新打开一个会话就可以

  35. 理解:数据库的所有权限操作,都是以会话为单位,如果当前会话执行时没有dba权限,即便是已经重新赋予了权限,在当前会话中也是不起作用的

  36. 而如果当前会话有dba权限,而后台取消了权限,那么当前会话的dba权限也不会消失

  37.  
  38. grant connect to username;

  39. 不给新建用户授予connect权限,新建用户无法通过SID或SERVICE_NAME连接数据库实例,即无法登录数据库

  40. revoke connect to username;//对用户username回收connect权限

  41.  
  42. grant resource to username with admin option;

  43. grant unlimited tablespace to username with admin option;

  44. 不给新建用户授予resource权限,新建用户无法创建表

  45. revoke resource from username;//对用户回收resource权限

  46.  
  47. 3、查看指定用户有哪些系统权限

  48. select * from dba_role_privs where grantee=upper('username');

  49.  
  50. 4、查看指定用户有哪些对象权限

  51. select * from dba_tab_privs where grantee=upper('username');

  52.  
  53.  
  54. 可能遇到问题:

  55. 1、当在一个新建数据库用户上创建表失败时,可以查看系统权限

  56. 在当前用户执行select * from dba_role_privs where grantee=upper('username');如果不能执行(提示表或视图不存在),说明没有dba权限

  57. 解决方法:可以登录sys账户赋予dba权限

  58. 登录sys:sqlplus / as sysdba

  59. 给username赋权限:grant dba to username;

  60.  
  61. 也可以直接登录sys账户,select * from dba_role_privs where grantee=upper('username'),如果granted_role的值没有dba,说明没有dba权限

  62.  
  63.  
  64. 权限相关的查询和赋予:

  65. 所有权限的赋予均是在有赋予权限的用户下进行,此处授权用户都是sys用户

  66. 1、select * from dba_role_privs where grantee=upper('luyongpeng');

  67. 其中,admin_option是通过在授权时添加with admin option 选项定义

  68. grant dba to luyongpeng with admin option;//admin_option为YES,如果不加with admin option 选项,则admin_option为NO

  69. 使用grant dba to luyongpeng;无法覆盖之前的权限

  70. 但grant dba to luyongpeng with admin option 可以覆盖grant dba to luyongpeng;的权限

 
  1. <pre name="code" class="sql">2、select * from dba_sys_privs where grantee=upper('luyongpeng');

  2. 该权限可以通过执行grant dba to luyongpeng;时自动加上,但admin_option默认为NO

  3. 可以通过grant unlimited tablespace to luyongpeng with admin option;将admin_option修改为YES

  4. 当执行revoke dba from luyongpeng;时,系统会同时回收dba权限和unlimite tablespace权限

  5. 如果想保留dba权限,但回收unlimited tablespace权限,可以通过revoke unlimited tablespace from luyongpeng;实现

 
 
  1. <pre name="code" class="sql">3、select * from dba_tab_privs where grantee=upper('luyongpeng');

  2. 该权限表现了当前用户对owner的哪些表具有何种操作权限,并且grantable字段值YES表明了luyongpeng用户可以继续对其他用户开放signtest表的权限

 
 
  1. <pre name="code" class="sql">执行grant insert on signtest to luyongpeng with grant option;

  2. grant delete on signtest to luyongpeng with grant option;

  3. 后,重新查询dba_tab_privs表信息如下,可以看到当加上with grant option选项后,GRANTABLE字段值为YES

你可能感兴趣的文章
看看这些Java代码开发规范吧!你好,我好,大家好!
查看>>
2020年3月,47个经典Spring面试题详解(附带答案)
查看>>
python实现Mapreduce的wordcount
查看>>
Linux字符设备驱动编(步骤,框架(面向对象),分层)
查看>>
linux高级字符驱动之输入子系统
查看>>
代理与反射
查看>>
面向对象
查看>>
训练并导出tensorflow Lite模型中的一些问题 及解决办法
查看>>
QQ小程序百度网盘中的文件保存和下载
查看>>
34个数据库常见面试题讲解
查看>>
什么是存储过程
查看>>
面试题4
查看>>
IOCP模型与网络编程
查看>>
CString的工作原理介绍- -
查看>>
Visual Studio中的文件类型(sln vcproj suo user ncb)
查看>>
为什么要限制栈的大小?
查看>>
windows10中Python3.7.4安装pygame模块
查看>>
dubbo监控中心搭建
查看>>
windows设置nginx开机自启
查看>>
windowsServer设置tomcat自启
查看>>