db2數據庫的schema和user理解

原文鏈接:https://blog.51cto.com/xjsunjie/1306770

數據庫中Schema有兩種含義,一種是概念上的Schema,指的是一組DDL語句集,該語句集完整地描述了數據庫的結構。還有一種是物理上的 Schema,指的是數據庫中的一個名字空間,它包含一組表、視圖和存儲過程等命名對象。簡單的說,Schema就是一個(數據庫)用戶所擁有的數據庫的對象。

在一個數據庫中可以有多個應用的數據表,這些不同應用的表可以放在不同的schema之中,同時,每一個schema對應一個用戶,不同的應用可以以不同的用戶連接數據庫,這樣,一個大數據庫就可以根據應用把其表分開來管理。不同的schema之間它們沒有直接的關係,不同的shcema之間的表可以同名,也可以互相引用(但必須有權限),在沒有操作別的schema的操作根權下,每個用戶只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的數據(即schema用戶自己的數據).

數據庫中的User和Schema到底什麼關係呢?其實User就是每個Schema的主人,如果當前操作數據庫的用戶有默認的Schema(在創建用戶的時候指定了),那麼新表被創建在默認的Schema上。 通過這樣的方法,主要是方便管理。

在DB2中的schema的概念和ORACLE中的概念有着本質的區別:在ORACLE中schema和用戶是同一個;在DB2中schema不一定是用戶,因爲db2內部沒有用戶的概念,連接用戶必須是操作系統用戶.

 

查詢當前存在的Schema

db2 "select SCHEMANAME,owner,CREATE_TIME from syscat.schemata"

 

在有些情況下,當前登錄用戶所要訪問的Schema可能並不是默認分配給他的Schema,這時查詢表前就需要一個前綴來約束所要訪問的Schema。

如:

db2 "SELECT * FROM wanted_schema_name.table_name"

 

或通過下面的命令可以修改當前Schema

SET CURRENT SCHEMA = 'PAYROLL'
SET SCHEMA 'PAYROLL'


在開發過程中,可以通過修改連接字符串來修改默認連接的Schema/Sqlid,

以JDBC爲例(最後的分號一定不能省略):

jdbc:db2://database_server_uri:port/database_name:currentSchema=schema_name;

 

db2 切換 schema 及執行腳本

在windows 下測試過

1、打開 cmd 命令

2、db2cmd

3、db2 connect to test user meta using portaldb ----連接數據庫

4、db2 select current schema from sysibm.sysdummy1 ----查看當前數據庫默認的schema

5、db2set current schema bast ---設置schema

6、db2 select current schema from sysibm.sysdummy1 ---查看是否設置成功

7、db2 -tvf d:\\meta\meta_ddl.sql --在指定的schema執行建表語句

 

DB2 將schema下所有表的權限賦予一個用戶

db2 "select 'db2 grant select on table DB2INST2.'|| tabname ||' to db2inst1' from syscat.tables where tabschema='DB2INST2'"

 

單獨對某個Schema下的表進行授權

C:\Users\Administrator>db2 grant select on table zssqsong.kc_team_user to user zssqding

 

DB20000I SQL 命令成功完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章