Мальчик , вы предоставили этому пользователю множество вещей, подавляющее большинство привилегий не требуется, некоторые из них даже опасны (на самом деле вы не должны предоставлять DBA кактот).Кроме того, вы должны попытаться опубликовать то, что вы действительно сделали, а не составлять материал (вы пытаетесь описать table , в то время как Oracle ответил, что enfermeria не делает 't существует)?
Вот предложение, которое вы можете или не можете принять.
Я собираюсь подключиться к моей базе данных XE как привилегированный пользователь (в данном случае SYS; если есть другойтот, который вы используете для целей администрирования, используйте его), чтобы создать пользователя для чтения .
C:\>sqlplus sys@xe as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Uto Lis 23 21:32:36 2018
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> create user read_user identified by ru
2 default tablespace users
3 temporary tablespace temp
4 quota unlimited on users;
User created.
SQL> grant create session to read_user;
Grant succeeded.
Обратите внимание, что я предоставил read_user: создать только сеанс.Пока что это единственная привилегия, в которой она нуждается.Если окажется, что ему нужно что-то еще, предоставьте это, но воздержитесь от предоставления ролей, таких как connect, resource, dba - это уже не в стиле .
Теперь, подключаясь как пользователь, который владеет таблицей, я хотел бы позволить read_user выбрать из.
SQL> connect scott/tiger@xe
Connected.
SQL> grant select on dept to read_user;
Grant succeeded.
Наконец, подключитесь как read_user и проверьте, что он видит:
SQL> connect read_user/ru@xe
Connected.
SQL> desc dept
ERROR:
ORA-04043: object dept does not exist
Ах!Та же самая ошибка, которую вы получили!Это потому, что read_user не имеет доступной таблицы DEPT - она не существует в его схеме, нет общедоступного синонима для него, поэтому - ему должно предшествовать имя таблицы с именем владельца таблицы (и это Скотт):
SQL> desc scott.dept
Name Null? Type
----------------------------------------- -------- ----------------------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
SQL> select * from scott.dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
Намного лучше, тебе не кажется?
Чтобы не указывать имя владельца, создайте синоним к этой таблице (все еще подключенный как read_user):
SQL> create synonym dept for scott.dept;
create synonym dept for scott.dept
*
ERROR at line 1:
ORA-01031: insufficient privileges
Упс!Я не могу этого сделать, у меня нет этой привилегии.Итак, вернемся к SYS, предоставьте read_user привилегию, чтобы он мог создавать синонимы, вернитесь к read_user снова и повторите инструкцию:
SQL> connect sys@xe as sysdba
Enter password:
Connected.
SQL> grant create synonym to read_user;
Grant succeeded.
SQL> connect read_user/ru@xe
Connected.
SQL> create synonym dept for scott.dept;
Synonym created.
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
Я бы предложил вам прочитать то, что я написал, и применить это.в вашей ситуации.Надеюсь, вы заставите это работать.Удачи!