Как выполнить запрос как конкретного пользователя в Oracle

Вопрос: Есть ли способ выполнить запрос типа select count(*) from some_table; как конкретный пользователь при входе в систему как "суперпользователь" базы данных, такой как sys или sysadmin? Как это можно сделать? ОБНОВИТЬ у нас есть такие предложения: where column_user_name=user Таким образом, БД необходимо думать, что текущий пользователь, указанный user является пользователем, которого мы хотим притворяться.

Вопрос:

Есть ли способ выполнить запрос типа

select count(*) from some_table;

как конкретный пользователь при входе в систему как “суперпользователь” базы данных, такой как sys или sysadmin?

Как это можно сделать?

ОБНОВИТЬ

у нас есть такие предложения:

where column_user_name=user

Таким образом, БД необходимо думать, что текущий пользователь, указанный user является пользователем, которого мы хотим притворяться.

Ответ №1

Вы можете, но для этого вам нужно будет использовать недокументированный пакет. Пакет dbms_sys_sql позволяет запускать SQL в качестве другого пользователя. Это то, что Application Express (APEX) использует внутренне. Но это недокументировано, поэтому вы будете использовать его на свой страх и риск.

В общем, вы не должны подключаться к базе данных как SYS во время обычных повседневных операций. Если вы являетесь администратором баз данных (используя собственную учетную запись, а не SYS), вы должны иметь возможность запрашивать информацию из любой пользовательской таблицы, потому что у вас есть привилегия SELECT ANY TABLE. Таким образом, вы должны иметь возможность запускать

SELECT * FROM some_user.some_table_name Ответ №2

Если я правильно понимаю ваш вопрос, это возможно с помощью

alter session set current_schema = <username>;

а затем запускает ваше выражение.

Обновление Ваше новое требование (where x = USER) не работает с этим подходом (как вы уже выяснили). Однако вы можете изменить user на sys_context(‘userenv’, ‘current_schema’), который будет возвращать имя измененной схемы.

Ответ №3

вы можете использовать прокси: изменить пользователя order_request grant connect через систему; connect system [order_request]/cidw_pre

Ответ №4

Вы можете использовать Proxy User Authentication:

SQL> CONNECT/@mytnsname AS SYSDBA Connected. SQL> CREATE USER user_impersonating IDENTIFIED BY password1; User created. SQL> CREATE USER user_being_impersonated IDENTIFIED BY password2; User created. SQL> GRANT CONNECT TO user_impersonating; Grant succeeded. SQL> GRANT CONNECT TO user_being_impersonated; Grant succeeded. SQL> ALTER USER user_being_impersonated GRANT CONNECT THROUGH user_impersonating; User altered. SQL> DISCONNECT; Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 — 64bit Production SQL> CONNECT user_impersonating[user_being_impersonated]/password1@mytnsname Connected. SQL> SELECT user FROM DUAL; USER —————————— USER_BEING_IMPERSONATED SQL> SHOW USER USER is «USER_BEING_IMPERSONATED» SQL>

Оцените статью
Добавить комментарий