oracle 12c r2 предоставляет пользователю права доступа - PullRequest
0 голосов
/ 23 октября 2018

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

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 ]

0 голосов
/ 23 октября 2018

Мальчик , вы предоставили этому пользователю множество вещей, подавляющее большинство привилегий не требуется, некоторые из них даже опасны (на самом деле вы не должны предоставлять 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>

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

0 голосов
/ 23 октября 2018

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

desc schema.books

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

create [public] synonym books on schema.books;
desc books;

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...