Oracle数据库权限操作

来源:互联网 发布:产品外形设计软件 编辑:程序博客网 时间:2024/09/21 09:18

基本概念:

结构化查询语言SQL:structured querylanguage

 

数据定义语言DDL:data definitionlanguage(table structure)
 create table/alter table/drop table
 column     datatype        width       constraints
  列         数据类型       宽度           约束

 

数据操作语言DML:data manipulationlanguage(table data)
 insert  delete update  
 row

 

事物控制语言TCL:transaction controllanguage
 commit rollback savepoint
 提交  回滚    保留点
 确认  取消  

 

数据查询语言DQL:data querylanguage
 select

 

数据控制语言DCL:data controllanguage(多用户时)
 grant revoke
 授权  回收权限

 

plsql、sqlplus、oracle区别与联系

1、plsql是oracle封装的SQL脚本语言,跟微软SQLSERVER的T-SQL一样,就是标准SQL语言之上加有自己的函数和一些特殊写法,比如字符串连接在sqlserver里是用“+”,在oracle里是“||”。

2、sqlplus是oracle的查询分析器,执行plsql语句的工具,跟微软sqlserver的查询分析器一样。”原文载自http://zqc-0101.iteye.com/blog/1190802

Oracle有3个默认用户:

      sys change_on_install [as sysdba]

      system manager

      scott tiger

sqlplus显示当前用户拥有哪些系统权限的命令:

      select * from user_sys_privs;

sqlplus显示当前用户拥有哪些表权限的命令:

      select * from user_tab_privs;

创建用户small且密码为small:

      create user small identified by small;

系统权限:

        授权:grant createsession tosmall;      //授权small创建会话的权限

              grant create table tosmall;            //授权small建表的权限

               grant unlimitedtablespace tosmall;    //授权small无限制表空间的权限

              grant create session topublic;          //授权给所有用户

     回收权限:revoke session fromsmall;

              revokecreate table fromsmall;

              revoke unlimitedtablespace from small;

对象权限(以另一个用户lee为对象,lee有一个mytable表):

      grant select on mytable tosmall;         //赋予small操作lee的mytable表的查询权限

      grant all on mytable to small;

      revoke select on mytable fromsmall;      //撤销small操作lee的mytable表的查询权限

       revokeall on mytable from small;

 

oracle在对象权限中可以将权限限制在列上:

      grant insert(id) on mytable tosmall;     //只允许插入id

      grant update(name) on mytable tosmall;   //只允许更新name

此时  select* fromuser_tab_privs;无法显示出结果,因为只对表的一部分操作进行了授权,可用

     select * from user_cul_privs;显示权限信息

 

注意:修改表时,插入、更新和删除,在操作结束后若要保存需要commit提交保存

Oracle数据库权限操作

 权限的传递(以上图为例):包括系统权限的传递和对象权限的传递,两者大同小异

  • 系统权限的传递

第一种:sys赋予权限给small,但small无法将该权限继续赋予给lee

    在sys下:grantalter any table to small;

   此时在small下:select * from user_sys_privs;可以看见sys授予的alter anytable的权限

   但是在small下如果继续:grant alter any table to lee;就会出现错误,显示权限不足

   好比房客small租了房东sys的房子,却没有权利在房东sys不知道的情况下将房子私自继续租给房客lee之类的人一样

 

第二种:sys赋予权限给small,small将该权限继续赋予给lee

    在sys下:grantalter any table to small with admin option;

   此时在small下:select * from user_sys_privs;可以看见sys授予的alter anytable的权限,并且在AD栏下显示YES

   然后在small下如果继续:grant alter any table to lee;

   此时在lee下:select * from user_sys_privs;可以看见lee也拥有了alter anytable的权限,但此时lee却不能将此权限继续授予其他用户

   好比房客small租了房东sys的房子,并且房东sys告诉small,他可以将房子继续租给其他人使用,所以房客small将房子租给了房客lee,可是房客lee除了自己使用这个房子,却没有权利将这个房子继续租下去

 

第三种:sys赋予权限给small,small将该权限继续赋予给lee,lee可以继续将该权限传递下去

    在sys下:grantalter any table to small with admin option;

   此时在small下:select * from user_sys_privs;可以看见sys授予的alter anytable的权限,并且在AD栏下显示YES

   然后在small下如果继续:grant alter any table to lee with adminoption;

   此时在lee下:select * from user_sys_privs;可以看见lee也拥有了alter anytable的权限,并且在AD栏下显示YES,此时lee却能将此权限继续授予其他用户

   好比房客small租了房东sys的房子,并且房东sys告诉small,他可以将房子继续租给其他人使用,所以房客small将房子租给了房客lee,不同的是,这次small也告诉lee,他可以将房子继续租下去,那么lee便也有权利将这个房子继续租下去。

  • 对象权限的传递

同样有三种:基本原理也是完全相同,只是操作对象和操作命令不同

操作对象是对具体的表进行操作,且操作的是表内的内容,包括查询、修改、增加和删除

举例:

      sys新建一个表:create table A(id int);

      sys允许small查询此表:grant select on A to small;

此时small可以对表A进行查询操作,却不可以将此权限授予其他用户

     sys中如此授权:grant select on A to small with grant option;

此时small就可以将此权限也授予其他用户,如:grantselect on A to lee;或者grant select on A to lee withgrant option;(此时lee也有了将权限传递的权利) 

 

问题:如果sys将给small的权限撤消了,lee还会不会有从small那里得到的权限呢?对于oracle9和oracle10来说,两个结果是不同的,试试吧!

 


 

原创粉丝点击