Управління користувачами Firebird
Є: стандартна Delphi 7, FB 2.1
Як найпростіше можна додавати користувачів FB, змінювати їм пароль і видаляти користувачів?
У кого є приклади на стандартних компонентах – буду дуже вдячний!
Дивне питання. Користувачі додаються стандартно видаляються:
CREATE USER/ALTER USE і т.д.
Запит просто пишеш і все.
У версії2.5додано синтаксис керування користувачами за допомогою SQL.
> Піт (15.06.13 23:56) [2]> У версії 2.5Соррі не помітив версію. Моя порада якщо можна мігрувати на 2.5 то краще це зробити. Якщо не можна зробити, маніпулювати користувачами можна буде тільки через API Firebird. Для зручності можна зробити свій UDF і далі через SQL смикати процедури, що зберігаються, які будуть звертатися до цього UDF. UDF буде використовувати API Firebird для маніпулювання користувачами.
> Моя порада якщо можна мігрувати на 2.5, то краще це зробити.а як краще мігрувати? Підключення FDB файлу сформованого під 2.1 можливо у сервері 2.5, це вирішить усі проблеми?
Або потрібно створювати БД під 2.5 та виконувати всі DDL, потім дані вливати?
ну і так загалом – під 2.5 немає якихось яскравих особливостей глюків у порівнянні з 2.1?
> Піт (16.06.13 1:33) [4]> а як краще мігрувати?2.1 - backup 2.5 - restore> під 2.5 немає якихось яскравих особливостей глюківRelease Notes досить почитати.
> Release Notes досить почитати.так я почитав. Але там про нові фічі. Нічого про несумісність. Або глюки) Може, народ більше знає
При міграції на якусь із версій є проблеми з українськими символамиASCII у текстах збережених процедур, якщо такі є. В іншому міграція начебто відбувається нормально.
Спробуйте змігрувати базу, яка містить таку процедуру:
Якщо в новій базі Ви не зможете прочитати цей текст, то у вас є проблема. У цьому випадку я особисто рекомендую скласти скрипт для всіх процедур та після міграції оновити їх.
> Піт (16.06.13 2:04) [7]багів багато виправили про сумісність - якщо з кодуванням проблема, то gbak -r -fix_fss_metadata http://www.ibase.ru/devinfo/gbak.htm#rparams
А ніхто не знає, чому змінні прив'язки не працюють?
q.SQL.Text := "CREATE USER "+editLogin.Text+" PASSWORD :user_password" q.ParamByName("user_password").AsString := editPass.Text;
> Піт (16.06.13 20:39) [11]Ще б вказав які компоненти доступу використовуєш було б взагалі чудово.
DVM, стандартні, які в дельфі вбудовані: TIBDatabase / TIbQuery і так далі.
Ще не можу зрозуміти - як все ж таки зробити систему безпеки.
Ось заводиться новий користувач, я роблю CREATE USER, працює від імені SYSDBA. Але у мене є в програмі поняття права, яке дозволяє створювати користувачів.
При призначенні цього права я роблю користувачеві: grant RDB$ADMIN на MyUser with admin option Але при цьому, коли цей MyUser заходить під своєю роллю - він не може створювати користувачів. Мабуть, треба зайти під роллю RDB $ ADMIN, але ж у мене своя система ролей і всі заходять під якоюсь роллю "ROLE_STANDART".
Як зробити так, щоб користувач міг створювати інших користувачів БД, але працював під своєю роллю з мого набору?
Моя порада - не намагайся побудувати систему розранення прав одними засобами firebird - суцільнийгеморою це. Я вже описував якось загалом як вчинити, ці рішення не просто так народилися. Вбудована система безпеки буде основою, але все розмежування прав краще робити своє. Можу ще раз докладніше викласти моє бачення.
через сервер додатків, який у тебе може бути не проміжною ланкою, як заведено в 3-х ланках, а просто збоку припікання.
Якось давно вже року в 2000 у конференції з ФБ поставили запитання у мене у ФБ 1000+ (10000+) користувачів. Це клініка? Відповідь була приблизно така - якщо ці користувачі заведені штатними засобами - клініка. Заведи кілька решти через них нехай.
Ну ось, як вище радять.
Звідси й усі питання – потрібно вміти створювати такого користувача, який вміє також створювати користувачів. Як це зробити?
SYSDBA можна створювати користувачів і так (create user) без жодної ролі навіть. Як дати право іншому обліку створювати користувачів?
> Піт (17.06.13 18:13) [18]> SYSDBA можна створювати і так (create user) > без жодної ролі навіть. Як дати право іншому обліку створювати > користувачів?Я вирішив свого часу проблему так:
DVM, ну, у мене інший підхід.
Все ж хотілося б навчитися створювати користувача, який вміє створювати інших користувачів.
> Піт (18.06.13 15:34) [22]> Проте хотілося б навчитися створювати користувача, який > вміє створювати інших користувачів.Так без проблем:
Під SYSDBA робиш:
ALTER USER TESTUSER GRANT ADMIN ROLE , де TESTUSER це твій користувач.
Далі логінишся під цим користувачем. Він матиме права потрібні.
> Піт (18.06.13 15:34)[22]Ну власне ти в [14] вже сам собі відповів, заходити треба під роллю RDB $ ADMIN, т.к. ця роль і має необхідні права. Якщо ти хочеш щоб твоя роль мала такі ж права як RDB $ ADMIN, то доведеться давати їй права на все такі ж як у RDB $ ADMIN.
DVM, ні. Дивись, щоб кожному користувачеві не призначати права, після створення користувача йому дається роль ROLE_STANDART. Усі коннектяться під роллю ROLE_STANDART. Ну просто, щоб був доступ до потрібних API, в'юхів і так далі.
Конкретні права визначаються внутрішньою системою прав.
Так ось користувач коннектиться також під ROLE_STANDART (звідки я до коннекту знаю які у нього права) і як зробити так, щоб він міг створювати користувача? Невже ніяк не зробити? без переконнектів всіляких.
> Піт (18.06.13 21:26) [26]> Невже не зробити? > без переконнектів всіляких.схоже, що ніяк
> Піт (20.06.13 11:08) [28]> як дивно то.Ну я думаю, теоретично звичайно можна спробувати наділити довільну роль правом створювати користувачів, але для цього вона повинна отримати повний доступ на ряд системних таблиць Firebird (яких точно я не знаю і не написано ніде).
DVM, а ось до 2.5 начебто є API якесь створення користувачів. Може, через нього як можна.
> Піт (20.06.13 11:53) [30]> Може, через нього як можна.Можна звичайно, я вже вище писав як. Робити UDF треба.