学了这么多年oracle,竟然发现现在自己对一个基本概念很不清晰,我举个例子.
例如有个数据库,名字是DBATEST,然后下面有三个用户,A,B,C,现在有个问题,就是A,B,C,
1,是不是都可以有属于自己的table呢?例如A有个student表,B有个city表,C有个business表,
2,上面三个用户可以互相访问其他用户的表吗?
3,如果这三个表有关键字是可以对应的,现在我要建立一个view,分别关联这三个表,可以吗?如果可以那么是用什么用户去看这个view呢?求多位高手指教以下.

解决方案 »

  1.   

    1. 每个用户可以有自己的table啊,就是他们创建的。
    2. 可以相互访问,但前提是得授权,比如B要访问A的对象,则需要A给授权(grant)
    3. 可以创建一个新的用户,它具有访问三个用户表的权限,然后建立视图;也可以让其中一个用户具有访问其它2用户表的权限,然后建立视图。
      

  2.   

    使用sys用户创建4个用户并授权:SQL> CREATE USER User1 IDENTIFIED BY User1;
     
    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登录,创建视图并查询