База данных для маленькой программы продаж/склада

Модератор: Модераторы

Re: База данных для маленькой программы продаж/склада

Сообщение resident » 27.03.2016 13:35:16

azsx писал(а):Не уверен, но вроде zeos mysql ваш код ломать при смене версий не будут. Это не так?

Не знаю, не хочу использовать сторонние компоненты по возможности :)

WAYFARER писал(а):довольно сложная в освоении СУБД

MySQL мне показался сложнее.
Пример, включил в Postgres защиту от брутфорса в виде задержки, добавив пару строк в конфиг файл. Пробовал найти такую же функциональность в MySQL - так и не нашел. Народ извращается какими-то программами типа Fail2Ban, которые еще тоже нужно изучить. И в них тоже могут быть какие-то подводные камни. Может кто из знатоков MYSQL подскажет есть ли в ней возможность включить задержку?

azsx писал(а):роли MySQL слабее ролей Firebird или разница ваще капитальная?

В Postgres все просто - создал роль, внес её в файл настроек, что она может соединятся с таких-то адресов. Например, меня он будет пускать только из моей подсети, немецкая роль подключатся со своей, остальные идут по байпасу.
В MySQL пока не нашел как также разграничить адреса.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: База данных для маленькой программы продаж/склада

Сообщение vitaly_l » 27.03.2016 13:44:17

resident писал(а):В MySQL пока не нашел как также разграничить адреса.

права доступа MySQL
Код: Выделить всё
В MySQL схемы и пользователи независимы, поэтому при назначении прав необходимо указывать конкретную схему (имя_схемы.*) или распространять право на все схемы сразу (*.*). Последний вариант в MySQL называется глобальным уровнем назначением прав.
По сравнению с Oracle список прав не так велик из-за отсутствия некоторых типов объектов и объединения использования нескольких команд в одну привилегию. Ниже приведен список основных прав:
ALL PRIVILEGES - все права на указанный объект за исключением назначения прав на этот объект;
CREATE - право на создание таблицы;
ALTER - право на изменение таблицы;
DROP - право на уничтожение таблицы;
LOCK TABLES - право на блокировку таблицы;
CREATE TEMPORARY TABLES - право на создание временных таблиц;
CREATE ROUTINE - право на создание хранимых процедур и функций;
ALTER ROUTINE - право на изменение или уничтожение хранимых процедур и функций;
CREATE VIEW - право на создание представления;
TRIGGER - право на создание и уничтожение триггеров;
INDEX - права на создание и уничтожение индексов;
EXECUTE - право на выполнения хранимых процедур и функций;
EVENT - право на создание событий;
CREATE USER - права на создание, уничтожение, переименование пользователя и снятия все прав. Назначается только на глобальном уровне;
SELECT - право на выборку;
DELETE - право на удаление;
INSERT - право на вставку;
UPDATE - право на обновление;
FILE - право на использование команд SELECT ... INTO OUTFILE и LOAD DATA INFILE;
PROCESS - право на просмотр всех процессов командой SHOW PROCESSLIST;
SHOW DATABASES - право на просмотр списка схем;
SHOW VIEW - право на просмотр списка представлений;
SHUTDOWN - право на закрытие.


права доступа PostgreSQL

Код: Выделить всё
В PostgreSQL права задаются только на существующие объекты следующих типов: table (таблица), view (представление), sequence (последовательность), database (база данных), function (функция), procedural language (процедурный язык), schema (схема) и tablespace (табличное пространство). За исключение таблиц перед именами объектов обязательно указывается их тип. Ниже приведен список привилегий:
ALL PRIVILEGES - все привилегии на указанный объект;
CREATE - право на создание. Для базы данных это создание схем внутри ее. Для схем это создание новых объектов внутри ее. Для табличного пространства это создание таблиц, индексов и временных файлов внутри него;
REFERENCES - право на создание внешний ключей;
TRIGGER - право создания триггера на указанную таблицу;
CONNECT - право на соединение с указанной базой данных;
TEMPORARY, TEMP - право на создание временных таблиц;
EXECUTE - право на выполнение функций;
USAGE - право на использование указанного языка для написания функций. Для схемы это доступ к объектам внутри ее. Для последовательности это право использовать функции currval и nextval;
SELECT - право на выборку;
DELETE - право на удаление;
INSERT - право на вставку;
UPDATE - право на обновление.


В PostgreSQL на "несколько" порядков, меньше возможностей.
А при создании пользователя, можно назначить маску для подсети
и уже конкретному пользователю, даётся набор из вышеприведённых возможностей.


.
Последний раз редактировалось vitaly_l 27.03.2016 13:53:46, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: База данных для маленькой программы продаж/склада

Сообщение azsx » 27.03.2016 13:53:11

debi12345 я также за sqlite3, уже писал об этом. ТС сам решает, не решил еще.
Мне просто самому интересно про FireBird
azsx
энтузиаст
 
Сообщения: 959
Зарегистрирован: 16.11.2015 06:38:32

Re: База данных для маленькой программы продаж/склада

Сообщение vitaly_l » 27.03.2016 13:58:02

azsx писал(а):debi12345 я также за sqlite3, уже писал об этом. ТС сам решает, не решил еще.

sqlite3 - это бесспорно маленькое чудо.
Но самое забавное чудо находится в DBF.
ТС - пришёл с вопросом о выборе из двух баз. Теперь у него выбор из 10...
Из 10 баз безусловно проще выбрать чем из двух :cry: .
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: База данных для маленькой программы продаж/склада

Сообщение debi12345 » 27.03.2016 14:00:41

В Postgres все просто - создал роль, внес её в файл настроек, что она может соединятся с таких-то адресов. Например, меня он будет пускать только из моей подсети, немецкая роль подключатся со своей, остальные идут по байпасу.
В MySQL пока не нашел как также разграничить адреса.

Основная фишка PodtgreSQL, придающаю ему особую масштабируемость - возможность легко писАть собственные функции-расширения на множестве языков - от BASH через TCL-PERL-Python до C :) Например файл настроек программы (работающей с PostgreSQL) хранится как TCL-скрипт - эти настройки PostgreSQL может прочитать прямо (выполнив TCL-код), а не через парсинг.
Или вот нам на работе в отчетах понабилось также выводить денежные суммы прописью вместе с названием валюты и правильным спряжением слов - нет проблем, два дня работы (конверсия найденной в Инете функции на Deplhi в C) - и вуаля :).
Или еще один случай - понадобилось многократно ускорить выборку - сперва сделали индекс по функции выборки (функциональный индекс) - ускорилось раз в 10, но недостаточно - переписали функцию (специализированный вариант под конкретный набор аргументов) на C, проиндексировали уже по ней - ускорилось еще с 8 раз :) Лепота-а-а-а!

Добавлено спустя 2 минуты 59 секунд:
Еще в PostgreSQL внедрили суперский механизм лочки без транзации - "advisory lock" - явно указываешь по WHERE-выражению что нужно залочить, и вуаля. Для WWW-аппликух (не держащих постоянного БД-соединенея) - неоценимая фишка :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: База данных для маленькой программы продаж/склада

Сообщение resident » 27.03.2016 14:44:42

vitaly_l писал(а):А при создании пользователя, можно назначить маску для подсети

Точно, нашел. (Я при создании ставил любой адрес и забыл.)
Если подсеть изменится (например, сменю я провайдера), то как изменить маску пользователя?

Добавлено спустя 13 минут 2 секунды:
vitaly_l писал(а):В PostgreSQL на "несколько" порядков, меньше возможностей.

:)
В MySQL вобще-то есть такое фундаментальное определение как роль? Если вы вобще понимаете о чем я.
Пример, мне нужно создать несколько пользователей с одинаковыми правами, то как в MySQL это делать?
Повторять перечисление прав для каждого пользователя?
Последний раз редактировалось resident 27.03.2016 15:37:12, всего редактировалось 1 раз.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: База данных для маленькой программы продаж/склада

Сообщение *Rik* » 27.03.2016 15:12:15

azsx писал(а):
По зубам любая база, у меня есть базы около 50 гб c сотней рабочих мест.

Подскажите, нет ли у вас сбоев в работе или лома базы именно от FireBird?
Не могли бы вы уточнить сколько операций в пике нагрузке выполняется на вашей 50 гб базе и какая скорость (хоть образно)?


Сбоев нет, лома нет (в рабочих базах).
Сколько операций не считал и где у него предел пока не знаю, у пользователей операции короткие, они его почти не грузят, что 20 пользователей что 120, загрузка процессора почти нулевая. По большей частью систему грузят отчеты. Как я говорил, главное правильно организовать работу транзакций, если старейшая транзакция застряет, сервер держит в памяти информацию о транзакциях между самой старой и самой новой, это приводит к перерасходу памяти и тормозам.

ps.
Недавно у меня был случай, когда я испортил таблицу в тестовой базе. После перехода на fpc 3, компоненты начали калечить строковые данные, русские символы занимают в памяти 2 байта и в результате неправильной обрезки, на сервер отправлялся искалеченный текст. В этом случае, сервер возвращает ошибку malformed string, но что-то все таки проскочило прежде чем я исправил ошибку в компонентах, т.к. база была тестовая, я испорченную строку искать не стал, удалил полностью данные из всей таблицы. Я FireBird использую примерно лет 13, это был единственный случай.
Последний раз редактировалось *Rik* 29.03.2016 12:34:48, всего редактировалось 1 раз.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: База данных для маленькой программы продаж/склада

Сообщение WAYFARER » 27.03.2016 15:46:30

resident писал(а):В MySQL вобще-то есть такое фундаментальное определение как роль? Если вы вобще понимаете о чем я.

Никак. Нет ролей в MySQL.
resident писал(а):WAYFARER писал(а):
довольно сложная в освоении СУБД

MySQL мне показался сложнее.


PostgreSQL имеет на порядок больше возможностей, на изучение уйдет намного больше времени.

Ну и вообще я бы их не сравнивал. Это СУБД абсолютно разного уровня, для разных задач.

Добавлено спустя 11 минут 22 секунды:
resident писал(а):Повторять перечисление прав для каждого пользователя?

В процедуре циклом CREATE USER и потом GRANT.
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 517
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: База данных для маленькой программы продаж/склада

Сообщение resident » 27.03.2016 16:19:24

WAYFARER писал(а):Нет ролей в MySQL

Ок :)

Осталось два вопроса по MySQL:
1) Как сменить маску подсети пользователя?
2) Как задать задержку при подключении для защиты от брутфорса?
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: База данных для маленькой программы продаж/склада

Сообщение debi12345 » 27.03.2016 17:02:08

Как задать задержку при подключении для защиты от брутфорса?

Можно внагляк на файрволе, пропускающем к серваку:
Код: Выделить всё
IPTABLES - t filter -A FORWARD|INPUT -p tcp -d <mysql_server_ip> --dport <mysql_server_port> -m limit --limit 1/s -j DROP

- пропускать к серваку не более одного коннекта в секунду
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: База данных для маленькой программы продаж/склада

Сообщение WAYFARER » 27.03.2016 20:03:27

resident писал(а):1) Как сменить маску подсети пользователя?

Код: Выделить всё
GRANT [PRIVILEGIES] PRIVILEGES ON [database]  TO [username]'192.168.0.0/255.255.255.0';


Добавлено спустя 7 минут 26 секунд:
debi12345 писал(а):Можно внагляк на файрволе, пропускающем к серваку:

И это будет правильное решение.

Добавлено спустя 26 минут 58 секунд:
resident, по MySQL вообще отличная документация, в т.ч. на русском языке.
http://www.mysql.ru/docs/man/Secure_connections.html - тут описано большинство интересующих вас моментов в подробностях.
И на sql.ru можно найти готовый ответ почти на любой вопрос.
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 517
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: База данных для маленькой программы продаж/склада

Сообщение mexlist » 28.03.2016 11:17:59

Когда создавал топик, то не думал получить столько ответов.
Теперь я окончательно определился с БД . Буду переходить на MYSQL. Был еще соблазн взяться за Postgres (Сложность в освоении не пугает, так как уже лет пять работаю с Oracle), но отказался.
Решающим все же оказалось то, что программу буду связывать с интеренет-магазинами. А они у меня все на PHP+MySql.
Всем большое спасибо за участие в дискуссии.
mexlist
незнакомец
 
Сообщения: 7
Зарегистрирован: 25.02.2016 09:34:08

Re: База данных для маленькой программы продаж/склада

Сообщение alexs » 28.03.2016 12:47:00

Ism писал(а):Лучший вариант Firebird

+1
DYUMON писал(а):можно использовать postgresql, он тоже многое умеет и с лицензий у него все в порядке.

Для небольших задач он избыточен. Да и в правильной настройке он сложнее.
Для небольших (1-20 юзеров) - птица самое то... И неубиваемость FB тоже много значит. PG и MySQL убить легче.
Вот если в дальнейшем планируется ращирение до 100-1000 юзеров - тогда да, однозначно PG. Но это уже другой уровень.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: База данных для маленькой программы продаж/склада

Сообщение vitaly_l » 28.03.2016 12:48:08

debi12345 писал(а):Основная фишка PodtgreSQL, придающаю ему особую масштабируемость - возможность легко писАть собственные функции-расширения на множестве языков - от BASH через TCL-PERL-Python до C Например файл настроек программы (работающей с PostgreSQL) хранится как TCL-скрипт - эти настройки PostgreSQL может прочитать прямо (выполнив TCL-код), а не через парсинг.

Многие программисты обожают и восхваляют Postgre. Но я пока не вижу реальных плюсов, которые делают Postgre сильнее или быстрее. MySQL, тоже позволяет создавать/выполнять какие-то функции.

1) Правильно ли я понял, что, в MySQL, за это отвечает свой собственный движок, который вначале парсит текст, а потом выполняет функции, а в Postgre это всё делается минуя парсер?

2) Но непонятно тогда, а где и как это всё компилируется в PostgreSQL ?

3) Я не знаком с PERL-Python, но С++ <== явно требует компиляции. debi12345 как это работает в PostgreSQL?



.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: База данных для маленькой программы продаж/склада

Сообщение resident » 28.03.2016 16:17:42

WAYFARER писал(а):GRANT [PRIVILEGIES] PRIVILEGES ON [database] TO [username]'192.168.0.0/255.255.255.0';

Т.е. я создал нового юзера с таким же именем, но другой сетью. Присвоил ему такие же привелегии. Старого удалил.
Вроде работает. Наверное чужие для хищников придумывали такое :)

WAYFARER писал(а):sql.ru

Ок

debi12345 писал(а):пропускать к серваку не более одного коннекта в секунду

А есть ли какой-нить способ проверить, что время изменилось? Может есть какая-нибудь хакерская прога или еще чего?

vitaly_l писал(а):явно требует компиляции

https://youtu.be/j-qNqXwkuzo?t=1429
и про парсер https://youtu.be/uha_uTmXslY?t=2100

Добавлено спустя 47 минут 38 секунд:
vitaly_l писал(а):Но я пока не вижу реальных плюсов, которые делают Postgre сильнее или быстрее.

Например, для Postgres и Firebird, в Лазарусе есть мониторы событий базы, что делает как стоячего MYSQL, где скорость будет зависеть от частоты опроса. Пока я сам не пробовал, но мало ли пригодится (наверное подойдут для чата?).
Вложения
postg.png
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Пред.След.

Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru