รับ“ 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 schema หรือไม่)

คุณต้องเรียกใช้select * from sys.instructorsเพื่อเข้าถึงตารางนั้น หากคุณไม่ต้องการนำหน้าชื่อตารางด้วยสคีมาให้สร้างชื่อพ้องในteacher1สคีมา:

create synonym teacher1.instructors for sys.instructors;

จากนั้นteacher1สามารถเข้าถึงตารางจากSYSสคีมาได้โดยไม่ต้องผ่านการตรวจสอบ

อีกครั้ง: หยุดใช้บัญชี SYS หรือ SYSTEM สำหรับสิ่งที่ไม่ใช่ DBA ใช้บัญชีปกติสำหรับสิ่งนั้น


ขอบคุณ ฉันต้องสร้างตารางที่ผู้ใช้หลายคนสามารถเข้าถึงได้ จากคำอธิบายของคุณฉันอนุมานได้ว่าฉันควรสร้างผู้ใช้ใหม่เช่นdbadminมีDBAสิทธิ์และสร้างตารางทั้งหมดด้วยผู้ใช้ DBA นี้ ผู้ใช้รายอื่นควรเข้าถึงตารางจากDBADMINสคีมา ... ถูกต้องหรือไม่!
Seyed Mohammad

5
@SeyedMohammad: ไม่จำเป็นต้องสร้างผู้ใช้ DBA สร้างผู้ใช้ปกติและสร้างตารางในสคีมานั้น จากนั้นให้เลือกในตารางเหล่านั้นกับผู้ใช้รายอื่น การใช้บทบาท DBA เพื่อสิ่งอื่นนอกเหนือจากงาน DBA ไม่ใช่ความคิดที่ดี
a_horse_with_no_name
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.