1

我正在大学的Oracle9i服务器上工作。

我已授予我的朋友对视图 'v1' 的选择和插入权限。

他可以在视图selectinsert进行操作,但显然,当他插入一行时,视图会为他的用户 ID 维护一个单独的副本。

IE。当我说:

select * from v1;

我看不到他插入视图'v1'的行。这是默认行为吗?我不应该看到他插入的行,因为它仍然归我所有吗?

我是新手,所以我认为我不了解有关视图和授予权限的一些概念。

4

1 回答 1

1

如果其他用户实际上插入了符合视图标准的行并且其他用户正在提交他的事务,那么您将能够在会话中看到该行。

  • 您确定其他用户实际上使用的是与您相同的对象吗?他或她所指的 V1 是否有可能与您所指的 V1 不同?你们都使用完全限定的对象名称(即SELECT * FROM Pavitar.v1
  • 您确定其他用户在执行 INSERT 后实际上正在提交他的事务吗?
  • 您确定要插入的行符合视图的标准吗?

例如,如果我创建一个从表中EMP_VIEW返回所有数据的视图,其中 a 为 10,我可以通过不具有 10 的视图向表中插入一行。EMPDEPTNOEMPDEPTNO

SQL> create or replace view emp_view
  2  as
  3  select *
  4    from emp
  5   where deptno=10;

View created.

SQL> insert into emp_view( empno, ename, job )
  2    values( 7623, 'PAV', 'Dev' );

1 row created.

因此,如果我查询视图,我将看不到该行

SQL> select empno, ename, job
  2    from emp_view;

     EMPNO ENAME      JOB
---------- ---------- ---------
      7782 CLARK      MANAGER
      7839 KING       PRESIDENT
      7934 MILLER     CLERK

但我会在基础表中看到它

  1  select empno, ename, job
  2*   from emp
SQL> /

     EMPNO ENAME      JOB
---------- ---------- ---------
      7623 PAV        Dev
      7369 smith      CLERK
      7499 ALLEN      SALESMAN
      7521 WARD       SALESMAN
      7566 JONES      MANAGER
      7654 MARTIN     SALESMAN
      7698 BLAKE      MANAGER
      7782 CLARK      MANAGER
      7788 SCOTT      ANALYST
      7839 KING       PRESIDENT
      7844 TURNER     SALESMAN
      7876 ADAMS      CLERK
      7900 SM0        CLERK
      7902 FORD       ANALYST
      7934 MILLER     CLERK
      1234 FOO

16 rows selected.
于 2011-05-12T13:58:40.863 回答