萤火虫网络
0531-85551080
3G通信资讯3G中国 3G国际 3G终端 3G前沿 4G技术   3G市场动态3G话题 3G项目 3G数据 3G资料 3G技术
3G人才培训3G培训 3G认证 3G人才 3G企业 3G专家   3G网络媒体3G会展 3G增值 3G网络 3G论坛 3G媒体
  欢迎您来到3G中国资讯网!
     首页 > 3G市场动态 > 3G数据  3G论坛 3G认证   

两个不容易理解的概念──user和schema
( http://3g.yhc360.com   2008-3-5 11:06:06 )
 

前言:user是控制权限的,而schema则是一个容器,非所有者如果需要访问这个容器下的对象就需要在对象前面写上schema(owner)的名字,如果不想写而又没有创建synonym,此时可以通过alter session set current_schema=schema_name来改变当前session的schema从而在访问对象时省去schema(owner);最终能否访问对象还是要看是否有访问这个对象的权限而和schema无关。

深入理解user和schema的区别:

user即Oracle中的用户,和所有系统的中用户概念类似,用户所持有的是系统的权限及资源;

而schema所涵盖的是各种对象,它包含了表、函数、包等等对象的“所在地”,并不包括对他们的权限控制。

好比一个房子,里面放满了家具,对这些家具有支配权的是房子的主人(user),而不是房子(schema)。

你可以也是一个房子的主人(user),拥有自己的房子(schema)。可以通过alter session的方式进入别人的房子。

这个时候,你可以看到别人房子里的家具(desc)。

如果你没有特别指定的话,你所做的操作都是针对你当前所在房子中的东西。

至于你是否有权限使用(select)、搬动(update)或者拿走(delete)这些家具就看这个房子的主人有没有给你这样的权限了,或者你是整个大厦(DB)的老大(DBA)。alter session set schema可以用来代替synonyms。

如果你想调用其他schema的对象(有权限的前提下),但并没有建synonym,同时又不想把其他schema名字放入代码中,就可以首先使用alter session set schema=<其他schema名字>。

SQL> connect /as sysdba
已连接。

SQL> revoke dba from xys,test;
revoke dba from xys,test
*
第 1 行出现错误:
ORA-01951: ROLE 'DBA' 未授予 'XYS'


SQL> revoke dba from test;

撤销成功。

SQL> connect xys/manager
已连接。
SQL> select table_name from user_tables;

未选定行

SQL> create table t(id int) ;

表已创建。

SQL> insert into t values(1);

已创建 1 行。

SQL> commit;

提交完成。

SQL> connect test/test
已连接。
SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
T
TT
SYS_TEMP_FBT

SQL> desc t
名称 是否为空? 类型
--------------- -------- -------------

ID NUMBER(38)

SQL> select * from t;

未选定行

SQL> show user
USER 为 "TEST"
SQL> select * from xys.t;
select * from xys.t
*
第 1 行出现错误:
ORA-00942: 表或视图不存在

SQL> alter session set current_schema=xys;

会话已更改。

SQL> show user
USER 为 "TEST"
SQL> select * from xys.t;
select * from xys.t
*
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> select * from t;
select * from t
*
第 1 行出现错误:
ORA-00942: 表或视图不存在

SQL> alter session set current_schema=TEST;

会话已更改。

SQL> select * from t;

未选定行

SQL> connect xys/manager
已连接。
SQL> grant select on t to test;

授权成功。

SQL> connect test/test
已连接。
SQL> select * from xys.t;

ID
----------
1

SQL> alter session set current_schema=xys;

会话已更改。

SQL> select * from t;

ID
----------
1

SQL>

Google
 
  最新资讯排行
顶级智能新机HTCTouchPro
500万像素渐普及LG推出800万
山寨手机入侵PPC琦基i9高配智能
江宁打造中国首个"无线谷"核心圈层
3G市场竞争门槛提高价格战不再是有
互联网巨头布局“无线搜索”迎3G时
Wi-Fi联盟让无线语音成为可能
中东和北非地区的运营商实现基础设施
伊朗手机生产厂家欢迎降低手机进口关
中国电信将自建终端公司负责移动终端
  最新培训信息
基础课程在线培训1-1
基础课程在线培训1-2
基础课程在线培训1-4
基础课程在线培训3-2
基础课程在线培训1-3
基础课程在线培训2-1
基础课程在线培训4-1
基础课程在线培训2-2
基础课程在线培训3-1

您在本站有任何疑难问题请联系贝贝QQ:329683229 晶晶QQ:292701913 欢欢QQ:531069058 迎迎QQ:627254210我们的客服人员会即时为您解!
CopyRight © 2007 3G.yhc360.com, All Rights Reserved
鲁ICP备07021078号
萤火虫旗下网站