Я пытаюсь дать право выбора для «чтения» пользователя, но когда я вхожу с пользователем, я ничего не могу сделать. это дает мне следующую ошибку:

SQL> desc table
ERROR:
ORA-04043: object enfermeria does not exist

Чтобы дать разрешения, я сделал это:

CREATE USER books_admin IDENTIFIED BY MyPassword;

GRANT CONNECT TO books_admin;
GRANT CONNECT, RESOURCE, DBA TO books_admin;
GRANT CREATE SESSION GRANT ANY PRIVILEGE TO books_admin;
GRANT UNLIMITED TABLESPACE TO books_admin;
GRANT
  SELECT,
ON
  schema.books
TO
  books_admin;
0
luffy one piece 23 Окт 2018 в 18:35

2 ответа

Лучший ответ

Мальчик , вы предоставили этому пользователю множество вещей, подавляющее большинство привилегий не нужны, а некоторые из них даже опасны (вы действительно не должны предоставлять администраторам баз данных ) . Кроме того, вам следует попытаться опубликовать то, что вы действительно сделали, а не придумывать вещи (вы пытаетесь описать table , а Oracle ответил, что enfermeria не существует)?

Вот предложение, которое вы можете принять, а можете и не принять.

Я собираюсь подключиться к моей базе данных 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>

Я предлагаю вам прочитать то, что я написал, и применить это к вашей ситуации. Надеюсь, у вас все получится. Удачи!

0
Littlefoot 23 Окт 2018 в 19:44

Как пользователь books_admin попробуйте:

desc schema.books

Если это сработает, попробуйте:

create [public] synonym books on schema.books;
desc books;
0
halfer 22 Май 2020 в 10:54
52952890