Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Странность с REVOKE / 11 сообщений из 11, страница 1 из 1
11.07.2018, 08:22
    #39672356
CyberMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность с REVOKE
FB 3.0.4. Есть две идентичные базы. На одной из них выполняю автогрант прав в IBExpert'е:
Код: sql
1.
2.
REVOKE ALL ON OPER$EXCEPTION$CHECK_DATA_ABONE FROM PROCEDURE OPER$WORK_CC$CLEAR_NEW_CONTRACT;
GRANT EXECUTE ON PROCEDURE OPER$EXCEPTION$CHECK_DATA_ABONE TO PROCEDURE OPER$WORK_CC$CLEAR_NEW_CONTRACT;


И то, и другое - это хранимые процедуры.
При выполнении скрипта на одной базе, все ОК. На другой же FB сообщает об ошибке:
Код: plaintext
1.
2.
3.
4.
This operation is not defined for system tables.
unsuccessful metadata update.
REVOKE failed.
Table OPER$EXCEPTION$CHECK_DATA_ABONE does not exist.

Проверил другие ХП и выяснил, что выполнение "REVOKE ALL ON ANY_SP FROM PROCEDURE ANY_ANOTHER_SP" приводят к подобному сообщению - что таблица с именем ХП не существует. Выполнение "REVOKE ALL ON ANY_TABLE FROM PROCEDURE ANY_ANOTHER_SP" без проблем. Попытки REVOKE по отношению к UDF так же откатываются. В чем может быть причина, куда смотреть?
...
Рейтинг: 0 / 0
12.07.2018, 15:18
    #39673184
Roman Simakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность с REVOKE
А если REVOKE ALL ON *PROCEDURE* <SP_NAME> ... ?
...
Рейтинг: 0 / 0
13.07.2018, 02:24
    #39673454
CyberMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность с REVOKE
Roman Simakov,

Код: plaintext
1.
2.
3.
4.
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 15.
PROCEDURE.
...
Рейтинг: 0 / 0
13.07.2018, 02:29
    #39673456
CyberMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность с REVOKE
Роман, добавлю, что у серверов разные версии. При выполнении через sql-редактор в IBExpert'е:
На 3.0.4.32987:
Код: sql
1.
REVOKE ALL ON GET$ABONENT$ABONENT_AND_ADDRESS FROM PROCEDURE OPER$EXCEPTION$ANOTHER_BRANCH


Код: plaintext
1.
Warning: Select on GET$ABONENT$ABONENT_AND_ADDRESS is not granted to OPER$EXCEPTION$ANOTHER_BRANCH.
Warning: Insert on GET$ABONENT$ABONENT_AND_ADDRESS is not granted to OPER$EXCEPTION$ANOTHER_BRANCH.

На 3.0.4.33003:
Код: plaintext
1.
2.
3.
This operation is not defined for system tables.
unsuccessful metadata update.
REVOKE failed.
Table GET$ABONENT$ABONENT_AND_ADDRESS does not exist.
...
Рейтинг: 0 / 0
13.07.2018, 03:47
    #39673462
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность с REVOKE
CyberMax> 3.0.4.32987:
CyberMax> 3.0.4.33003:

Это на одной и той же БД так?
С системными таблицами всё ОК ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.07.2018, 03:58
    #39673464
CyberMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность с REVOKE
Гаджимурадов Рустам,

Базы физически разные, но метаданные одни и те же.
Я подозреваю, что это из-за CORE-5852 , который закоммитили как раз между этими билдами.
...
Рейтинг: 0 / 0
13.07.2018, 04:28
    #39673467
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность с REVOKE
CyberMax> Я подозреваю, что это из-за CORE-5852

Вполне возможно. Его автор как раз тут, может проверить и ответить. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.07.2018, 11:06
    #39673576
Roman Simakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность с REVOKE
Можно попросить сделать воспроизводимый скрипт, независящий от вашей базы, чтобы воспроизводить в isql?
...
Рейтинг: 0 / 0
13.07.2018, 11:26
    #39673590
Roman Simakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность с REVOKE
Roman SimakovМожно попросить сделать воспроизводимый скрипт, независящий от вашей базы, чтобы воспроизводить в isql?

Собственно я воспроизвел. ALL у процедуры нельзя отозвать прямо по правилам парсера. Только EXECUTE. Вот пример.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SQL> create database '/tmp/trig.fdb';
SQL> create procedure p as begin end;
SQL> create procedure o as begin end;
SQL> commit;
SQL> revoke all on o from procedure p;
Statement failed, SQLSTATE = 42000
unsuccessful metadata update
-REVOKE failed
-Table O does not exist
SQL> revoke all on procedure o from procedure p;
Statement failed, SQLSTATE = 42000
Dynamic SQL Error
-SQL error code = -104
-Token unknown - line 1, column 15
-procedure
SQL> revoke execute on procedure o from procedure p;
Warning: EXECUTE on O is not granted to P.
SQL> 
...
Рейтинг: 0 / 0
13.07.2018, 11:40
    #39673599
CyberMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность с REVOKE
Roman Simakov,

Так это так и останется? У функций тоже нельзя отнять права через ALL.

И еще непонятка по билду 32987. Делаю грант на выполнение UDF DATE_TO_PERIOD() для ХП:
Код: sql
1.
GRANT EXECUTE ON FUNCTION DATE_TO_PERIOD TO PROCEDURE SP1;


Потом снимаю права:
Код: sql
1.
REVOKE ALL ON DATE_TO_PERIOD FROM PROCEDURE SP1;


FB возвращает предупреждение:
Код: plaintext
1.
Warning: Select on DATE_TO_PERIOD is not granted to SP1.
Warning: Insert on DATE_TO_PERIOD is not granted to SP1.

Вопросы:
1. Что за Select on DATE_TO_PERIOD, если я грантовал Execute?
2. Что за Insert on DATE_TO_PERIOD? О какой вставке идет речь?
...
Рейтинг: 0 / 0
13.07.2018, 11:55
    #39673612
Roman Simakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность с REVOKE
Сейчас работает верно. А вот до фикса была бага. Прошу рассмотреть пример на сборке ДО комита. Мои комментарии в листинге
Код: sql
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.
roman:bin$ ./isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> create database '/tmp/trig.fdb';
SQL> create procedure o as begin end;
SQL> create procedure p as begin end;
SQL> commit;
SQL> revoke all on o from procedure p;
Warning: Select on O is not granted to P.
-Warning: Insert on O is not granted to P.
-Warning: Update on O is not granted to P.
-Warning: Delete on O is not granted to P.
-Warning: Reference on O is not granted to P.

--КОММЕНТ: ALL ФБ разворачивает в 5 привилегий и по факту отнимает каждую. Вот и получается что их нет, о чем и варнинг. ЗАМЕТЬТЕ что EXECUTE здесь нет! Идем дальше...

SQL> show grants;
There is no privilege granted in this database
SQL> grant execute on o to procedure p;
Statement failed, SQLSTATE = 42000
Dynamic SQL Error
-SQL error code = -104
-Token unknown - line 1, column 18
-o

--КОММЕНТ: попробуем что нибудь грантовать

SQL> grant execute on procedure o to procedure p;
SQL> commit;
SQL> show grants;

/* Grant permissions for this database */
GRANT EXECUTE ON PROCEDURE O TO PROCEDURE P

--КОММЕНТ: получилось) Теперь попробуем отозвать "вроде бы работающим" способом сабжа

SQL> revoke all on o from procedure p;
Warning: Select on O is not granted to P.
-Warning: Insert on O is not granted to P.
-Warning: Update on O is not granted to P.
-Warning: Delete on O is not granted to P.
-Warning: Reference on O is not granted to P.
SQL> commit;
SQL> show grants;

/* Grant permissions for this database */
GRANT EXECUTE ON PROCEDURE O TO PROCEDURE P

--КОММЕНТ: а вот не отозвалось!!! Теперь пробуем правильным.

SQL> revoke execute on procedure o from procedure p;
SQL> commit;
SQL> show grants;
There is no privilege granted in this database
SQL> 



Мое заключение, что СУБД теперь работает корректно, проверяя существование объектов нужного типа, а IBExpert не верно генерит скрипт. Правильно использовать явно и слово EXECUTE при отзыве прав у процедур, и слово PROCEDURE после ON, для явного указания типа объекта. Иначе ФБ справедливо считает его таблицей. Т.е. равнозначно что ON TABLE T, что ON T, но это не справедливо для остальных объектов. Раньше тип объекта проглатывался, права отнимались по факту у несуществующей таблицы без проверок ее существования.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Странность с REVOKE / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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