powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird и многопользовательский доступ
25 сообщений из 35, страница 1 из 2
Firebird и многопользовательский доступ
    #38473436
asupviking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, у меня есть БД (firebird) и программа на c++builder, использую компоненты из вкладки Interbase, требуется сделать многопользовательский доступ. Я могу конечно создать пользователей в IBExpert и назначить им права и юзеры будут заходить через login promt, но тогда в приложении будут вылетать сообщения типа no permissions, а можно ли сделать так чтобы при входе в программу, некоторые кнопки и другие элементы управления были не активны, а какие-то активны т.е. настроить доступ на уровне приложения? Помогите советом пожалуйста.
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38473476
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asupviking,

А C++ тут при чем?
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38473489
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА C++ тут при чем?

Он, типа, не знает как в С++ при вызове Prepare поймать исключение EIBError, распознать
ошибку недостающих прав и запретить соответствующие кнопки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38473558
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Так может его передать в ласковые руки наших коллег-специалистов по Firebird?
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38473577
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТак может его передать в ласковые руки наших коллег-специалистов по
Firebird?
Не-не-не, он на другой стороне коннекта.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38473657
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Передать-передать!

asupviking,
Тебе надо либо:
1) завести специальную таблицу в которой прописывать юзер А может делать кнопки 1-2-3, а юзер Б может жать кнопки 1-4-5.
2) Читать разрешения на таблицах/колонка/объектах и соответственно включать-выключать кнопки.
Все.
Ну еще бывает комбинация этих двух подходов.
К С++ задача не относится вообще.

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38473696
Надо помедитировать про роли...
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38473738
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asupvikingЯ могу конечно создать пользователей в IBExpert и назначить им праваДык так и делай.
asupvikingюзеры будут заходить через login promtВообще-то не обязательно.
asupvikingбудут вылетать сообщения типа no permissionsКак уже сказал выше DS курить про перехват исключений. А лучше заранее скрывать (например Enabled false), чтоб у исключения не было шансов возникнуть.
asupvikingможно ли сделать так чтобы при входе в программу, некоторые кнопки и другие элементы управления были не активны, а какие-то активныНу тут без программиста не обойтись! :)

Билдер традиционно обсуждают в дельфовом разделе, если вопросов по файрберду больше нет, то я перенесу топик в раздел дельфи.
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38474192
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyКак уже сказал выше DS курить про перехват исключений. А лучше заранее скрывать (например Enabled false), чтоб у исключения не было шансов возникнуть.


Ну вообще-то конечно можно тривиальным запросом проверить, а есть ли права на обьект и запретить кнопочки.
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38474723
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, DarkMaster!
You wrote on 22 ноября 2013 г. 17:25:20:

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

"Аналогично!" (с) "Следствие ведут Колобки".
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38474863
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Аналогично!" (с)

Только без компонента, обычные процедуры.
Предлагаю поделиться/сравнить метаданные.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38474872
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
resourcestring
  SqlSelect =
    'SELECT V.Component_name,'#$D#$A +
    '       V.Visible,'#$D#$A +
    '       V.Enabled,'#$D#$A +
    '       V.Checked,'#$D#$A +
    '       V.ReadOnly'#$D#$A +
    '  FROM App_user_rights_view V'#$D#$A +
    '   WHERE (UPPER(V.Username) = CURRENT_USER)'#$D#$A +
    '     AND (UPPER(V.Form_name) = UPPER(:Form_name))';

  SqlSelectOne =
    'SELECT COALESCE(V.Visible, ''Y'') Visible,'#$D#$A +
    '       COALESCE(V.Enabled, ''Y'') Enabled,'#$D#$A +
    '       COALESCE(V.Checked, ''N'') Checked,'#$D#$A +
    '       COALESCE(V.Readonly, ''N'') ReadOnly'#$D#$A +
    '  FROM RDB$DATABASE LEFT JOIN App_user_rights_view V'#$D#$A +
    '   ON (UPPER(V.Username) = CURRENT_USER)'#$D#$A +
    '  AND (V.Form_name = :Form_name)'#$D#$A +
    '  AND (V.Component_name = :Component_name)';


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38474911
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, похоже.

Роли/группы совсем не используются?
Или только при назначении прав?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38474956
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамСпасибо, похоже.

Роли/группы совсем не используются?
Или только при назначении прав?



У нас корневым запросом служит примерно такой:

Код: 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.
/*
Параметры:
   username       = имя пользователя или роли
   t_or_p_name  =  таблица / процедура / вьюха
   checkpriv       = строка вида "S,I,u,D,E" в зависимости от набора прав, которые нужно проверить
Возврат:
   0 - права есть, 1 - прав нету
*/

execute block (username varchar(32)=?username,
               t_or_p_name varchar(32)=?t_or_p_name,
               checkpriv varchar(32)=?checkpriv)
returns (granted smallint)
as
declare variable p integer;
declare variable sql varchar(1024);
begin

 sql='select count(rdb$user_privileges.rdb$privilege)
      from rdb$user_privileges
      where rdb$user_privileges.rdb$user='''||upper(:username)||''' and
            rdb$user_privileges.rdb$relation_name='''||upper(:t_or_p_name)||''' and
            position(trim(rdb$user_privileges.rdb$privilege),'''||upper(:checkpriv)||''')>0';
 execute statement :sql into :p;
 if (p=char_length(:checkpriv)) then granted=1; else granted=0;
 suspend;
end



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

DarkMaster> checkpriv = строка вида "S,I,u,D,E" в зависимости
DarkMaster> от набора прав, которые нужно проверить
DarkMaster> ...
DarkMaster> Соответственно проверяется весь набор прав, которые в строке

У меня больше похоже на вариант МП - в админке галочки для S/I/U/D
(я всегда разделяю I, U, D, хотя видел реализации, где I отдельно, а U и D
объединены - негибко, при сопровождении потом проблемы возникнут).
А в "клиенте" уже не галочки проверяются, а запрашиваются права на
конкретный объект для конкретного пользователя (V, E, RO).

Checked у меня нет, как-то надобности не было (для чего оно, кстати?).

P.S. Плюс у меня app-level security, а у МП - нативная. У тебя какая?
И есть ли у тебя группы/роли и как они используются, если есть?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38475232
asupviking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за советы, только я ничего не понял, нельзя ли как-нибудь попроще? Допустим у меня будут использоваться 4 роли: SYSDBA(полные права) и 3 роли (менеджер продаж, инженер ДБ, цеховой работник) с ограниченными правами. Если пользователи будут заходить через login promt можно ли в приложении узнать какой пользователь зашёл и его роль? Если можно, то я просто ненужные контролы поставлю в disabled и делу конец. Тогда вопрос есть ли возможность узнать из приложения какой польз-ль вошёл и его роль?
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38475238
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asupvikingесть ли возможность узнать из приложения какой польз-ль вошёл и его роль?

Имя пользователя и пароль указываются при коннекте к базе. Те, кто не ведает что творит,
могут получить их позже через select current_user, current_role.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38475400
asupviking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, вот это уже интереснее, спасибо, завтра попробую.
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38476201
asupviking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю запрос,
Код: sql
1.
select current_user, current_role from rdb$database


имя пользователя выводит нормально, а роль выводит "NONE" и так у всех пользователей.
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38476227
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит либо не указываешь роль при коннекте, либо у пользователя нет на неё прав.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38476495
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамУ меня больше похоже на вариант МП - в админке галочки для S/I/U/D
(я всегда разделяю I, U, D, хотя видел реализации, где I отдельно, а U и D
объединены - негибко, при сопровождении потом проблемы возникнут).
А в "клиенте" уже не галочки проверяются, а запрашиваются права на
конкретный объект для конкретного пользователя (V, E, RO).


Ну дык у меня строка для проверки тоже на клиенте формируется. И запрос идет для пары юзер/роль + обьект.

Гаджимурадов РустамChecked у меня нет, как-то надобности не было (для чего оно, кстати?).


У меня checkpriv - это и есть строка с проверяемыми правами - 'SIUDE'.

Гаджимурадов РустамИ есть ли у тебя группы/роли и как они используются, если есть?


Если есть роль - проверяется она, иначе пользователь.
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38476698
asupviking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, сделал вот как:
Код: sql
1.
select current_user from rdb$database

- текущий пользователь,
Код: sql
1.
2.
select RDB$RELATION_NAME FROM RDB$USER_PRIVILEGES WHERE RDB$USER=:my_user
AND RDB$PRIVILEGE = 'M'

- роль пользователя,
спасибо всем, задача решена.
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38477126
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asupvikingроль выводит "NONE" и так у всех пользователей.
Еще надо задать соответствие юзеров ролям, а роль NONE свидетельствует о том, что указанная при коннекте роль не узнана сервером.
...
Рейтинг: 0 / 0
Firebird и многопользовательский доступ
    #38477132
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Fr0sT-Brutal!
You wrote on 25 ноября 2013 г. 18:01:26:

Fr0sT-Brutal> а роль NONE свидетельствует о том, что указанная при коннекте роль не
> узнана сервером. не задана ваще.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird и многопользовательский доступ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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