学了这么多年oracle,竟然发现现在自己对一个基本概念很不清晰,我举个例子.
例如有个数据库,名字是DBATEST,然后下面有三个用户,A,B,C,现在有个问题,就是A,B,C,
1,是不是都可以有属于自己的table呢?例如A有个student表,B有个city表,C有个business表,
2,上面三个用户可以互相访问其他用户的表吗?
3,如果这三个表有关键字是可以对应的,现在我要建立一个view,分别关联这三个表,可以吗?如果可以那么是用什么用户去看这个view呢?求多位高手指教以下.
例如有个数据库,名字是DBATEST,然后下面有三个用户,A,B,C,现在有个问题,就是A,B,C,
1,是不是都可以有属于自己的table呢?例如A有个student表,B有个city表,C有个business表,
2,上面三个用户可以互相访问其他用户的表吗?
3,如果这三个表有关键字是可以对应的,现在我要建立一个view,分别关联这三个表,可以吗?如果可以那么是用什么用户去看这个view呢?求多位高手指教以下.
2. 可以相互访问,但前提是得授权,比如B要访问A的对象,则需要A给授权(grant)
3. 可以创建一个新的用户,它具有访问三个用户表的权限,然后建立视图;也可以让其中一个用户具有访问其它2用户表的权限,然后建立视图。
User created
SQL> grant connect, resource to User1;
Grant succeeded
SQL> CREATE USER User2 IDENTIFIED BY User2;
User created
SQL> grant connect, resource to User2;
Grant succeeded
SQL> CREATE USER User3 IDENTIFIED BY User3;
User created
SQL> grant connect, resource to User3;
Grant succeededSQL> CREATE User User4 IDENTIFIED BY User4;
User created
SQL> GRANT CONNECT, RESOURCE TO User4;
Grant succeededSQL> GRANT CREATE ANY VIEW TO User4;
Grant succeeded
使用User1, User2, User3分别登陆,创建表和授权。-- User1创建表和授权给User4
CREATE TABLE T1
(
Col1 VARCHAR2(20),
Col2 VARCHAR2(20)
);INSERT INTO T1 VALUES('01', 'Col2Val1');
INSERT INTO T1 VALUES('02', 'Col2Val2');GRANT SELECT ON T1 TO User4;-- User2创建表和授权给User4
CREATE TABLE T2
(
Col1 VARCHAR2(20),
Col3 VARCHAR2(20)
);INSERT INTO T2 VALUES('01', 'Col4Val1');
INSERT INTO T2 VALUES('02', 'Col4Val2');GRANT SELECT ON T2 TO User4;-- User3创建表和授权给User4
DROP TABLE T3;
CREATE TABLE T3
(
Col1 VARCHAR2(20),
Col4 VARCHAR2(20)
);INSERT INTO T3 VALUES('01', 'Col6Val1');
INSERT INTO T3 VALUES('02', 'Col6Val2');GRANT SELECT ON T3 TO User4;使用User4登录,创建视图并查询