Пятница, 29.11.2024
Мой сайт
Меню сайта
Статистика

Онлайн всего: 32
Гостей: 32
Пользователей: 0
Главная » 2017 » Август » 2 » «Касса» (установка, пользователи, клиент, сервер)
14:25
«Касса» (установка, пользователи, клиент, сервер)

«Касса» (установка, пользователи, клиент, сервер)

Всё лежит тут:
https://drive.google.com/file/d/0B3i2SFYLER0HQ0lQNEkzalJ2R3M/view?usp=sharing

Отдельное описание (PDF) ещё тут:
https://yadi.sk/i/rwW8FbUzzcYEV
Короткое видео тут:
https://youtu.be/VIRDJ46IVXs

https://rutube.ru/video/d8176ab24d1e71fd00dad93c44c0d284/

Содержание архива:

Две базы, которые должны быть подключены к SQL серверу: kassa_m_n_data.MDF (сама «Касса») и retes_data.MDF (курсы валют).
Два клиентских приложения – kassa_m_n.ADP («касса») и kursi.adp (ввод информации по курсам).
kursi.adp эти я написала только что. «Написала» это громко сказано. Создала ADP с подключением к базе и запустила мастер создания форм ввода информации. В офисе эту программу (клиент) для ввода курсов в своё время написала секретарша. Потом курсы потребовались для «кассы». «Касса» начала обращаться к данным вводимым секретаршей. Потом данные, вводимые секретаршей, были перенесены на сервер. Но поскольку к ним разные программы обращались названия полей и таблиц там остались такие как и были (т.е по-русски). База у меня осталась, а вот клиент к ней я забирать из офиса не стала. «написала» прямо сейчас.
Отмеченное жёлтым – внешние библиотеки, которые надо скопировать в SYSTEM32 и зарегистрировать (reg_dll.bat).
Клиентское приложение обращается к SQL серверу, получает информацию и заполняет ею элементы экранной формы. Вот, например, запрос списка предприятий (хранимая процедура (kassa_m_n.dbo.sp_lst_Predp) и засовывание полученного в поле со списком cmbPredp):

Тут ещё присутствует строка подключения к серверу (ActiveConnection) которая в числе прочего включает в себя пользователя, который обращается за информацией. Пользователь и пароль запрашиваются при запуске:

… т.е вся безопасность тут настраивается средствами SQL сервера. Например, на SQL сервере может быть настроено что какой-то пользователь может читать данные таблицы но не может их менять. Пользователь может не иметь возможности запускать хранимые процедуры и т.д. Если при попытке выполнить операцию не хватает прав, то будет выведено сообщение.
Вот стандартная настройка доступа к таблице:

Пользователь «Гость», например, может просматривать строки списка счетов но не может их менять.
Вообще-то этого мало. Когда база содержит сразу всю информацию логично ограничивать доступ не только к таблицам но и к диапазонам строк. Список предприятий, например, логично для простых пользователей ограничивать только тем предприятием, с которым они имеют дело. В положенной базе всего этого нет (разве что я забыла где-то что-то удалить). Но все обращение к информации из программы (клиентское приложение) осуществляется через хранимые процедуры. А уже в хранимой процедуре, которую большинство пользователей может только выполнять:

… можно написать что угодно:

Зачеркнутого у меня  в тексте нет, но никто не мешает написать что-то от примитивного до довольно сложного.
Подключать к SQL серверу надо две базы. Все пользователи должны быть подключены и к той и к другой если нужно работать с курсами:
 

Чтобы подключить пользователей к базе их надо подключить к SQL серверу (т.е их надо создать):

Если это всё создано, то проблема безопасности – проблема SQL сервера. SQL сервер это программа, которая общается с внешним миром через пакеты пересылаемые через порт 1433:
https://www.osp.ru/winitpro/2014/08/13042170/

Т.е если в организации есть две сети (локальная и подключенная к интернету), то их можно объединить так называемым мостом который пропускает только пакеты идущее через порт 1433. Тогда доступ к серверу извне будет, но только к нему. Это, как и всё остальное не панацея. Но это один из методов администрирования, позволяющий сузить размеры «дыр».
Вовне, т.е во внешнем по отношению к серверу мире находятся клиентские приложения, которые запрашивают информацию и передают информацию.
Любое клиентское приложение для начала должно подключиться к информации:

… сообщив откуда оно хочет брать информацию (имя сервера и базы):

… и кто обращается за информацией (т.е пользователь и его пароль). Здесь же можно проверить наличие доступа. Если всё в порядке, т.е у этого пользователя есть доступ к этой информации, то выводится показанное сообщение.
При работе через сайт пользователю передаётся и вид экранной формы – страницы и сами данные. В данном же случае передаются только данные.
Дело в том, что клиентом в Интернете является браузер, который запрашивает данные у сайта в Интернете. И уже сайт (т.е интернет – сервер) запрашивает данные у SQL сервера, (становясь клиентом при общении с ним). Здесь такого «передаточного звена» нет. Машина пользователя, его собственный ADP обращается к SQL серверу за информацией. Внешний вид форм, которые рисуются на экране хранятся в самом ADP и получать их откуда-то не надо.
Можно работать с базой и через Интернет. Для этого надо войти в местную локальную сеть через VPN подключение. Я не очень понимаю, что там собираются делать с VPN-ом. Для меня он был инструментом внешнего доступа, который можно разрешить или запретить маршрутизаторе – роутере (показывать надо установки, сейчас у меня подходящей железки под рукой нет). Скорее всего отключать собрались какую-то другую часть VPN, но точно не знаю. После входа в сеть VPN-пользователь становится обычным пользователем сети, который может использовать те ресурсы, к которым у него есть доступ. Т.е можно дать ему возможность работать с SQL сервером. Можно сделать чтобы ко всему остальному этот пользователь (уже локальной сети а не SQL сервера) доступа не имел. Единственное тут ограничение – из локальной сети может работать только один пользователь. Поэтому сотрудникам районов  приходилось вводить информацию по очереди. Второй не мог войти, если первый уже работал. VPN придумывался для работы из дому а не для совместной работы нескольких организаций (потому такое ограничение).
Небольшая и решаемая проблема – периодическая замена клиентского приложения на машине пользователя. На сервере хранился номер версии. Он же был вшит в клиента. При входе этот номер запрашивался. Если он был больше записанного в клиенте  программа выводила сообщение о необходимости замены версии (на то, что уже засунуто в почтовый ящик, в который никто не смотрит). Так что Интернет – приложения – не единственный способ работы через Интернет.
Есть ещё одна проблема. Если поставить клиента (kassa_m_n.adp) даже на WinXP, которую регулярно обновляли работать она скорее всего не будет. После какого-то обновления перестала работать одна из внешних библиотек (та самая Grid, которая используется для просмотра информации и позволяет красить строки)  Лично я после этого отключила обновления, потому что я точно знаю зачем мне нужна «Касса» (а что делают обновления я точно не знаю, но и без них всё работает).
Другой вариант – работа через виртуальную машину, про которую было тут:
http://akostina76.ucoz.ru/blog/2017-07-06-4250

… т.е создать виртуальную машину с XP, отключить на ней обновления, скопировать туда клиента (kassa_m_n.adp). Виртуальная машина считает себя новой машиной в локальной сети и имеет доступ ко всем её ресурсам. Потому SQL сервер с его базами она тоже видит. Значит можно с данными работать из этой виртуальной машины.
Это довольно странный вариант работы. Лучше, конечно, переписать клиента на что угодно, которое точно также  считывает информацию (можно даже через те же хранимые процедуры на сервере) и что-то рисует на экране.
Вот так, например, выглядит заполнение поля со списком страницы Интернета (информаций, которую возвращает хранимая процедура):

Это аналог считывания списка предприятий (в начале этого текста).

Просмотров: 209 | Добавил: akostina76 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Поиск
Календарь
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Copyright MyCorp © 2024
    Бесплатный конструктор сайтов - uCoz