|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
Здравствуйте! В интернете нашел бухгалтерскую программу AZMicro2, написанную Архангельским (автор книг про Delphi), БД Firebird 2.0 и собираюсь разобраться в созданной автором системе безопасности. https://drive.google.com/open?id=1IkPyUEmN0hD_QD33rjhFuYWNITZ9MCnY Отривок из файла: Система безопасности Несмотря на то, что СУБД поддерживает таблицу пользователей, но в данном случае она не поможет...... Итак, строим таблицу Users: Users Таблица Users описывает как пользователей, так и их права для доступа к другим таблицам. Таким образом права устанавливает Администратор системы и пользователь может не задумываться о том с какими правами ему нужно входить. Если он вошел в систему, то она покажет ему только то, что разрешено. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Основные поля этой таблицы — USERID и USERNAME. Первое используется как первичный ключ и используется во всех связях, а второе уникальное имя пользователя, которое определено в БД fbsecurity.fb, и вводится пользователем в качестве Login при входе в систему. Поля USRSYSNAME, USRDOMAIN, USRNames, USRNPost — это описательные поля, которые являются справочником для администратора. Для определения прав доступа используются поля USRGroup, USRLevel, USRRole, которые определяются из таблицы "Система безопасности". И, наконец, блок контроля, который имеется во всех таблицах. Для каждой строки определяются КТО и КОГДА создал запись, а также КТО и КОГДА изменил запись. Если возникнет задача репликации, т.е. перенос части этой БД в другую, то всегда можно определить новые и измененные записи. Но кроме определения таблицы нужно заполнить ее хотя бы одной записью и наложить ограничения на структуру и другие действия. Первая запись определяет USERID, который вводится во все таблицы по умолчанию: Insert into Users(UserID,UserName,USRNames,USRRole) values(0,'SYSDBA','Создатель БД','A1'); Commit; Далее наложить ограничения, что в поля USRCreate и USRModify можно вводить только значения из самой таблицы Users. Код: pascal 1. 2. 3.
Для заполнения первичного ключа нужно использовать генератор и соответствующий триггер. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
После всего этого нужно наложить правила, по которым можно заполнять и изменять информацию в этой таблице. Во-первых, нужно определить какие действия являются ошибочными. В языке SQL они называются Exception (исключениями). Они не только прерывают выполнение операции, но и сообщают пользователю о его ошибке. — нужно ограничить создание определенных ролей. Ну, не должно быть двух Директоров или Главных бухгалтеров. — нужно запретить удаления из этой таблицы или неправомерное изменение уровня доступа. Во-вторых, нужно создать триггеры, которые определяют эти правила: Код: pascal 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
Обяснение триггера: Сначала определяем КТО пытается создать новую запись и какими правами он обладает и отмечаем это в полях new.UsrCreate и new.UsrModify. Select USERID, USRRole,USRLevel from USERS where USERNAME=USER into :USR,:Rls,:Lev; new.USRRole = new.USRGroup||Cast(new.USRLevel as Char(1)); new.UsrCreate = USR; new.USRModify = USR; Потом отсекаем тех, кто не может создавать записи в этой таблице — это пользователи с уровнем доступа более 2. Т.е. новые записи могут создавать только начальники подразделений. IF (Lev>2) then Exception NoRoleInsert; Далее определяем, что начальник подразделения может создавать записи только своего подразделения (FinDirector может создавать любые записи). If ((Rls='F2') and (new.USRGroup<>'F')) then Exception NoRoleInsert; И, наконец, определяем наличие ключевых должностей в таблице и если они уже есть, то вызываем исключение. У меня возник 2 вопроса и прошу вашей помощи: 1) Если автор не использует встроенную систему безопасности сервера (в файле security3.fdb не создаёт пользователей), а создаёт свою систему безопасности тогда откуда получает в запросе внутри триггера значение переменной USER (текущий пользователь)? Тогда разве в файле безопасности не будет только суперпользователь SYSDBA? А если использует встроенную систему безопасности сервера и создаёт там пользователей тогда как они окажутся и в таблице users? 2) Как видите в create table users в комментариях автор пишет: Код: sql 1. 2. 3.
т.е. пока создаётся пользователь в security3.fdb и сразу в таблице users? например так, с помощью компонента FDScript? Код: pascal 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. 28. 29. 30. 31. 32. 33.
Или что-то неправильно понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 04:44 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
bastibubu У меня возник 2 вопроса и прошу вашей помощи: 1) Если автор не использует встроенную систему безопасности сервера (в файле security3.fdb не создаёт пользователей), а создаёт свою систему безопасности тогда откуда получает в запросе внутри триггера значение переменной USER (текущий пользователь)? Тогда разве в файле безопасности не будет только суперпользователь SYSDBA? А если использует встроенную систему безопасности сервера и создаёт там пользователей тогда как они окажутся и в таблице users? Автор использует встроенную в сервер систему безопасности. Но в ней нет функций того что называется ROW LEVEL SECURITY, и вот эту функциональность автор обеспечивает описываемой системой. Пользователи в базе в таблице USERS и пользователи в security3.fdb имеют не так много общего :) В данном случае да, если пользователя нет в системной базе - то залогиниться под ним не получится. Что нисколько не мешает раздаче ему прав в базе в таблице USERS, под то что потом этот юзер будет создан и в системной базе. Более того, раздача прав на объекты БД штатной системы безопасности Firebird тоже не требует что бы этот юзер в это время существовал в security3.fdb 1. Что бы залогиниться в базу - нужен пользователь в security3.fdb 2. Что бы работать с бизнес-логикой базы - нужно что бы этому пользователю были дадены права в этой базе, в данном случае посредством таблицы USERS 3. Пункт 2 не отменяет необходимости назначения пользователю нужных прав на объекты БД. Каким образом пользователи USERS попадают в security3.fdb, или наоборот - это не принципиально. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 07:09 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
bastibubu, 1. поскольку автор программы уже 7 лет не с нами, он вряд-ли адаптирует свое решение к Firebird 3.0. Так что, могут быть подводные камни. 2. как тут верно сказали, row level security нет, она организуется программно. Я тоже как-то такую фигню делал http://www.ibase.ru/treedb2/ Но, ошибкой будет оставлять базовый логин SYSDBA. Это относится и к веб-приложениям тоже. Тут надо создать отдельного пользователя, создать роль, дать роли нужные права, включить этого пользователя в роль, и уже приложения должны соединяться с базой используя этот самый отдельный логин, не SYSDBA. Потому что использование SYSDBA для всех и каждого впоследствии доставит массу проблем. bastibubuLogin из fbsecurity.fb нет такой базы. есть security2.fdb, security3.fdb. bastibubuТогда разве в файле безопасности не будет только суперпользователь SYSDBA? то, что есть в ФБ для управления пользователями - нельзя отрубить. Только embedded пофиг логин и пароль. Так что пока SYSDBA должен быть, независимо от всего остального. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 12:02 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
fraksВ данном случае да, если пользователя нет в системной базе - то залогиниться под ним не получится. Что нисколько не мешает раздаче ему прав в базе в таблице USERS, под то что потом этот юзер будет создан и в системной базе. fraks , то есть получается, что системная база данных-security3.fdb всегда должен содержать все записи таблицы users, правильно я понял? авторКаким образом пользователи USERS попадают в security3.fdb, или наоборот - это не принципиально. Если например: 1) при вставке в users заработал триггер: create user user1 password 'xxx' ? 2) или с помощью компонента FDScript на клиенте при добавлении пользователя в users? Код: pascal 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. 28. 29. 30. 31. 32. 33. 34.
KDVНо, ошибкой будет оставлять базовый логин SYSDBA. Тут надо создать отдельного пользователя, создать роль, дать роли нужные права, включить этого пользователя в роль, и уже приложения должны соединяться с базой используя этот самый отдельный логин, не SYSDBA. KDV , немного растерялся. Как из ответа fraks-а я понял, в security3.fdb надо создать не только одного отдельного пользователя, а столько же сколько их в таблице users, или неправильно я понял? KDVПотому что использование SYSDBA для всех и каждого впоследствии доставит массу проблем. KDV , В чем разница- если SYSDBA даёт права другому пользователю чем он менее безопасен чем SYSDBA? Какими, например правами не должен обладать пользователь у которого роль 'Администратор'? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 14:54 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
bastibubu, потому что SYSDBA это суперпользователь неограниченный ни чем сразу во всех БД. Помимо SYSDBA есть и другие пользователи обладающие правами администратора, но только в текущей базе данных. Например владелец БД или пользователь с ролью RDB$ADMIN (начиная с 2.5). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 15:29 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
bastibubuто есть получается, что системная база данных-security3.fdb всегда должен содержать все записи таблицы users, правильно я понял? нет, все неправильно. security3.fdb - это база пользователей Firebird. С помощью этих пользователей производится логин, и осуществление разных прав на таблицы и прочие объекты ЦЕЛИКОМ. Например, юзер VASYA залогинился, имеет право читать таблицу DOCS, а юзер PETYA после логина может не только читать, но именять таблицу DOCS. Пример Архангельского, который вы цитируете, осуществляет контроль прав на уровне ЗАПИСЕЙ, а не таблиц целиком. Такой функционал в SQL отсутствует, и реализуется программно. Для этого аутентификация пользователей производится через специальную таблицу пользователей, которая создается вручную в БД, и содержит там данные пользователей, в конкретной реализации (у Архангельского так, у меня сяк, у Пети эдак, и т.п.). То есть, логин производится следующим образом 1. программа логинится к базе, используя или SYSDBA с фиксированным паролем, или юзера SPECIAL (например) тоже с фиксированным паролем. Человек, использующий эту программу, не знает ни имени SYSDBA или SPECIAL, ни их паролей. 2. программа запрашивает у человека логин и пароль. Он должен ввести то, что находится в специальной таблице USERS, заранее созданной в пользовательской БД, и так далее. 3. программа получив идентификатор такого пользователя, использует его при любых операциях с данными. 4. аминь. bastibubu в security3.fdb надо создать не только одного отдельного пользователя, а столько же сколько их в таблице users, или неправильно я понял? это ужасная ахинея, потому что security3.fdb невозможно связать с "пользовательской таблицей users". Никак. Сервер для аутентификации пользуется только security3.fdb, или ее содержимым в любой другой БД. Любые созданные вами таблицы сервер как "аутентифицирующие пользователей" сервер рассматривать не будет. К примеру, в БД есть таблица RDB$RELATIONS, в которой сервер хранит все созданные по CREATE TABLE таблицы. И серверу плевать, если вы создадите свою таблицу RELATIONS, и тоже там будете хранить имена "своих таблиц" или типа того. Вот с юзерами ситуация абсолютно аналогичная. bastibubuВ чем разница- если SYSDBA даёт права другому пользователю чем он менее безопасен чем SYSDBA? SYSDBA жестко прописан в коде Firebird. Это как root в Линуксе. Например, если сделать базе shutdown, то на SYSDBA это не влияет. Тут не о безопасности речь, а об администрировании. bastibubuКакими, например правами не должен обладать пользователь у которого роль 'Администратор'? понятия не имею. Главное что этот пользователь - не SYSDBA, в смысле вот этих самых 6-ти букв. Код: pascal 1. 2. 3. 4.
типа того. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 21:25 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
bastibubu1) при вставке в users заработал триггер: create user user1 password 'xxx' ? это вообще какой-то ужасный ужас. Вот смотрите. У вас система типа клиент-сервер. Можно сделать так 1. Приложение для всех юзеров логинится как SYSDBA. Плевать на права к таблицам, процедурам, и прочему, нас это не парит. а можно сделать так 2. приложение коннектится под конкретным юзером, созданным как Create user, юзеру даются права на таблицы, или юзер включается в роль, и т.д. а можно и так 3. совсем без аутентификации не хочется (пункт 1 слишком безалаберный), а аутентификация типа пункта 2 че-то излишня. Создаем свою таблицу юзеров в базе, и делаем в приложении самостоятельную аутентификацию. Классическим примером, когда п3 выгоден, я уже сказал - является трехзвенка или веб. Веб юзер <> юзер БД. Заводить веб-юзера как юзера базы бессмысленно - юзеров веб-сайта может быть миллионы, и некий юзер может зайти всего на 5 секунд. Поэтому делается ОДИН спец-юзер БД. Веб-сервер логинится к базе через него. А веб-юзеры, регистрируясь на веб-сайте, получают логин в той самой пресловутой "юзерской таблице, созданной в нашей БД". И это не какая-то специальная "юзерская таблица" для Firebird, а таблица с данными, на содержимое которой Firebird-у пофиг, юзеры это или адреса публичных домов, или перечень хлама на мусорной свалке. Но которая используется для аутентификации юзеров на веб-сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 21:35 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
kdvНо которая используется для аутентификации юзеров на веб-сервере посредством кода, который вы напишете самостоятельно - на java, php или другом языке. И о котором Firebird-у не будет ничего известно (и не нужно знать). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 21:37 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
kdvпрограмма логинится к базе, используя или SYSDBA с фиксированным паролемАццкий АдЪ. kdvэто ужасная ахинея, потому что security3.fdb невозможно связать с "пользовательской таблицей users". Никак.SEC$USERS для слабаков? Дим ты много полезного изложил, но несколько фраз зело портят общую картину. Как вариант, можно и не перелогинивать принудительно, пусть юзер совпадает, только для работы своей приклады еще дополнительно подсовывать роль, чтобы даже зная логин и что такое ибэксперт было хлопотно что-то сделать мимо приклады и его "огораживания". ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 23:09 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
Ivan_PisarevskySEC$USERS для слабаков? гм. это да, но смысл? Собственно, никто не мешает пойти дальше, и через databases.conf указать конкретной базе на саму себя в качестве security database. И поиметь юзеров прям в этой же БД, если уж совсем приспичило. Но центральный вопрос в том, кто делает аутентификацию, и зачем. Как я понял, автор этой темы а) не в курсе как идет базовая аутентификация в ФБ б) не понял зачем Архангельский сделал ту штуку в своей программе. То есть, наложились два непонимания, из которых в результате получилась полная каша. Ivan_PisarevskyДим ты много полезного изложил, но несколько фраз зело портят общую картину. тут я не мог и не собирался изложить всё, что можно придумать на эту тему, особенно с учетом ФБ 3. Ivan_Pisarevskyчтобы даже зная логин и что такое ибэксперт было хлопотно что-то сделать мимо приклады и его "огораживания". видишь, ты пошел еще дальше, и изложил совсем запредельную для автора топика идею, о которой, мне кажется, он вообще не подозревал. Если уж объяснять эту тему, правильно, то надо все излагать последовательно - что за система с security3.fdb, нафига security в databases.conf, какие тут могут быть дыры, дальше уже как организуется аутентификация для веб и трехзвенки, что такое row-level-security, какое оно бывает и как реализуется, и т.д. У меня пока задачи описать вот это все - нет :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2018, 00:21 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
KDV , благодарю вас за суперподробное объяснение. После вашего ответа прочитал несколько источников об аутентификации и системе безопасности и стало более-менее ясно. Одного не могу все таки понять- в Create table USERS он почему пишет в комментарии "из fbsecurity.fb"? (т.е.security3.fdb): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Я создам нового пользователя, создам роли, дам роли права, потом включу этого пользователя в роли и всё. Зачем мне USERNAME и USRSYSNAME из security3.fdb в своем таблице users? Какая связь между ними? и последный вопрос c вашего разрешения: в Sec$users находятся все пользователи которые создаю в security3.fdb. Нельзя эту таблицу связывать к таблице users связью 1:1? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2018, 01:43 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
Эта прога тов. Архангельского была написана под FB2.0. В 3.0 концепция безопасности имеет ряд отличий, и он уже точно ничего не переделает и не напишет. Ну и вообще, книжки Архангельского плохо подходят для изучения Delphi, учитывая явные косяки в терминологии. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2018, 09:02 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
bastibubuв Sec$users находятся все пользователи которые создаю в security3.fdb. Нельзя эту таблицу связывать к таблице users связью 1:1?это псевдотаблица, сисдба увидит в ней одну картинку, простой смертный другую. лучше почитать доку по этому поводу и самому попробовать заглянуть в табличку из-под разных юзеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2018, 11:32 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
ЛюбезныйЭта прога тов. Архангельского была написана под FB2.0. В 3.0 концепция безопасности имеет ряд отличий, и он уже точно ничего не переделает и не напишет. Ну и вообще, книжки Архангельского плохо подходят для изучения Delphi, учитывая явные косяки в терминологии. Любезный , Я не собираюсь переписать эту программу. Как пример как строится система безопасности, как она работает и для сравнения с другими решениями вполне устраивает. bastibubu в Sec$users находятся все пользователи которые создаю в security3.fdb. Нельзя эту таблицу связывать к таблице users связью 1:1? Ivan_pisarevskyэто псевдотаблица, сисдба увидит в ней одну картинку, простой смертный другую. лучше почитать доку по этому поводу и самому попробовать заглянуть в табличку из-под разных юзеров. Ivan_Pisarevsky ,Вы правы, картина разная в зависимости от юзера, показывает только текущего юзера но если залогинится как SYSDBA или другой юзер с правами All тогда всех юзеров вместе увидим. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2018, 13:45 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
То есть, фактически получается что аутентификацию проходит и залогиниться единственный спец-пользователь, который находиться в security3.fdb, только разными ролями. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 19:15 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
bastibubu, "находится". А с разными ролями - зачем? Если этот юзер выполняет одну функцию, так можно либо ему дать все права, либо роли, а юзера включить в роль. Вообще ваши фразы опять приводят в смятение. Залогиниться к базе может только тот юзер, который находится в security3.fdb, тут без вопросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 20:37 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
KDV , вот польный код подключения к бд с комментариями автора: Код: pascal 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66.
допустим в системной базе security3.fdb SYSDBA добавил спец-пользователя SPECIAL, создал роль, дал роли нужные права, включил SUPER в роль. тогда системная база security3.fdb будет иметь вид: Sec$user_name 1SYSDBA 2 SPECIAL а таблица users текущей бд выглядит примерно так: user_idusernameusrgroup usrlevel usrrole1SYSDBA 1A0 2 SPECIAL 1A0 Вы пишите: авторТо есть, логин производится следующим образом 1. программа логинится к базе, используя или SYSDBA с фиксированным паролем, или юзера SPECIAL (например) тоже с фиксированным паролем. Человек, использующий эту программу, не знает ни имени SYSDBA или SPECIAL, ни их паролей. 2. программа запрашивает у человека логин и пароль. Он должен ввести то, что находится в специальной таблице USERS, заранее созданной в пользовательской БД, и так далее. 3. программа получив идентификатор такого пользователя, использует его при любых операциях с данными. 4. аминь. допустим приняли на работу человека и создаём пользователя user1, пароль '12345'. программа запрашивает логин и пароль а в security3.fdb же нет такого пользователя, есть только запись в пользователской бд, в таблице users. Если ввожу users1 и пароль получу ощибку типа "username and password are not defined". Автор делает логин так: 1. В форме вводим "Пользователь" и "Пароль" и подключаемся к базе данных(Его слова). Вы пишите что логинится SYSDBA или SPECIAL т.е. в edituser и в editPassword вводим SYSDBA(или SPECIAL): Код: pascal 1. 2.
а он пишет Код: pascal 1. 2.
т.е. "user1","12345". 2. Если подключение удалось, то получаем информацию о пользователе, который пытается подключится к базе данных: Код: sql 1.
3. получаем прав доступа для пользователя, отключаемся от БД и подключаемся снова, но уже указывая роль. (т.е. он вводим "users1","12345" и например "F2") т.е. user1 должен быть и в системной базе(security3.fdb) и в таблице users не так ли? Если юзера users1 нету в системной базе тогда как он сможет залогиниться? а если его записи нет в таблице users как тогда определить его роль? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 23:16 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
bastibubu, в данном куске кода я не вижу вообще никакой альтернативной аутентификации, кроме штатной. таблица USERS здесь 1. дублирует security3.fdb 2. содержит список разрешенных ролей (тоже дублирует rdb$roles в конкретной базе). В общем, вся эта "система" предназначена только для того, чтобы на уровне приложения присобачить к юзеру дополнительную идентификацию, и использовать ее для контроля доступа на уровне записей в БД. Никакой схемы с логином через "секретного" юзера тут нет, и это ясно видно из приведенного кода. То есть, КАЖДЫЙ человек, работающий с этой БД, должен иметь отдельный логин в security3.fdb. И логинов будет столько, сколько людей. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 23:40 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
bastibubuВы пишите что логинится SYSDBA или SPECIAL "пишете". Я предполагал, что сделано так, но нет, я был неправ. В системе создается юзер AAA, например, и этот же юзер "делается" какими-то средствами в таблице USERS. bastibubu Если юзера users1 нету в системной базе тогда как он сможет залогиниться? никак. Это следует из приведенного кода, который достаточно прозрачен. Не вполне ясно, откуда у вас тогда взялись самые первые вопросы (с чего начался топик). p.s. я не очень понял, зачем автор программы накрутил именно так. Я бы сделал через "спец-пользователя", чтобы не иметь гемора с заведением пользователей в security3.fdb. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 23:46 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
авторТо есть, КАЖДЫЙ человек, работающий с этой БД, должен иметь отдельный логин в security3.fdb. И логинов будет столько, сколько людей. Да. И это очень плохо. kdvНе вполне ясно, откуда у вас тогда взялись самые первые вопросы (с чего начался топик). KDV, Сначала сомневался что он использует системную базу security3.fdb и поэтому спрашивал: "Если автор не использует встроенную систему безопасности сервера (в файле security3.fdb не создаёт пользователей), а создаёт свою систему безопасности тогда откуда получает в запросе внутри триггера значение переменной USER (текущий пользователь)? Тогда разве в файле безопасности не будет только суперпользователь SYSDBA? А если использует встроенную систему безопасности сервера и создаёт там пользователей тогда как они окажутся и в таблице users?" kdvp.s. я не очень понял, зачем автор программы накрутил именно так. Я бы сделал через "спец-пользователя", чтобы не иметь гемора с заведением пользователей в security3.fdb. KDV, вы имеете в виду так?: 1. Логиниться к базе, используя SYSDBA или SPECIAL 2. ввести логин и пароль который находится в USERS, заранее созданный в пользовательской БД. 3. Логиниться к базе но уже ролем. Но и в этом случае пользователь должен существовать и в security3.fdb? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 00:26 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
bastibubuСначала сомневался что он использует системную базу security3.fdb и поэтому спрашивал: без нее нельзя залогиниться к БД. Или в фразе "сомневался что он использует" есть какой-то другой смысл? bastibubu1. Логиниться к базе, используя SYSDBA или SPECIAL 2. ввести логин и пароль который находится в USERS, заранее созданный в пользовательской БД. 3. Логиниться к базе но уже ролем. Но и в этом случае пользователь должен существовать и в security3.fdb? я уже устал, честное слово. 1 - да. Логинится к базе в данном случае не юзер, а приложение. Юзер не знает имя данного логина и его пароль. 2 - да 3 - нихрена не получится. К "виртуальному пользователю" нельзя прицепить роли в смысле роли Firebird. Пользователи и их роли тут будут только виртуальные, т.е. используемые приложением, а не Firebird. Поэтому логин под "спец-пользователем" Firebird производится ОДИН раз, в самом начале, и приложением, а не юзером. Дальше приложение или дает "пользователю" работать с БД, или нет. Поэтому ТАК я бы НЕ делал и не пытался. Мне кажется, вы никак не можете отделить систему аутентификации Firebird, и тот кусок кода, который автор программы добавил для разграничения прав на уровне записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 01:04 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
kdvПоэтому ТАК так как вы предлагаете (или спрашиваете) в пунктах 1, 2 и 3. Пункт 3 в моем варианте не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 01:05 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
bastibubu извините за офф-топ, есть ли у вас что еще почитать по AZMICRO2 ? сайт az-design.ru не доступен в wayback machine почти ничего нет ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 11:01 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
AlexeyM123, я думаю, вряд-ли где найдете описание больше. Никто ж не будет писать описание по чужой программе, кроме автора. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 11:14 |
|
Вопросы о системе безопасности Firebird
|
|||
---|---|---|---|
#18+
bastibubuавторТо есть, КАЖДЫЙ человек, работающий с этой БД, должен иметь отдельный логин в security3.fdb. И логинов будет столько, сколько людей. Да. И это очень плохо. А почему плохо? тем более "очень"? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 13:30 |
|
|
start [/forum/topic.php?fid=40&fpage=37&tid=1561246]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 333ms |
total: | 485ms |
0 / 0 |