ОБСУЖДЕНИЕ

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

3 ответов 6 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Автор темы
база данных 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;

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

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


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

frmMain.scr.Transaction.Commit;

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

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