Задавайте вопросы, мы ответим
Вы не зашли.
Всё скомпилированно, исходников нет!!!
Есть серверная часть на MySQL. В ней "по начальному шаблону" удалённый пользователь (клиент)создаёт свои базы. Удалённая клиентская часть конектется по IP. и порту 3306. Список баз данных "приходит" с серверной части далее вводится логин и пароль в выбранную базу. Надо сделать так, что бы удалённые клиенты видели только свои базы. MySQL позволяет поднимать его на одном сервере много раз. На сервере в файле ini, порт 3306 - это параметр, но в клиенте он, видимо, "прошит". Опастность в том, что клиент обладающий правами Админа (в базе) может создавать новые пустые базы из шаблона с именами соседних существующих баз, ЗАТИРАЯ их! Вот эту проблему и надо ликвидировать!
Я не программист, я заказчик. Сколько вешать в граммах??
Неактивен
Достаточно «серверной части» не давать администраторские права (давать права на создание
только конкретной базы):
GRANT ALL ON dbname.* TO username@hostname IDENTIFIED BY 'password' — тогда он не сможет
создать соседней базы => не сможет ее испортить.
Неактивен
Sir paulus!
А куда это прописывать?
есть my.ini
--------------------------------
# my.cnf
# Конфигурационный файл СУБД MySQL.
#
# Внимание! При установке на диск отличный от с:
# замените все встречающиеся в тексте ссылки с:
# на имя выбранного диска (например d.
[client]
user=admin
password=
port=3306
character-sets-dir=c:/opus/server/share/charsets
[mysqld]
port=3306
skip-locking
skip-innodb
default-character-set=cp1251
set-variable = key_buffer=16M
set-variable = max_allowed_packet=1M
set-variable = thread_stack=128K
set-variable = flush_time=1800
basedir = c:/opus/server/
datadir = c:/opus/server/data/
#log
#log-update
--------------------------------
А есть start.bat
он вот такой:
@echo off
rem Сценарий запуска СУБД MySQL
rem
rem Внимание! При установке на диск отличный от с:
rem замените все встречающиеся в тексте ссылки с:
rem на имя выбранного диска (например d.
echo MySQL Server is starting on %COMPUTERNAME%.
echo Hint: To stop DB server, please, run stop.bat
c:\opus\server\bin\mysqld --defaults-file=c:\opus\server\my.ini
Могет я подъеду????
Неактивен
Писать не в конфиг, надо подключиться к серверу с помощью любого клиента (например, стандартного
консольного клиента, входящего в поставку) под пользователем root и выполнить эту команду. Разумеется,
поменяв все названия.
UPD: Кстати, с Вашей системой запуска - можете просто создать несколько экземпляров MySQL на одной
машинке (для этого нужны разные порты и разные каталоги, в которых живет MySQL; ну и конфиги, разумеется,
разные).
Неактивен
Sir paulus!
Если бы в конфиге "клиента" тоже было назначение порта, то да ... Делаем проброс на роуторе, и работаем..., но конфиг "клиента" вот такой:
[Options]
Licence=10211640
Period=01/01/2000-31/12/2010
[Main]
State=0
Left=43
Top=44
Width=1036
Height=700
[Connection]
Server=***.***.***.***
Database=*******
Login=*****
[Workers]
SearchString=
Left=0
Top=0
[Worker]
Left=22
Top=29
[Scores]
SearchNumber=180
SearchString=
Year=14
Left=44
Top=58
[Score]
Left=145
Top=7
[Acts]
SearchNumber=
SearchString=
Year=14
Left=88
Top=116
[Act]
Left=128
Top=8
[Customer]
Left=66
Top=87
[Release]
Left=44
Top=58
Мне кажеться, (в смысле портов) - он пустой. И все удалённые клиенты лезут через один порт 3306. То ли микро-брандмауер писать для клиентской части. То ли ещё один MySQL верхнего уровня на серваке... Разные фантастические советы получаю... (это от незнания)
Подключиться root-ом ... это здорово, ... ещё бы уметь, а если запаролен вход? А если выключилось (на регламент) питание на серваке, то эту комманду снова давать, а если "клиентов" чел. двадцать - тридцать..?
Я прошу прощения, но я пользователь. Когда я, разберусь с root-ом, то стану admin-ом и глупых вопросов задавать не буду..., но это в следующей жизни.
Стыдно мне, забивать форум ликбезом!
Отредактированно proot (05.03.2009 13:27:12)
Неактивен
Я бы попробовал добавить в [Connection] еще строку Port=3307 (а вдруг? ).
Что касается прав доступа — они, разумеется, сохранятся. После включения питания они восстановятся такими,
как Вы их создали.
--
Проще всего выполнить на сервере команду
GRANT ALL ON db1.* TO user1@'%' IDENTIFIED BY '';
И в «клиенте» указать login=user1
Неактивен
Ещё я просмотрел всю клиентскую часть в HEX редакторе, но явно в ASCI кодах 3306, или port - эти понятия не видно. Где это может лежать?
Тоже вариант: раздать разные прошитые клиенты.
Или писать-таки микропрокси.
Неактивен
Не забудьте про порядок байт. 3306 должна выглядеть в HEX как EA0C
Неактивен
Ну и, разумеется, скорее всего, оно нигде не лежит, т.к. это порт по-умолчанию.
Неактивен
rgbeast написал:
Не забудьте про порядок байт. 3306 должна выглядеть в HEX как EA0C
Да, в exe-шнике "клиента" четыре раза встечается эта комбинация (ea 0c). В dll-ках, где 2, где 3 раза. Оно- конечно, это и совпадения возможны. Могет и нет ни где, как уважаемый paulus пишет...(но кто-то его, блин, в пакет вставлят ...!)
А вдруг прокатит... А можно спросить формулку пересчёта или будьте любезны: как будет 3307. Попробую с одним портом..
А, что означает Ваше замечание о порядке байт. Его надо учитывать при вычислении, при поиске или при "подмене"? А потом, ещё контрольная сумма поплывёт...а её, как восстанавливать?
Неактивен
eb0c
Как вариант: поднимите несколько IP на одной машинке, повесьте на разные IP (с помощью --bind-address)
и подключайтесь к разным IP по стандартному порту?
Дизассемблировать программу — жесткое решение... и вряд ли полезное, если честно.
Неактивен
Sirs paulus & rgbeast !!
Немного продвинулся (работы на 30 мин.)! Нашёл единственное место, при замене HEX которого- открывается работа по другому порту! Это файл клиентской части libmySQL.dll - в нём два места "еа 0с". При замене одного - получаем дополнительный параллельный процесс на компе, а замена второго - "не влияет". Не влияет - это значит: мы не получаем параллельного процесса , но и не вылетаем в ошибку! Понятно, что где-то, ещё как , влияет!
Прошу прокомментировать следующую микропроблему (она была и раньше при запуске многих процессов с одним адресом).
С раздела С\ подняли экземпляр SQL с адресом 3306, с раздела D\ подняли экземпляр SQL с адр.3307. Потом даём stop.bat с радела D\, но останавливается экземпляр с другого раздела , с раздела С\. Если начинаем останавливать с раздела С\, то он останавливает свой процесс. Меняем последовательность С\ и D\, всё зеркально меняется . То есть получается, что , в какой последовательности поднимали, так и надо останавливать. Не удобно. А если процессов 20, а ночью надо всё (а ещё хуже –частично )stop … и пробэкапить кого-то.
Ещё, в клиентской части есть следующие библиотеки butil.dll, dbexpmysql.dll и midas.dll в них тоже есть заветные HEX "еа 0с", но их замена "не влияет". Могет это вообще «стандартные» компоненты и они не компилируются, и в них не надо ни чего искать?
На счёт IP: у меня ОДИН статический входной от провайдера на роуторе. Я не хотел бы покупать пул адресов.
Спасибо!
Неактивен
А программа то на дельфи!
1. Стандартные библиотеки мучать не надо, они не виноваты.
2. Скорее всего, в stop.bat написано «mysqladmin shutdown», который соединяется с сервером по tcp-ip
(на порт 3306) и отдает команду серверу остановиться. Отсюда эти «особенности» остановки. Достаточно
дописать --port и будет останавливаться нужный сервер.
3. Про пул адресов не понял
Неактивен
Stop.bat вот такой:
c:\opus\server\bin\mysqladmin --defaults-file=c:\opus\server\my.ini shutdown,
а как должно дописать или изменить?? (сам ini выше 04.03.2009 в 20:46:59).
Пул - это с адреса ..... по адрес .... А у меня просто, выделен статический публичный адресс - один. Хочу ещё - платим и получаем. А если удалённых клиентов 40?
40 IPишников не купить!
Спасибо, что не бросили!
Неактивен
Вот в c:\opus\server\my.ini нужно указать порт сервера, который нужно останавливать
Неактивен
[Connection]
Server=***.***.***.***
Database=*******
Login=*****
попробуйте Server=***.***.***.***:3307 или что надо вам
Неактивен