все было выяснено опытным путем. описание я так и не сумел найти. причем сегодня не смог вспомнить откуда я брал структуру БД. в проекте сервера я ее не нашел. может сервер сам создал таблицы? не помню.
в некоторых таблицах, с которыми я поработал, проставил автоинкременты и ключи. INNODB у себя переведу на MYISAM. с ним проблем меньше. критичных транзакций (если они тут вообще есть) тут быть не должно. это довольно статические данные.
если бы документация на таблицы существовала бы на англ языке то я бы не утруждал себя. те, кому могут понадобиться эти данные, язык в том или ином виде знают.
таблица прав доступа
Код: Выделить всё
CREATE TABLE `murmur_acl` (
`server_id` int(11) NOT NULL,
`channel_id` int(11) NOT NULL,
`priority` int(11) default NULL,
`player_id` int(11) default NULL,
`group_name` varchar(255) collate utf8_unicode_ci default NULL,
`apply_here` int(11) default NULL,
`apply_sub` int(11) default NULL,
`grantpriv` int(11) default NULL,
`revokepriv` int(11) default NULL,
UNIQUE KEY `murmur_acl_channel_pri` (`server_id`,`channel_id`,`priority`),
KEY `murmur_acl_player` (`server_id`,`player_id`),
CONSTRAINT `murmur_acl_del_player` FOREIGN KEY (`server_id`, `player_id`) REFERENCES `murmur_players` (`server_id`, `player_id`) ON DELETE CASCADE,
CONSTRAINT `murmur_acl_del_channel` FOREIGN KEY (`server_id`, `channel_id`) REFERENCES `murmur_channels` (`server_id`, `channel_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
`channel_id` - идентификатор канала
`priority` - (???) приоритет назначенных прав?
`player_id` - цифровой идентификатор пользователя
`group_name` - имя группы
`apply_here` - (???)примениимость?
`apply_sub` - (???) применимость на субгруппах (или субканалах?)
`grantpriv` - битовая маска прав.(изучать какой бит за что отвечает мне лень. тем более все из клиента легко выставляется)
`revokepriv` - (???) на сколько я понял из клиента это битовая маска которая обратная предыдущей. то есть она запрещает прописанные права доступа.
таблица банов
Код: Выделить всё
CREATE TABLE `murmur_bans` (
`server_id` int(11) NOT NULL,
`base` int(11) default NULL,
`mask` int(11) default NULL,
KEY `murmur_bans_del_server` (`server_id`),
CONSTRAINT `murmur_bans_del_server` FOREIGN KEY (`server_id`) REFERENCES `murmur_servers` (`server_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
`base` \ (???)предположительно оба параметра ip и маска не проверялось. механизм бана я пока не смотрел.
`mask` /
таблица связей каналов
Код: Выделить всё
CREATE TABLE `murmur_channel_links` (
`server_id` int(11) NOT NULL,
`channel_id` int(11) NOT NULL,
`link_id` int(11) NOT NULL,
KEY `murmur_channel_links_del_channel` (`server_id`,`channel_id`),
CONSTRAINT `murmur_channel_links_del_channel` FOREIGN KEY (`server_id`, `channel_id`) REFERENCES `murmur_channels` (`server_id`, `channel_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
`channel_id` - идентификатор канала
`link_id` - идентификатор линкованного канала (не проверял)
таблица каналов
Код: Выделить всё
CREATE TABLE `murmur_channels` (
`server_id` int(11) NOT NULL,
`channel_id` int(11) NOT NULL,
`parent_id` int(11) default NULL,
`name` varchar(255) collate utf8_unicode_ci default NULL,
`inheritacl` int(11) default NULL,
`description` text collate utf8_unicode_ci,
PRIMARY KEY (`channel_id`),
UNIQUE KEY `murmur_channel_id` (`server_id`,`channel_id`),
KEY `murmur_channels_parent_del` (`server_id`,`parent_id`),
CONSTRAINT `murmur_channels_parent_del` FOREIGN KEY (`server_id`, `parent_id`) REFERENCES `murmur_channels` (`server_id`, `channel_id`) ON DELETE CASCADE,
CONSTRAINT `murmur_channels_server_del` FOREIGN KEY (`server_id`) REFERENCES `murmur_servers` (`server_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
`channel_id` - идентификатор канала
`parent_id - идентификатор родительского канала (каналы бывают вложенные)
`name` - название канала
`inheritacl` - (???)судя по названию наследование прав доступа
`description` - описание канала
хранилище ключа и сертификата
Код: Выделить всё
CREATE TABLE `murmur_config` (
`server_id` int(11) NOT NULL,
`keystring` varchar(255) collate utf8_unicode_ci default NULL,
`value` text collate utf8_unicode_ci,
UNIQUE KEY `murmur_config_key` (`server_id`,`keystring`),
CONSTRAINT `murmur_config_server_del` FOREIGN KEY (`server_id`) REFERENCES `murmur_servers` (`server_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
`keystring`- принимает значения (certificate,key)
`value` - хранилище сертификата или ключа (CERTIFICATE или BEGIN RSA PRIVATE KEY)
соответствие пользователей и групп
Код: Выделить всё
CREATE TABLE `murmur_group_members` (
`group_id` int(11) NOT NULL,
`server_id` int(11) NOT NULL,
`player_id` int(11) NOT NULL,
`addit` int(11) default NULL,
KEY `murmur_group_members_players` (`server_id`,`player_id`),
KEY `murmur_group_members_del_group` (`group_id`),
CONSTRAINT `murmur_group_members_del_player` FOREIGN KEY (`server_id`, `player_id`) REFERENCES `murmur_players` (`server_id`, `player_id`) ON DELETE CASCADE,
CONSTRAINT `murmur_group_members_del_group` FOREIGN KEY (`group_id`) REFERENCES `murmur_groups` (`group_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
`server_id` - цифровой идентификатор сервера.
`player_id` - цифровой идентификатор пользователя
`addit` - (???) если не заполнять не работает. по умолчанию сервер в моем случае поставил туда 1
группы пользователей
Код: Выделить всё
CREATE TABLE `murmur_groups` (
`group_id` int(11) NOT NULL auto_increment,
`server_id` int(11) NOT NULL,
`name` varchar(255) collate utf8_unicode_ci default NULL,
`channel_id` int(11) NOT NULL,
`inherit` int(11) default NULL,
`inheritable` int(11) default NULL,
PRIMARY KEY (`group_id`),
UNIQUE KEY `murmur_groups_name_channels` (`server_id`,`channel_id`,`name`),
CONSTRAINT `murmur_groups_del_channel` FOREIGN KEY (`server_id`, `channel_id`) REFERENCES `murmur_channels` (`server_id`, `channel_id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
`server_id` - цифровой идентификатор сервера.
`name` - имя группы
`channel_id` - идентификатор канала (??? смысл пока мне не доступен)
`inherit` - предположительно связано с вложением групп
`inheritable` - предположительно связано с возможностью вложения групп
предположительно сохранение переменных сервера
Код: Выделить всё
CREATE TABLE `murmur_meta` (
`keystring` varchar(255) collate utf8_unicode_ci NOT NULL,
`value` varchar(255) collate utf8_unicode_ci default NULL,
PRIMARY KEY (`keystring`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
`keystring`="version"
`value`=3
на самом деле смысл данной таблицы от меня ускользает. делать таблицу на 1 строку как то глупо.
назначение не известно. только предположения. записей в таблице не обнаружено
Код: Выделить всё
CREATE TABLE `murmur_player_auth` (
`player_auth_id` int(11) NOT NULL auto_increment,
`name` varchar(255) collate utf8_unicode_ci default NULL,
`pw` varchar(128) collate utf8_unicode_ci default NULL,
`email` varchar(255) collate utf8_unicode_ci default NULL,
`authcode` varchar(255) collate utf8_unicode_ci default NULL,
PRIMARY KEY (`player_auth_id`),
UNIQUE KEY `murmur_player_auth_name` (`name`),
UNIQUE KEY `murmur_player_auth_code` (`authcode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Код: Выделить всё
CREATE TABLE `murmur_players` (
`server_id` int(11) NOT NULL default '1',
`player_id` int(11) NOT NULL auto_increment,
`name` varchar(255) collate utf8_unicode_ci default NULL,
`email` varchar(255) collate utf8_unicode_ci default NULL,
`pw` varchar(128) collate utf8_unicode_ci default NULL,
`lastchannel` int(11) default NULL,
`texture` longblob,
`last_active` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`player_id`),
UNIQUE KEY `murmur_players_id` (`server_id`,`player_id`),
UNIQUE KEY `murmur_players_name` (`server_id`,`name`),
KEY `murmur_players_channel` (`server_id`,`lastchannel`),
CONSTRAINT `murmur_players_server_del` FOREIGN KEY (`server_id`) REFERENCES `murmur_servers` (`server_id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AVG_ROW_LENGTH=8192 ROW_FORMAT=DYNAMIC COMMENT='InnoDB free: 9216 kB; (`server_id`) REFER `murmur/murmur_ser'
`player_id` - цифровой идентификатор пользователя. (у себя я поставил ключи и автоинкремент. так просто удобнее и не будет дубликатов записей. в оригинале ключей не было.)
`name` - имя пользователя
`email` - почта пользователя
`pw` - пароль.
вот тут интересный момент. пароль можно записать в базу в открытом виде. то есть текстом как он есть.
после логина сервер сделает сам его хеш. (вроде md5 но не проверял)
`lastchannel` - предположительно последний канал на котором был пользователь. (полезно знать чтоб при реконекте он входил туда же) не проверялось!
`texture` - не известно.
`last_active`- последняя активность пользователя. таймштамп.
таблица существующих серверов (???)
у меня в ней 1 запись. цифра 1.
Код: Выделить всё
murmur_servers | CREATE TABLE `murmur_servers` (
`server_id` int(11) NOT NULL auto_increment,
PRIMARY KEY (`server_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
логи сервера:
Код: Выделить всё
CREATE TABLE `murmur_slog` (
`server_id` int(11) NOT NULL,
`msg` text collate utf8_unicode_ci,
`msgtime` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
KEY `murmur_slog_time` (`msgtime`),
KEY `murmur_slog_server_del` (`server_id`),
CONSTRAINT `murmur_slog_server_del` FOREIGN KEY (`server_id`) REFERENCES `murmur_servers` (`server_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
`msg` - запись сообщение лога.
`msgtime` - таймштамп. генериться автоматически.
ну и вся регистрация сводится к выполнению запроса
с сайта подключаемся к базе данных мускл коннект. если база не доступна - выдает ошибку - пишем пользователю о недоступности и говорим попробовать позже
потом выполняем запрос
insert into `murmur_players` (`server_id`,`name`,`email`,`pw`) values (<номер сервера>,<имя пользователя>,<почта пользователя>,<пароль>);
если такой уже есть - запрос выдаст ошибку - пишем пользователю что имя занято.
если не выдает ошибку - пишем что регистрация прошла.
этот пост носит только информационный характер. писался по памяти и возможны не точности синтаксиса и опечатки.