Как Программно Назначить Роль Пользователя

  • Автор темы ksmak
  • Дата начала
K

ksmak

база данных firebird 2.5
использую компоненты fib 6.8

когда вручную пишу sql оператор

GRANT ROLE1 TO USER1;

то роль нормально назначается без проблем

а когда программно хочу назначить роль через процедуру в программе

procedure TfrmUsers.SetUserRole(login, role: String);
begin
frmMain.scr.Transaction.StartTransaction;
frmMain.scr.Script.Clear;
frmMain.scr.Script.Add('GRANT '+role+' TO '+login);
frmMain.scr.ExecuteScript;
end;

то ошибок не выдает, но роль не назначается

в чем может быть причина и как всетаки правильно назначать роли пользователям
 
S

sinkopa

база данных firebird 2.5
использую компоненты fib 6.8
а когда программно хочу назначить роль через процедуру в программе
то ошибок не выдает, но роль не назначается
в чем может быть причина и как всетаки правильно назначать роли пользователям
FIBPlus никогда не использовал. Предпочитаю (и всем подряд советую) ZeosLib. Она бесплатная и очень хорошо работает со всеми популярными базами данных.
Поэтому, сами понимаете, конкретно про сам fib сказать не могу. но...
Для того чтобы работало:
1) Нужно быть залогиненым к базе суперадмином или (как минимум) пользователем с правами управления ролями.
2) транзакция должна быть завершена. (должно быть что-то типа... FLUSH PRIVILEGES или Transaction.StopTransaction а может быть даже просто специальный символ обозначающий конец SQL команды. например ";" или перевод каретки).
В приведенном Вами куске кода, я ничего такого не увидел.
 
K

ksmak

FIBPlus никогда не использовал. Предпочитаю (и всем подряд советую) ZeosLib. Она бесплатная и очень хорошо работает со всеми популярными базами данных.
Поэтому, сами понимаете, конкретно про сам fib сказать не могу. но...
Для того чтобы работало:
1) Нужно быть залогиненым к базе суперадмином или (как минимум) пользователем с правами управления ролями.
2) транзакция должна быть завершена. (должно быть что-то типа... FLUSH PRIVILEGES или Transaction.StopTransaction а может быть даже просто специальный символ обозначающий конец SQL команды. например ";" или перевод каретки).
В приведенном Вами куске кода, я ничего такого не увидел.


точно!
надо было завершить транзакцию

frmMain.scr.Transaction.Commit;

теперь работает

большое спасибо
а на счет библиотеки ZeosLib не подскажете где можно найти
 
S

sinkopa

точно!
теперь работает
а на счет библиотеки ZeosLib не подскажете где можно найти
Почитайте вот тут мои посты https://codeby.net/threads/49988.html
Там про MySQL, но про "где взять" и порядок установки тот же самый. Разница только в том, что для FireBird нужно вместо MySQL-клиентских библиотек, скачать FireBird-овские.
Они там-же в репозитории, в соседней папке. Для последней стабильной (7.0.4) версии - тут: link removed
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!