powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Поможите с булевой логикой
26 сообщений из 26, показаны все 2 страниц
Поможите с булевой логикой
    #39219014
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мужики, чет озарение покинуло. в IBE коннекчусь с логином SYSDBA без роли. В триггере
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE OR ALTER TRIGGER TBL_LS_BACTERIA_BD0 FOR TBL_LS_BACTERIA
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  IF (
   (CURRENT_ROLE <> 'NONE')
  -- OR (CURRENT_ROLE <> 'ADMINISTR')
   OR (CURRENT_USER <> 'SYSDBA')
  ) THEN
    EXCEPTION A1_NONADMIN_CANT_DELETE_RECORD;
end


если раскомментировать среднее условие, то получаю своими граблями по лбу при попытке удаления записи.
Код: html
1.
2.
3.
4.
5.
6.
Error Message:
----------------------------------------

A1_NONADMIN_CANT_DELETE_RECORD.
No permissions to delete this record.
At trigger 'TBL_LS_BACTERIA_BD0' line: 9, col: 5.


зы. роль в базе есть и ей даны все права на все

Как бы поправить?
=================
Док.

Win7 Ultim x64, Deb 7.6 i386 (Deb 8.3 i386): FB 2.5.5.26952, диалект 3, SS(win)/CS(Deb), Lazarus 1.7; FPC 3.1.1, IBX by -Rik-
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219016
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Док!
You wrote on 19 апреля 2016 г. 12:54:09:

Док> роль в базе есть и ей даны все права на все
выведи в екссепшене значение CURRENT_ROLE
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219024
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийвыведи в екссепшене значение CURRENT_ROLE
честно, не догнал. Можно пальцем на примере показать?
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219027
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Док!
You wrote on 19 апреля 2016 г. 13:02:48:

Док> честно, не догнал. Можно пальцем на примере показать?
THEN
EXCEPTION A1_NONADMIN_CANT_DELETE_RECORD 'CURRENT_ROLE = '||CURRENT_ROLE;
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219033
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

коннектишься с CURRENT_USER = 'SYSDBA', CURRENT_ROLE = 'NONE'

Вычисляем условия:

1. (CURRENT_ROLE <> 'NONE') OR (CURRENT_USER <> 'SYSDBA')
('NONE' <> 'NONE') OR ('SYSDBA' <> 'SYSDBA')
FALSE OR FALSE
FALSE

2. (CURRENT_ROLE <> 'NONE') OR (CURRENT_ROLE <> 'ADMINISTR') OR (CURRENT_USER <> 'SYSDBA')
('NONE' <> 'NONE') OR ('NONE' <> 'ADMINISTR') OR ('SYSDBA' <> 'SYSDBA')
FALSE OR TRUE OR FALSE
TRUE
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219041
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

Давай от противного.
Сначала сформулируй критерий когда менять данные разрешается,
а потом или сверху навесь NOT;
лии потом руками инвертируй операторы

Предполагаю, что твой критерий - менять можно если "или пользователь SYSDBA, или пользователь с ролью ADMINISTR"

И тогда

Код: sql
1.
2.
3.
4.
5.
  IF ( 
        (CURRENT_ROLE = 'ADMINISTR')
   OR (CURRENT_USER = 'SYSDBA')
  ) THEN
    --- менять можно!



Инвертор 1:

Код: sql
1.
2.
3.
4.
5.
  IF ( NOT (
        (CURRENT_ROLE = 'ADMINISTR')
   OR (CURRENT_USER = 'SYSDBA')
  ) ) THEN
    EXCEPTION A1_NONADMIN_CANT_DELETE_RECORD 'ROLE = '||CURRENT_ROLE ||' USER = ' || CURRENT_USER;



Инвертор 2:

Код: sql
1.
2.
3.
4.
5.
  IF ( 
         (CURRENT_ROLE IS DISTINCT FROM 'ADMINISTR')
   AND (CURRENT_USER IS DISTINCT FROM 'SYSDBA')
  ) THEN
    EXCEPTION A1_NONADMIN_CANT_DELETE_RECORD 'ROLE = '||CURRENT_ROLE ||' USER = ' || CURRENT_USER;
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219046
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, почему CURRENT_USER выше подсвечивается, а CURRENT_ROLE - нет?
Похоже в форуме в скриптх надо список кючевх слов освежить
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219051
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ох, не зря я НЕ математикой на жизнь зарабатываю!

Спасибо, щас помозгую.

зы. про способ, указанный МП, вообще первый раз вижу. Еще раз спасибо.
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219056
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Arioch!
You wrote on 19 апреля 2016 г. 13:16:49:

Arioch> Похоже в форуме в скриптх надо список кючевх слов освежить
оставь надежду всяк сюда входящий (с)
движок форума написан "кусками" разными людьми в разное время.
править просто некому.
(а владелец сайта сам не в состоянии)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219060
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

считаешь CURRENT_USER может быть NULL?
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219106
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да если по докам и ROLE не должен быть

Но сегодня одна схема аутентификации, а завтра другая, сегодя одни плагины - завтра другие.

Хуже - не будет, а лучше - возможно
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219111
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, переконнектился в ролью 'ADMINISTR'. В селекте
в IBE
Код: sql
1.
2.
SELECT CURRENT_ROLE
FROM RDB$DATABASE

получаю ROLE = NONE.

в isql то же
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[D:\Portable_program\Firebird_server\Firebird_2_5_5\bin]isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect "d:\temp\ARMDOC_5000_UNICODE.FDB"
CON> user 'SYSDBA' password 'cooladmin' role 'ADMINISTR';
Database:  "d:\temp\ARMDOC_5000_UNICODE.FDB", User: SYSDBA, Role: ADMINISTR
SQL> SELECT CURRENT_ROLE FROM RDB$DATABASE;


ROLE
==============
NONE


Ы?
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219112
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

Да, заметь, в моем триггере если пользователь SYSDBA, то его роль уже не проверяют - незачем, его имя в сервер жестко вшито

но если хочешь. можешь переписать исходную проверку типа

Код: sql
1.
2.
(CURRENT_ROLE = 'ADMINISTR')
   OR ((CURRENT_USER = 'SYSDBA') AND (CURRENT_ROLE = 'NONE'))



И дальше по бразцу. Но я в этом смысла не вижу
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219114
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

ч.т.д.

SYSDBA - hardcoded, ключевое слово по факту

если ты в него залогинился ,то вся аутентификация ,все проверки прав просто отключаются, как будто их и не было никогда, как в embedded

соответственно и механизм ролей, видимо, тоже отключается вместе с ними
для гарантии, что у sysdba бyдут все права sysdba без навязанных ролью ограничений
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219118
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийдвижок форума написан "кусками" разными людьми в разное время.
править просто некому.

Дык тут же не код править, а найти константный массив со словом CURRENT_USER и добавить в него же CURRENT_ROLE
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219120
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокКстати, переконнектился в ролью 'ADMINISTR'. В селекте
в IBE
Код: sql
1.
2.
SELECT CURRENT_ROLE
FROM RDB$DATABASE

получаю ROLE = NONE.

в isql то же
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[D:\Portable_program\Firebird_server\Firebird_2_5_5\bin]isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect "d:\temp\ARMDOC_5000_UNICODE.FDB"
CON> user 'SYSDBA' password 'cooladmin' role 'ADMINISTR';
Database:  "d:\temp\ARMDOC_5000_UNICODE.FDB", User: SYSDBA, Role: ADMINISTR
SQL> SELECT CURRENT_ROLE FROM RDB$DATABASE;


ROLE
==============
NONE


Ы?

баян. До 3.0 isql выводит после логина эхо введённых параметров.
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219233
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochSYSDBA - hardcoded, ключевое слово по факту

если ты в него залогинился ,то вся аутентификация ,все проверки прав просто отключаются, как будто их и не было никогда, как в embeddedВчерашний бред продолжается...
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219235
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокКстати, переконнектился в ролью 'ADMINISTR'. В селекте
в IBE
Код: sql
1.
2.
SELECT CURRENT_ROLE
FROM RDB$DATABASE


получаю ROLE = NONE.

в isql то же
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[D:\Portable_program\Firebird_server\Firebird_2_5_5\bin]isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect "d:\temp\ARMDOC_5000_UNICODE.FDB"
CON> user 'SYSDBA' password 'cooladmin' role 'ADMINISTR';
Database:  "d:\temp\ARMDOC_5000_UNICODE.FDB", User: SYSDBA, Role: ADMINISTR
SQL> SELECT CURRENT_ROLE FROM RDB$DATABASE;


ROLE
==============
NONE



Ы? А ты её грантовал SYSDBA'у ?
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219239
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисДо 3.0 isql выводит после логина эхо введённых параметров.Это show user выводит эхо, а у Дока - честные селекты
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219256
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

я про то что выводится сразу после connect
ДокSQL> connect "d:\temp\ARMDOC_5000_UNICODE.FDB"
CON> user 'SYSDBA' password 'cooladmin' role 'ADMINISTR';
Database: "d:\temp\ARMDOC_5000_UNICODE.FDB", User: SYSDBA, Role: ADMINISTR
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219567
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladА ты её грантовал SYSDBA'у ?
Хм, а разве так можно?
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219676
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фуф, а решение на поверхности лежало
Код: sql
1.
2.
3.
4.
  IF (CURRENT_USER <> 'SYSDBA')
    THEN
      IF (CURRENT_ROLE <> 'ADMINISTR')
        THEN EXCEPTION A1_NONADMIN_CANT_DELETE_RECORD;

...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219698
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокhvladА ты её грантовал SYSDBA'у ?
Хм, а разве так можно? Нужно. Если нужно :)
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39219749
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

"О, сколько нам открытий чудных ..." (с)

Спасибо всем за участие, проблема решена.
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39221617
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокФуф, а решение на поверхности лежало
Код: sql
1.
2.
3.
4.
  IF (CURRENT_USER <> 'SYSDBA')
    THEN
      IF (CURRENT_ROLE <> 'ADMINISTR')
        THEN EXCEPTION A1_NONADMIN_CANT_DELETE_RECORD;




а теперь вопрос :-) чем это - нy кpоме замены AND на вложенный IF - отличается от
AriochИнвертор 2:

Код: sql
1.
2.
3.
4.
5.
  IF ( 
         (CURRENT_ROLE IS DISTINCT FROM 'ADMINISTR')
   AND (CURRENT_USER IS DISTINCT FROM 'SYSDBA')
  ) THEN
    EXCEPTION A1_NONADMIN_CANT_DELETE_RECORD 'ROLE = '||CURRENT_ROLE ||' USER = ' || CURRENT_USER;



?
...
Рейтинг: 0 / 0
Поможите с булевой логикой
    #39221656
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

проще в восприятии ;)

Но твои посты я внимательно прочитал и осмыслил. Спасибо за помощь
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Поможите с булевой логикой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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