国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

user和schema的區別和聯系

2024-08-29 13:03:53
字體:
來源:轉載
供稿:網友

今天重讀ORACLE官方文檔《concepts》,讀到schema的基本概念,對它的理解更進一層,官方文檔中關于schema是這樣解釋的:

“A schema is a collection of database objects. A schema is owned by a database user and has the same name as that user. Schema objects are the logical structures that directly refer to the database's data. Schema objects include structures like tables, views, and indexes.(There is no relationship between a tablespace and a schema. Objects in the same schema can be in different tablespaces, and a tablespace can hold objects from different schemas.)”

官方文檔里面說得比較明白,schema是數據對象的集合,包括像表、視圖、索引、同義詞等等都可以說是schema的對象。但不夠生動,網上有篇文章里面把schema和user的關系用一個形象的比喻闡述得非常透徹,引用如下:

“user即Oracle中的用戶,和所有系統的中用戶概念類似,用戶所持有的是系統的權限及資源;而schema所涵蓋的是各種對象,它包含了表、函數、包等等對象的“所在地”,并不包括對他們的權限控制。好比一個房子,里面放滿了家具,對這些家具有支配權的是房子的主人(user),而不是房子(schema)。你可以也是一個房子的主人(user),擁有自己的房子(schema).可以通過alter session的方式進入別人的房子。如果你沒有特別指定的話,你所做的操作都是針對你當前所在房子中的東西。至于你是否有權限使用(select)、搬動(update)或者拿走(delete)這些家具就看這個房子的主人有沒有給你這樣的權限了,或者你是整個大廈(DB)的老大(DBA)。alter session set schema可以用來代替synonyms。如果你想調用其他schema的對象(有權限的前提下),但并沒有建synonym,同時又不想把其他schema名字放入代碼中,就可以首先使用alter session set schema=<其他schema名字>。”

這段文字說得非常生動,把user和schema的區別闡述得很透徹,下面通過具體的例子來加深對user和schema兩者區別的認識:

第一步,以sys用戶登陸SQL并建立普通用戶storm和penguin:

$ sqlplus / as sysdba

SQL> create user storm identified by storm;

User created.

SQL> create user penguin identified by penguin;

User created.

第二步,賦予一些基本的權限給新建的用戶storm和penguin:

SQL> grant connect,create table,resource to storm,penguin;

Grant succeeded.

第三步,以storm用戶登陸,創建一張表并插入數據:

SQL> conn storm/storm

Connected.

SQL> create table t (id int);

Table created.

SQL> insert into t values(1);

1 row created.

SQL> commit;

  Commit complete.   第四步,以penguin用戶登陸,看能否查詢storm用戶所建表里面的數據:

SQL> conn penguin/penguin

Connected.

SQL> select table_name from user_tables;

no rows selected

SQL> show user;

USER is "PENGUIN"

SQL> select * from storm.t;

select * from storm.t

*

ERROR at line 1:

ORA-00942: table or view does not exist

從以上結果可以看出,用戶penguin無法查看用戶storm所建表里面的內容,甚至被告知沒有這張表。

第五步,修改當前schema為storm,并繼續查詢:

SQL> alter session set current_schema=storm;

Session altered.

SQL> show user;

USER is "PENGUIN"

SQL> select * from storm.t;

select * from storm.t

*

ERROR at line 1:

ORA-00942: table or view does not exist

仍然不能查看。

第六步,以storm用戶登陸,賦予penguin用戶查看t表的權限:

SQL> conn storm/storm

Connected.

SQL> grant select on t to penguin;

Grant succeeded.

第七步,以penguin用戶登陸,查看storm用戶的t表:

SQL> conn penguin/penguin

Connected.

SQL> select * from storm.t;

ID

----------

1

更簡單的,將當前schema更改為storm,可以簡化查詢過程:

SQL> alter session set current_schema=storm;

Session altered.

SQL> select * from t;

ID

----------

1

這個實驗下來,對user和schema的區別和聯系應該有了進一步的理解了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南城县| 桂平市| 公安县| 饶平县| 宁强县| 巴青县| 红河县| 华坪县| 孝昌县| 紫金县| 双鸭山市| 大名县| 宁陵县| 白河县| 泾源县| 中卫市| 平度市| 全南县| 南汇区| 彩票| 隆昌县| 永州市| 新巴尔虎左旗| 久治县| 九江市| 安乡县| 屯昌县| 昭苏县| 得荣县| 东兴市| 大同市| 竹溪县| 马龙县| 四平市| 斗六市| 广元市| 天柱县| 兴隆县| 彰武县| 龙南县| 遂昌县|