Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

26 Сентябрь 2021, 04:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3 4 5 »   Вниз
  Печать  
Автор Тема: Многопользовательский доступ  (Прочитано 22140 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Kadet
Форумчанин
***
Offline Offline

Сообщений: 635


« Ответ #50182: 2 Март 2019, 18:02 »

Закончил. Хочу оставить краткое описание своих нелёгких мытарств, чтобы облегчить путь тем, кто пойдёт по этому же пути. Людям будет легче, а мне не жалко.
БД окончательно была закончена на LO Версия: 6.2.0.3 со встроенной БД Firebird.
Встроенная LO Base не предоставляет многопользовательский доступ. Это мне подсказали и здесь и это же конкретно прописано в Help самого LO (я потом нашёл). Следовательно нужно создавать внешний сервер и коннектиться к нему.
Первое, что нужно сделать, это вытащить файл БД из LO и сделать его внешним, ибо жалко уже потраченных трудов на его создание и делать всё заново. Сразу оговорюсь, что файл БД хранит только таблицы. Всё остальное – формы, отчёты, запросы нужно будет переносить из встроенной БД.odb, в котором создавалась БД, в новую, но это просто.
Выше я описывал способ, как вытащить этот файл из БД, посредством папки temp при открытой базе, но этот метод я бы назвал дилетантским. Лучше просто открыть свою БД.odb zip-ом и вытащить из папки database файл firebird.fbk. Это и есть сама БД. Однако, *.fbk – это запакованный архив, и прежде чем им пользоваться его нужно распаковать. Это делается с помощь утилиты gbak.exe, которая входит в комплект сервера Firebird. Команды для распаковки и запаковки в командной строке:
Код:
Распаковать:
C:\FireBird\gbak.exe -c -mo read_write C:\FIREBIRD.fbk C:\FIREBIRD.fdb -user SYSDBA -pass 'masterkey'
Запаковать:
C:\FireBird\gbak.exe -b C:\FIREBIRD.fdb C:\firebird.fbk -user SYSDBA -pass 'masterkey'
-mo[de] read_write при распаковке мне кажется будет не лишней, ибо вполне вероятно, что внутри LO БД архивируют как read_only. Получаемый файл можно обозвать как вам угодно. Это не важно.
Кстати, так же можно и обратно засунуть БД и сделать её внутренней (запаковать и всунуть в архив, открытый zip-ом).

Сразу уточню, что напрямую прикручивать полученный файл БД к LO и бесполезно и у меня не получилось. Встроенная в LO функция подключения к БД Firebird работает как-то коряво. С помощью кнопки «Выбрать» можно выбрать файл БД, но при этом в начале полученного пути LO автоматом добавляет некое «file:///» и при этом при тестировании и попытке подключиться ругается на домен, к которому не может подключиться, даже если всё находится на этом же компьютере. Никакие «танцы с бубном» с прописанием всяких разностей в файл Hosts, как это рекомендуют в инете при появлении этой ошибки, не помогают.
Однако к этому файлу можно таки подключиться если удалить в строке пути это пресловутое «file:///». Но тут «следующие грабли». Файл коннектится успешно, но ничего не открывается. Доступа нет. Постоянно требует логин и пароль. Даже если заставить LO спрашивать их всё равно не получаешь доступ. Предположив, что в самом файле БД нет данных о юзерах, ибо классическая БД FB для этого имеет отдельную специальную БД - security.db (security2.fdb, security3.fdb), я перенаправлял функцию хранения данных о юзерах на саму свою БД (есть такая возможность) прописывал юзеров уже там и потом пытался подключить этот файл к LO через встроенную функцию. Ничего не получилось. Прописывание логина и пароля в строке пути тоже ничего не дало.
К тому же, ведь сам файл БД не даёт самой возможности разделённого доступа. Многопользовательские возможности даёт сервер, а не файл. Поэтому, подключать сам файл к LO Base просто бесполезно для этой цели.

Сервер можно подключить посредством драйвера ODBC.
В общем, скачиваем сервер Firebird, скачиваем драйвер ODBC для Firebird и устанавливаем всё это на все компьютеры, которые будут использовать эту БД. Рекомендация – не устанавливайте Firebird по умолчанию в папку «Program Files», иногда могут возникать проблемы с доступом из-за пробела в пути. Создайте отдельную папку. Если делаете на машине в домашней сети, которую планируете сделать сервером – установите её в папку C:\Users\Public (Пользователи\Общая) и расшарьте её для общего доступа. В папку \Firebird_3_0\examples\empbuild\ положите полученный из LO файл базы данных.
Далее, с помощью Firebird ISQL Tool (устанавливается в комплекте с сервером Firebird), подключаемся к вытащенной из LO базе данных и прописываем всех пользователей, которые будут иметь возможность пользоваться БД. Как это делать лучше почитать в руководстве Firebird в интернете, но как пример:
Код:
CONNECT "C:\Users\Public\Firebird_3_0\examples\empbuild\FIREBIRD.FDB "  user 'SYSDBA' password 'masterkey';
CREATE USER USERNAME PASSWORD '12345' GRANT ADMIN ROLE;
GRANT RDB$ADMIN TO USERNAME;
CREATE GLOBAL MAPPING TRUSTED_AUTH USING PLUGIN SRP FROM ANY USER TO USER;
ALTER ROLE RDB$ADMIN SET AUTO ADMIN MAPPING;
* /Создаём клиента, прописываем ему роль в БД (ADMIN и RDB$ADMIN – немного разное, поэтому лучше прописать оба). Создаём глобальные MAP для ролей ADMIN.

Прописываем драйвер ODBC. В принципе в инете много инфы, как это делать, но я столкнулся с некоторыми специфическими нюансами, упоминаний о которых практически нигде нет.
Итак, в поиске (по кнопке «Пуск») пишем «Источники данных (ODBC)». Выбираем свою версию разрядности (х64 или х32). В открывшемся окне выбираем вкладку «Системный DNS». Конечно, для персональной машины можно настроить и персональный DNS и законнектиться через него, но тогда никто с другим логином на этой машине просто не войдёт в БД, поэтому лучше настроить «Системный». Давим кнопку «Добавить» и выбираем из списка драйвер «Firebird».
*Имя источника данных (DNS) – называем как хотим наш драйвер. Лучше латиницей. Это имя и будет светиться в LO при подключении.
*Примечание – необязательное или выставляем описание БД (памятку).
*База данных – прописываем путь к БД. Наверное, это одно из самых главных полей, но как его правильно заполнять, опять же, мало где есть. НЕ ПОЛЬЗУЙТЕСЬ КНОПКОЙ «Открыть» при подключении к удалённой БД. Этой кнопкой можно пользоваться ТОЛЬКО ЕСЛИ БД находится на вашей локальной машине. Прописывайте полный путь к БД на другой машине ТАК, КАК ОН ПРОПИСАН НА САМОЙ УДАЛЁННОЙ МАШИНЕ и перед этим путём просто добавьте имя хоста (HostServer – например, имя компьютера сети) или его IP во внутренней сети и между этим и путём нужно поставить «:».
Код:
Пример: HostServer:C:\Users\Public\Firebird_3_0\examples\empbuild\FIREBIRD.FDB.
Или: 192.168.1.146:C:\Users\Public\Firebird_3_0\examples\empbuild\FIREBIRD.FDB.
Если вы не пропишете название диска (C:\), то получите ошибку.
Если использовать наименование сервера или машин в сети (HostServer) то в файле hosts (C:\Windows\System32\drivers\etc\) на каждой PC сети, которые будут использовать эту БД, нужно прописать соответствие IP - host. Пример:
Код:
192.168.1.146    HostServer
*Клиент – Прописываем пусть к файлу C:\Windows\System32\FBCLIENT.DLL (при установке сервера Firebird он там появляется). Этот путь для каждой машине будет одинаковым. На каждой машине к СВОЕЙ System32, а не к серверной.
*Пользователь и пароль – для проверки ставим SYSDBA и masterkey (или свой пароль, если вы его меняли). Однако, уже при работе с БД рекомендую оставить эти поля пустыми, чтобы драйвер сам спрашивал логин и пароль при входе в БД.
*Роль – здесь засада. Во всех описаниях рекомендуют оставить это поле пустым, но если так, то в базе данных LO даже читать  (открыть) таблицы будет невозможно, даже под логином создателя – SYSDBA. Поэтому в этом поле следует поставить - RDB$ADMIN. Тогда каждый пользователь, которому в самой БД даны такие права, будет входить в БД с правами администратора.
*Галочку read (по умолчанию write) оставляем отключенной иначе будет только для чтения.
Всё… Проверяем успешный коннект и сохраняем. ODBC настроен.

Далее, открываем свою БД LO и создаём новую базу (Файл/Создать/Базу данных или просто Ctrl+N).
Выбор базы данных – Соединиться с существующей базой данных. Выбираем ODBC и Далее.
Обзор – выбираем ту БД, которую мы создали в ODBC. Далее.
Вписываем логин (один из зарегистрированных в БД) и ставим галочку «требовать пароль». Далее.
Регистрируем и сохраняем новую БД.
Далее можно войти в дополнительные настройки (Правка/Базы данных/Расширенные настройки) и выбрать вкладку «Специальные настройки» и побаловаться с галочками дополнительных настройках, но особого эффекта от этого я не заметил.
Формы, запросы и Отчёты можно просто перетащить из старой БД в новую открыв обе одновременно.
Всё. Можно работать.

И вот мы подошли к САМОЙ БОЛЬШОЙ засаде нового LO. При любой попытке изменения данных БД, будь то в таблице напрямую или через формы для создания или изменения данных мы получаем неизменное - [ODBC Firebird Driver]Driver does not support this function ([Драйвер ODBC Firebird]драйвер не поддерживает эту функцию). При этом – удалять и создавать новые таблицы мы можем. Добавлять и удалять поля в таблицах мы тоже можем. Мы даже можем загонять и изменять данные с помощью SQL запросов (Сервис/SQL). При этом, если проверить права доступа (в Сервис/SQL загнать запрос - SELECT CURRENT_USER, CURRENT_ROLE FROM RDB$DATABASE; (не забудьте поставить галочку на «Показывать вывод операторов SELECT», чтобы видеть результаты)) то можно увидеть, что вы – полный админ, но при этом… ЗАСАДА.
Поначалу думал, что какие-то проблемы с доступом, но оказалось нет.
Всё дело в том, что новый LO использует инструкции, функции и атрибуты ODBC уже версии 3.х, а для Firebird на официальном сайте последний ODBC только версии 2.х, и как оказалось – это большая разница. Последнее обновление было ещё в 17-м году и не известно когда будет следующее. К примеру у MySQL и SQL-server уже в ходу 6-е и даже 8-е версии ODBC.

Однако, не стоит отчаиваться. В этой ситуации есть три возможных выхода:
Первый – самому дописать Firebird_ODBC до версии 3.х (что мною пока ещё не освоено);
Второй – поменять все формы для записи или изменения данных в таблицах на пустышки (т.е. не выполняющие эти функции по-умолчанию) и изменения в таблицы вносить с помощью макросов по кнопочке или при закрытии. Это – работает, но при этом в таблицы вручную никаких изменений внести невозможно и сами таблицы (форматы полей и т.п.) изменить нельзя, кроме как удалять или добавлять.
И третий - более простой, но самый надёжный способ – откатить LO к старой версии. Все последние версии не проверял, но на 5.4.7.2 – всё прекрасно работает. Работает ВСЁ и как надо. А, если есть желание таки перейти на новый LO, придётся терпеливо ждать когда же разработчики Firebird соблаговолят создать более современный ODBC-драйвер.
Ну, вот. Где-то так.
« Последнее редактирование: 2 Март 2019, 21:19 от Kadet » Записан
Страниц: « 1 2 3 4 5 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!