테이블이 존재하는 동안“ORA-00942 : 테이블 또는 뷰가 존재하지 않습니다”


10

Oracle 데이터베이스를 처음 접했습니다. 에 설치 Oracle Database 11g R2했습니다 Oracle Linux 6. 다음을 사용하여 새 데이터베이스를 dbca만들고 데이터베이스에 성공적으로 연결했습니다.

$ sqlplus "/ as sysdba"

테이블을 성공적으로 만들고 일부 데이터를 삽입하고 일부를 선택했습니다.

SQL> CREATE TABLE Instructors (
         tid    NUMBER(7) PRIMARY KEY,
         fname  VARCHAR2(32),
         lname  VARCHAR2(32),
         tel    NUMBER(16),
         adrs   VARCHAR2(128) );

Table created.

SQL> INSERT INTO Instructors (tid, fname, lname, tel, adrs)
     VALUES (8431001, 'John', 'Smith', 654321, 'London');

1 row created.

SQL> SELECT count(*) FROM Instructors;

  COUNT(*)
----------
        1

그런 다음 CONNECT 권한으로 새 사용자를 작성했습니다.

SQL> CREATE USER teacher1 IDENTIFIED BY pass1;

User created.

SQL> GRANT CONNECT TO teacher1;

Grant succeeded.

그런 다음 적절한 객체 권한으로 새 역할을 만들었습니다.

SQL> CREATE ROLE instructor;

Role created.

SQL> GRANT SELECT, UPDATE ON Instructors TO instructor;

Grant succeeded.

그리고 사용자에게 역할을 부여했습니다.

SQL> GRANT instructor TO teacher1;

Grant succeeded.

다음으로 sqlplus를 종료 exit;하고 새 사용자로 연결하여 테스트했습니다. 다음을 사용하여 데이터베이스에 성공적으로 로그인했습니다.

$ sqlplus teacher1

SQL*Plus: Release 11.2.0.1.0 Production on Thu Jul 25 03:20:50 2013
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Enter password: *****

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

그러나 테이블에서 선택하려고하면 다음과 같이 표시됩니다.

SQL> SELECT * FROM Instructors;
SELECT * FROM Instructors
              *
ERROR at line 1:
ORA-00942: table or view does not exist

내가 여기서 뭘 놓친거야?!

답변:


19

당신은 테이블을 만들어 SYS스키마 (당신이해야 결코 , 이제까지 없습니다. 정말, 않습니다 ).

teacher1명령문 으로 로그인하면 해당 스키마에서 오브젝트를 찾습니다. 그러나 TEACHER1.INSTRUCTORS실제 이름이 있기 때문에 테이블 이 없습니다 SYS.INSTRUCTORS( SYS 스키마에서 객체를 만드는 것이 어떤 나쁜 생각 인지 언급 했 습니까?).

select * from sys.instructors해당 테이블에 액세스 하려면 실행해야 합니다. 테이블 이름 앞에 스키마를 붙이지 않으려면 스키마에 동의어를 작성하십시오 teacher1.

create synonym teacher1.instructors for sys.instructors;

그런 다음 완전히 규정하지 않고 스키마 teacher1에서 테이블에 액세스 할 수 있습니다 SYS.

다시 : DBA가 아닌 모든 항목에 SYS 또는 SYSTEM 계정 사용을 중지하십시오. 이를 위해 일반 계정을 사용하십시오.


감사. 여러 사용자가 액세스 할 수있는 테이블을 만들어야합니다. 당신의 설명에서, 나는 같은 새로운 사용자를 생성해야한다는 추론 dbadminDBA권한이 DBA 사용자와 모든 테이블을 만들 수 있습니다. 그런 다음 다른 모든 사용자는 DBADMIN스키마 에서 테이블에 액세스해야합니다 .
Seyed Mohammad

5
@SeyedMohammad : DBA 사용자를 만들 필요가 없습니다. 일반 사용자를 작성하고 해당 스키마에서 테이블을 작성하십시오. 그런 다음 해당 테이블에서 select를 다른 사용자에게 부여하십시오. DBA 작업 이외의 용도로 DBA 역할을 사용하는 것은 좋지 않습니다.
a_horse_with_no_name
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.