Я пытаюсь дать право выбора для «чтения» пользователя, но когда я вхожу с пользователем, я ничего не могу сделать. это дает мне следующую ошибку:
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;
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>
Я предлагаю вам прочитать то, что я написал, и применить это к вашей ситуации. Надеюсь, у вас все получится. Удачи!
Как пользователь books_admin попробуйте:
desc schema.books
Если это сработает, попробуйте:
create [public] synonym books on schema.books;
desc books;
Новые вопросы
database
База данных представляет собой организованный сбор данных. Это коллекция схем, таблиц, запросов, отчетов, представлений и других объектов. Данные обычно организованы так, чтобы моделировать аспекты реальности таким образом, чтобы поддерживать процессы, требующие информации. Используйте этот тег, если у вас есть вопросы о разработке базы данных. Если речь идет о конкретной системе управления базами данных (например, MySQL), используйте этот тег.