基本概念:
结构化查询语言SQL:structured query language
数据定义语言DDL:data definition language(table structure)
create table/alter table/drop table
column datatype width constraints
列 数据类型 宽度 约束
数据操作语言DML:data manipulation language(table data)
insert delete update
row
事物控制语言TCL:transaction control language
commit rollback savepoint
提交 回滚 保留点
确认 取消
数据查询语言DQL:data query language
select
数据控制语言DCL:data control language(多用户时)
grant revoke
授权 回收权限
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 create session to small; //授权small创建会话的权限
grant create table to small; //授权small建表的权限
grant unlimited tablespace to small; //授权small无限制表空间的权限
grant create session to public; //授权给所有用户
回收权限:revoke session from small;
revoke create table from small;
revoke unlimited tablespace from small;
对象权限(以另一个用户lee为对象,lee有一个mytable表):
grant select on mytable to small; //赋予small操作lee的mytable表的查询权限
grant all on mytable to small;
revoke select on mytable from small; //撤销small操作lee的mytable表的查询权限
revoke all on mytable from small;
oracle在对象权限中可以将权限限制在列上:
grant insert(id) on mytable to small; //只允许插入id
grant update(name) on mytable to small; //只允许更新name
此时 select * from user_tab_privs;无法显示出结果,因为只对表的一部分操作进行了授权,可用
select * from user_cul_privs;显示权限信息
注意:修改表时,插入、更新和删除,在操作结束后若要保存需要commit提交保存
权限的传递(以上图为例):包括系统权限的传递和对象权限的传递,两者大同小异
第一种:sys赋予权限给small,但small无法将该权限继续赋予给lee
在sys下:grant alter any table to small;
此时在small下:select * from user_sys_privs;可以看见sys授予的alter any table的权限
但是在small下如果继续:grant alter any table to lee;就会出现错误,显示权限不足
好比房客small租了房东sys的房子,却没有权利在房东sys不知道的情况下将房子私自继续租给房客lee之类的人一样
第二种:sys赋予权限给small,small将该权限继续赋予给lee
在sys下:grant alter any table to small with admin option;
此时在small下:select * from user_sys_privs;可以看见sys授予的alter any table的权限,并且在AD栏下显示YES
然后在small下如果继续:grant alter any table to lee;
此时在lee下:select * from user_sys_privs;可以看见lee也拥有了alter any table的权限,但此时lee却不能将此权限继续授予其他用户
好比房客small租了房东sys的房子,并且房东sys告诉small,他可以将房子继续租给其他人使用,所以房客small将房子租给了房客lee,可是房客lee除了自己使用这个房子,却没有权利将这个房子继续租下去
第三种:sys赋予权限给small,small将该权限继续赋予给lee,lee可以继续将该权限传递下去
在sys下:grant alter any table to small with admin option;
此时在small下:select * from user_sys_privs;可以看见sys授予的alter any table的权限,并且在AD栏下显示YES
然后在small下如果继续:grant alter any table to lee with admin option;
此时在lee下:select * from user_sys_privs;可以看见lee也拥有了alter any table的权限,并且在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就可以将此权限也授予其他用户,如:grant select on A to lee;或者grant select on A to lee with grant option;(此时lee也有了将权限传递的权利)
问题:如果sys将给small的权限撤消了,lee还会不会有从small那里得到的权限呢?对于oracle9和oracle10来说,两个结果是不同的,试试吧!