Создайте суперпользователя, который может получить доступ к нескольким схемам в oracle 11G - PullRequest
0 голосов
/ 14 марта 2020

У меня есть две схемы Schema-1 и Schema-2. Я хочу создать одного суперпользователя, который может обращаться как к схеме (схема-1, так и схема-2).

Я хочу создать пользователя с командой в oracle 11g. Это возможно?

1 Ответ

3 голосов
/ 14 марта 2020

Такой пользователь уже существует; он называется SYS, которому принадлежит база данных. Тем не менее, не очень хорошая идея использовать его для повседневной работы - вы бы предпочли (как вы хотели) создать своего собственного «суперпользователя», который способен делать такие вещи. Например:

SQL> connect sys as sysdba
Enter password:
Connected.
SQL> create user superuser identified by superman;

User created.

SQL> grant dba to superuser;

Grant succeeded.

ОК, давайте попробуем:

SQL> connect superuser/superman
Connected.
SQL> select count(*) From scott.emp;

  COUNT(*)
----------
        14

SQL> select table_name from dba_tables where owner = 'MIKE';

TABLE_NAME
------------------------------
EMP
DEPT
BONUS
SALGRADE
DUMMY
ABC

6 rows selected.

SQL> select * from mike.abc;

       KEY         ID        SEQ THINGS     DESCR
---------- ---------- ---------- ---------- ----------
         1          1          0 Food       Chicken
         2          1          1 Cars       BMW
         3          1          2 Sport      Soccer
         4          2          0 Food       Mutton
         5          2          1 Cars       Ford
         6          2          2 Sport      Tennis

6 rows selected.

SQL>

Теперь, DBA правильная роль для этого пользователя, я не могу сказать. Возможно, это не так, поэтому, возможно, вы бы предпочли предоставить только необходимый набор привилегий. Какой это набор, я не могу сказать ни того, ни другого.

Может быть, этого будет достаточно, например, предоставить select привилегии superuser для schema1 и schema2 пользовательских таблиц. Однако вы не можете сделать это в одной команде - вам придется делать это отдельно для каждого пользователя и для каждой из его таблиц (что означает много из grant select операторов). Давайте попробуем это:

SQL> connect sys as sysdba
Enter password:
Connected.
SQL> revoke dba from superuser;

Revoke succeeded.

SQL>

Это скучное написание заявления за оператором, поэтому я напишу код для написания кода для меня:

SQL> select 'grant select on ' || owner ||'.' ||table_name || ' to superuser;' str
  2  from dba_tables
  3  where owner in ('SCOTT', 'MIKE')
  4  order by owner, table_name;

STR
--------------------------------------------------------------------------------
grant select on MIKE.ABC to superuser;
grant select on MIKE.BONUS to superuser;
grant select on MIKE.DEPT to superuser;
<snip>
grant select on SCOTT.TEST_B to superuser;
grant select on SCOTT.TEST_D to superuser;

26 rows selected.

SQL>

OK; Теперь скопируйте / вставьте вышеупомянутые операторы grant и запустите их.

SQL> grant select on MIKE.ABC to superuser;

Grant succeeded.

SQL> grant select on MIKE.BONUS to superuser;

Grant succeeded.

SQL> grant select on MIKE.DEPT to superuser;

Grant succeeded.

<snip>

SQL> grant select on SCOTT.TEST_B to superuser;

Grant succeeded.

SQL> grant select on SCOTT.TEST_D to superuser;

Grant succeeded.

SQL>

Работает ли это?

SQL> connect superuser/superman
ERROR:
ORA-01045: user SUPERUSER lacks CREATE SESSION privilege; logon denied


Warning: You are no longer connected to ORACLE.
SQL>

Ага! Не только пока! Отмена DBA отозвала большой набор привилегий, поэтому superuser теперь существует как пользователь, но ничего не может сделать. Итак, давайте подключим его к базе данных:

SQL> connect sys as sysdba
Enter password:
Connected.
SQL> grant create session to superuser;

Grant succeeded.

SQL> connect superuser/superman
Connected.
SQL> select * From scott.dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> select * From mike.abc;

       KEY         ID        SEQ THINGS     DESCR
---------- ---------- ---------- ---------- ----------
         1          1          0 Food       Chicken
         2          1          1 Cars       BMW
         3          1          2 Sport      Soccer
         4          2          0 Food       Mutton
         5          2          1 Cars       Ford
         6          2          2 Sport      Tennis

6 rows selected.

SQL>

Right; намного лучше. Это то, что я имел в виду, говоря «предоставить только необходимый набор привилегий»; не предоставляйте больше привилегий, чем кому-то действительно нужно.

...