Представления с предоставленными разрешениями выбора / вставки - PullRequest
1 голос
/ 12 мая 2011

Я работаю на сервере Oracle9i в колледже.

Я предоставил моему другу права на выбор и вставку разрешений для представления 'v1' .

Он может select и insert в представлении, но, по-видимому, представление сохраняет свою копию для своего идентификатора пользователя, когда вставляет строку.

т.е.когда я говорю:

select * from v1;

Я не могу увидеть строку, которую он вставил в представление 'v1' . Это поведение по умолчанию? Разве я не могу видетьСтрока, что он вставил, потому что он все еще принадлежит мне?

Я новичок, поэтому я думаю, что не знаю некоторых концепций, касающихся представлений и предоставления разрешений.

1 Ответ

1 голос
/ 12 мая 2011

Если другой пользователь фактически вставляет строку, соответствующую критериям представления, а другой пользователь совершает свою транзакцию, то вы сможете увидеть строку в своем сеансе.

  • Вы уверены, что другой пользователь фактически использует тот же объект, что и вы? Есть ли вероятность, что V1, на который он ссылается, отличается от V1, на который вы ссылаетесь? Вы оба используете полные имена объектов (т.е. SELECT * FROM Pavitar.v1)
  • Вы уверены, что другой пользователь фактически выполняет свою транзакцию после выполнения ВСТАВКИ?
  • Вы уверены, что вставляемая строка соответствует критериям представления?

Например, если я создаю представление EMP_VIEW, которое возвращает все данные из таблицы EMP, где DEPTNO равно 10, я могу вставить строку в таблицу EMP через представление, которое не имеет DEPTNO из 10.

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.
...