1

私は大学でOracle9iサーバーに取り組んでいます。

ビュー'v1'に対する選択と挿入のアクセス許可を友人に付与しました

彼はビューを表示することができますが、行を挿入するselectinsert、ビューはユーザーIDの個別のコピーを保持しているようです。

すなわち。私が言ったら:

select * from v1;

彼がビュー'v1'に挿入した行を表示できません。これはデフォルトの動作ですか?彼が挿入した行はまだ私が所有しているため、表示できませんか?

私は初心者なので、ビューと権限の付与に関するいくつかの概念を認識していないと思います。

4

1 に答える 1

1

他のユーザーが実際にビューの基準を満たす行を挿入していて、他のユーザーがトランザクションをコミットしている場合は、セッションでその行を表示できます。

  • 他のユーザーが実際にあなたと同じオブジェクトを使用していると確信していますか?彼または彼女が参照しているV1があなたが参照しているV1と異なる可能性はありますか?両方とも完全修飾オブジェクト名を使用していますか(つまりSELECT * FROM Pavitar.v1
  • INSERTを実行した後、他のユーザーが実際にトランザクションをコミットしていることを確認しますか?
  • 挿入されている行がビューの基準を満たしていることを確認しますか?

たとえば、が10であるテーブルEMP_VIEWからすべてのデータを返すビューを作成する場合、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 に答える