powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите состряпать хитрый запрос (результат - новый запрос)
25 сообщений из 42, страница 1 из 2
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336727
dekloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно сделать хитрый селект, в результате которого будет строка нового скл запроса.
объясню на примере.
1. drop user BARABAS;
2. create user BARABAS identified by values '42A33E770380E712' default tablespace users temporary tablespace temp;
3. grant connect to BARABAS;

Теперь мне нужно сделать некий условный селект (в частности, наличие привилегии коннекта, без указания имени юзера), результатом которого будет строка №2

Поясните, плз, на примере как это сделать?
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336730
dekloperнужно сделать некий условный селект ... без указания имени юзера ... результатом которого будет строка №2Наркоман штоле?

Код: plsql
1.
2.
3.
4.
5.
6.
SQL> select replace(q'$create user $ identified by values '42A33E770380E712' default tablespace users temporary tablespace temp;$', '$', u) str
  2    from (select utl_raw.cast_to_varchar2('42415241424153') u from dual);

STR
--------------------------------------------------------------------------------------------------------------------------------------------
create user BARABAS identified by values '42A33E770380E712' default tablespace users temporary tablespace temp;



Надеюсь помог.
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336782
dekloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Галоперидол,

не, не то..
поясню чего нужно добиться на пальцах
есть пачка юзеров в базе с некими привилегиями
в данном случае меня интересуют все юзера с привилегией коннект

нужно одной строкой запроса получить строки их создания (не указывая их имена и хэши, их нужно получить) и сохранить в файл dump.sql
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336784
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBA_SYS_PRIVS (CREATE SESSION), DBA_ROLE_PRIVS (CONNECT), DBMS_METADATA
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336789
dekloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,

чето пусто получилось..
а откуда селектить? from user$?
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336803
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- "что-то не получилось"
- "сделайте что-нибудь"

Конкретика где?

Системная привилегия CREATE SESSION может быть дана роли, роль дана пользователю.
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336811
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По хорошему, еще роль может быть назначена роли и тогда еще интересным будет ROLE_ROLE_PRIVS
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336835
dekloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdmКонкретика где?

а куда конкретней то?
есть дефолтная установка, пустая база, делаю по шагам, 3 запрса...

дальше, мне нужно отселектировать всех юзеров с привелегией коннект (в данном случае один единственный барабас) и сформировать строку скл запроса его создания (например, в другой базе, на другом сервере)
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336848
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровПо хорошему, еще роль может быть назначена роли и тогда еще интересным будет ROLE_ROLE_PRIVS
не проще ли DBMS_SESSION.IS_ROLE_ENABLED?


ps
в древних версиях был недокументированный параметр create user .... by valus xxx
....
stax
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336849
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dekloper,

гляньте dba_users

....
stax
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336850
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..Вячеслав ЛюбомудровПо хорошему, еще роль может быть назначена роли и тогда еще интересным будет ROLE_ROLE_PRIVS
не проще ли DBMS_SESSION.IS_ROLE_ENABLED?


ps
в древних версиях был недокументированный параметр create user .... by valus xxx
....
stax
ой
не подойдет IS_ROLE_ENABLED для текущей

.....
stax
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336873
dekloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..dekloper,

гляньте dba_users

....
stax

авторselect name,password from dba_users where name = 'BARABAS'
*
ошибка в строке 1:
ORA-00904: "NAME": недопустимый идентификатор

если
авторselect name,password from user$ where name = 'BARABAS';
то получаем

авторNAME
--------------------------------------------------------------------------------
PASSWORD
--------------------------------------------------------------------------------
BARABAS
42A33E770380E712


но мне надо сформировать строку, причем указывая не имя юзера, а его привилегию (коннекта в моем примере)
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336879
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dekloperstax..dekloper,

гляньте dba_users

....
stax

авторselect name,password from dba_users where name = 'BARABAS'
*
ошибка в строке 1:
ORA-00904: "NAME": недопустимый идентификатор

если
авторselect name,password from user$ where name = 'BARABAS';
то получаем

авторNAME
--------------------------------------------------------------------------------
PASSWORD
--------------------------------------------------------------------------------
BARABAS
42A33E770380E712


но мне надо сформировать строку, причем указывая не имя юзера, а его привилегию (коннекта в моем примере)
Код: plsql
1.
2.
3.
4.
5.
6.
SQL> desc dba_users
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 USERNAME                                  NOT NULL VARCHAR2(30)
 USER_ID                                   NOT NULL NUMBER
 PASSWORD                                           VARCHAR2(30)




с привелегией есть проблемка, если она дана через роль, надо искать в dba_role_privs
и в иерархии ролей на предмет наличия (напр connect ...)


......
stax
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336883
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dekloperа куда конкретней то?

Когда вы говорите "в результате пусто", неплохо бы показать запрос, который дал пустой результат. И из-под кого он выполнялся.

dekloperесть дефолтная установка, пустая база, делаю по шагам, 3 запрса...


Вот-вот, опять. "Делаю запрос, в результате - пусто".

dekloperюзеров с привелегией коннект

Повторяю то, что сказал выше. Привилегия может быть дана не напрямую.
Для начала покажите выборку из USER_SYS_PRIVS под пользователем, который вас интересует.
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336888
dekloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..в древних версиях был недокументированный параметр create user .... by valus xxx
....
stax

зы. забыл уточнить, у меня 12g (11.2.0.3.0)

если уж совсем конкретней, то пытаюсь доработать скрипт, который, вероятно работал в более древней версии

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select 'create user '||username||' identified by values "'||password||'" default tablespace users temporary tablespace temp;'
from dba_users
where username in (
        select GRANTEE
                from dba_role_privs
                where GRANTED_ROLE='ROLE_1'
        minus
        select GRANTEE
                from dba_role_privs
                where GRANTED_ROLE='ROLE_2' )



результатом этого запроса (с учетом того, что ROLE_1, ROLE_2 существуют), получаем строку с пустым хэшем
авторcreate user BARABAS_1 identified by values "" default tablespace users temporary tablespace temp;
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336889
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdmПовторяю то, что сказал выше. Привилегия может быть дана не напрямую.
Для начала покажите выборку из USER_SYS_PRIVS под пользователем, который вас интересует.
как посмотреть под пользователем?

.....
stax
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336896
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dekloperstax..в древних версиях был недокументированный параметр create user .... by valus xxx
....
stax

зы. забыл уточнить, у меня 12g (11.2.0.3.0)



первая ссылка из гугла
http://www.peasland.net/2016/02/18/oracle-12c-identified-by-values/

user$ или dbms_metadata.get_ddl

.....
stax
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336903
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так выглядит конкретика.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as system@test

-------------------------------------------------------------------------------------------------------------
SQL> create user user1 identified by "1";
User created
SQL> create role user_role;
Role created
SQL> grant connect to user_role;
Grant succeeded
SQL> grant user_role to user1;
Grant succeeded
SQL> conn user1/1;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as user1

SQL> select * from user_sys_privs;
USERNAME                       PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------

SQL> select * from user_role_privs;
USERNAME                       GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE OS_GRANTED
------------------------------ ------------------------------ ------------ ------------ ----------
USER1                          USER_ROLE                      NO           YES          NO

-------------------------------------------------------------------------------------------------------------
SQL> drop user user1;
SQL> create user user1 identified by "1";
SQL> grant connect to user1;
SQL> conn user1/1;
SQL> select * from user_sys_privs;
USERNAME                       PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------

SQL> select * from user_role_privs;
USERNAME                       GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE OS_GRANTED
------------------------------ ------------------------------ ------------ ------------ ----------
USER1                          CONNECT                        NO           YES          NO

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as user1

-------------------------------------------------------------------------------------------------------------
SQL> create user user1 identified by "1";
SQL> grant create session to user1;
SQL> conn user1/1;
SQL> select * from user_sys_privs;
USERNAME                       PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
USER1                          CREATE SESSION                           NO

SQL> select * from user_role_privs;
USERNAME                       GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE OS_GRANTED
------------------------------ ------------------------------ ------------ ------------ ----------
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336910
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdmВот так выглядит конкретика.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as system@test

-------------------------------------------------------------------------------------------------------------
SQL> create user user1 identified by "1";
User created
SQL> create role user_role;
Role created
SQL> grant connect to user_role;
Grant succeeded
SQL> grant user_role to user1;
Grant succeeded
SQL> conn user1/1;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as user1

SQL> select * from user_sys_privs;
USERNAME                       PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------

SQL> select * from user_role_privs;
USERNAME                       GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE OS_GRANTED
------------------------------ ------------------------------ ------------ ------------ ----------
USER1                          USER_ROLE                      NO           YES          NO

-------------------------------------------------------------------------------------------------------------
SQL> drop user user1;
SQL> create user user1 identified by "1";
SQL> grant connect to user1;
SQL> conn user1/1;
SQL> select * from user_sys_privs;
USERNAME                       PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------

SQL> select * from user_role_privs;
USERNAME                       GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE OS_GRANTED
------------------------------ ------------------------------ ------------ ------------ ----------
USER1                          CONNECT                        NO           YES          NO

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as user1

-------------------------------------------------------------------------------------------------------------
SQL> create user user1 identified by "1";
SQL> grant create session to user1;
SQL> conn user1/1;
SQL> select * from user_sys_privs;
USERNAME                       PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
USER1                          CREATE SESSION                           NO

SQL> select * from user_role_privs;
USERNAME                       GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE OS_GRANTED
------------------------------ ------------------------------ ------------ ------------ ----------



dekloper надо хеш пароля витащить, а его нет в dba_users
надо брать с user$

зы
с ролями еще усложнить можно "роль включить в роль" т тд

.....
stax
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336916
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dekloperс привелегией коннектЧудак, такой привилегии нет.
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336982
dekloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdmВот так выглядит конкретика.

дык а где конкретика то? где видно как вы достаете хеш?
stax..
dekloper надо хеш пароля витащить, а его нет в dba_users
надо брать с user$
stax
вот то то и оно.. надо как то скомбинировать запрос..

stax..зы
с ролями еще усложнить можно "роль включить в роль" т тд

.....
staxусложнять пока не надо) у меня тут и так не разгрести..
потому вопрос был изначально с простейшей дефолтной инсталляцией..

и да, не 12g, а 11g конечно же..

dmdmdmПовторяю то, что сказал выше. Привилегия может быть дана не напрямую.
Для начала покажите выборку из USER_SYS_PRIVS под пользователем, который вас интересует.

под барабасом нет ниче
Код: sql
1.
2.
3.
SQL> select * from USER_SYS_PRIVS;

строки не выбраны
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336984
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dekloperвот то то и оно.. надо как то скомбинировать запрос..


Лазать по data dictionary tables тебе еще рановато. Кури DBMS_METADATA.

SY.
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336989
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык под обычным юзером не много ему интересного принесет
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336992
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dekloperнадо как то скомбинировать запросВсе уже давно скомбинировано, для тех, кто в состоянии пользоваться гуглом.
Listing privileges recursively

Хотя мне приходилось что-то допиливать в тех запросах...
...
Рейтинг: 0 / 0
помогите состряпать хитрый запрос (результат - новый запрос)
    #39336993
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровДык под обычным юзером не много ему интересного принесет

Ну так на кошках (всмысле на себе) потрeнируется .

SY.
...
Рейтинг: 0 / 0
25 сообщений из 42, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите состряпать хитрый запрос (результат - новый запрос)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]