структура таблиц сервера

мануалы
Закрыто
random
Сообщения: 24
Зарегистрирован: 17 авг 2009, 14:22
Благодарил (а): 2 раза
Поблагодарили: 3 раза

структура таблиц сервера

Сообщение random »

не претендую на достоверность.
все было выяснено опытным путем.
описание я так и не сумел найти. причем сегодня не смог вспомнить откуда я брал структуру БД. в проекте сервера я ее не нашел. может сервер сам создал таблицы? не помню.

в некоторых таблицах, с которыми я поработал, проставил автоинкременты и ключи. 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
`server_id` - цифровой идентификатор сервера.
`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
`server_id` - цифровой идентификатор сервера.
`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
`server_id` - цифровой идентификатор сервера.
`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
`server_id` - цифровой идентификатор сервера.
`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 
`server_id` - цифровой идентификатор сервера.
`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 
`group_id`- цифровой идентификатор группы
`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 
`group_id` - цифровой идентификатор группы
`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' 
`server_id` - цифровой идентификатор сервера.
`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
`server_id` - предположительно идентификатор существующих виртуальных серверов.

логи сервера:

Код: Выделить всё

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
`server_id` - цифровой идентификатор сервера. (на сколько я понял murmur умеет держать несколько виртуальных серверов)
`msg` - запись сообщение лога.
`msgtime` - таймштамп. генериться автоматически.

ну и вся регистрация сводится к выполнению запроса

с сайта подключаемся к базе данных мускл коннект. если база не доступна - выдает ошибку - пишем пользователю о недоступности и говорим попробовать позже
потом выполняем запрос
insert into `murmur_players` (`server_id`,`name`,`email`,`pw`) values (<номер сервера>,<имя пользователя>,<почта пользователя>,<пароль>);
если такой уже есть - запрос выдаст ошибку - пишем пользователю что имя занято.
если не выдает ошибку - пишем что регистрация прошла.

этот пост носит только информационный характер. писался по памяти и возможны не точности синтаксиса и опечатки.
Последний раз редактировалось random 20 авг 2009, 14:36, всего редактировалось 3 раза.

B0nuse
Site Admin
Сообщения: 1582
Зарегистрирован: 27 июл 2009, 08:58
Благодарил (а): 40 раз
Поблагодарили: 363 раза
Контактная информация:

Re: структура таблиц сервера

Сообщение B0nuse »

Большое спасибо!
Попробую разобрать ее вместе с Вами:
random писал(а):сегодня не смог вспомнить откуда я брал структуру БД. в проекте сервера я ее не нашел. может сервер сам создал таблицы? не помню.
Возможно при пустой БД первоначальный запуск сервера приводит к созданию таблиц или может из MAP?
random писал(а):таблица прав доступа
...
`apply_here` - (???)примениимость?
`apply_sub` - (???) применимость на субгруппах (или субканалах?)
...
`revokepriv` - (???) на сколько я понял из клиента это битовая маска которая обратная предыдущей. то есть она запрещает прописанные права доступа.
Анологично списку ACL
`apply_here` - применимо к данному каналу
`apply_sub` - применимо к подканалам
`revokepriv` - права, которые запрещены (т.е. что не определено, не значит, что разрешено или запрещено. Канал можен наследовать права от родителя, но именно на данном канале какое-то право может быть запрещено)
random писал(а):таблица банов
...
`base` \ (???)предположительно оба параметра ip и маска не проверялось. механизм бана я пока не смотрел.
`mask` /
Ради теста забанил одного из посетителей сервера. Данные в этой таблице были такие:
`server_id` = 1
`base` = 1323485386
`mask`= 32
random писал(а):таблица каналов
`inheritacl` - (???)судя по названию наследование прав доступа
Опять же из списков ACL
Принимает значения 0 или 1 (т.е. Наследовать список контроля доступа - 1 или нет - 0)
random писал(а):группы пользователей
`channel_id` - идентификатор канала (??? смысл пока мне не доступен)
Определенная группа принадлежит определенному каналу. Очевидно, что группу можно перенести на другой канал. Для этого и нужен его идентификатор.
random писал(а):таблица пользователей сервера
`lastchannel` - предположительно последний канал на котором был пользователь. (полезно знать чтоб при реконекте он входил туда же) не проверялось!
`texture` - не известно.
`lastchannel` - верно
`texture` - предполагаю, что тут в будущем будет храниться "аватара" пользователя или что-то типо того.
random писал(а):таблица существующих серверов (???)
...
`server_id` - предположительно идентификатор существующих виртуальных серверов.
Верно. Один сервер Murmur может обслуживать много виртуальных серверов.
random писал(а):ну и вся регистрация сводится к выполнению запроса
...
потом выполняем запрос
insert (`server_id`,`name`,`email`,`pw`) from `murmur_players` (<номер сервера>,<имя пользователя>,<почта пользователя>,<пароль>);
Есть еще 2 способа инсерта:

Код: Выделить всё

mysql_query ('INSERT INTO murmur_players 
VALUES(`<номер сервера>`,`<имя пользователя>`,`<почта пользователя>`,`<пароль>`)');

Код: Выделить всё

mysql_query("
		INSERT murmur_players 
		SET server_id = '<номер сервера>',
		name = '<имя пользователя>',
		email = '<почта пользователя>',
		pw = '<пароль>'
		");
Мы в Telegramm https://t.me/mumbleru
Пожалуйста, при персональном обращении сразу формулируйте его цель. Спасибо.
Подпишитесь на Новости форума feed/news :rtfm:

Изображение <--- Хочешь себе такой? Читай тут

random
Сообщения: 24
Зарегистрирован: 17 авг 2009, 14:22
Благодарил (а): 2 раза
Поблагодарили: 3 раза

Re: структура таблиц сервера

Сообщение random »

да под конец с инсертом меня переклинило что-то.
поправил.
перечислять название полей обязательно так как в таблице больше полей чем мы вносим.
либо без перечисления, но вносить все поля строго по порядку.
Ради теста забанил одного из посетителей сервера.
сейчас под рукой нет ни сервера ни БД... по каким параметрам идет бан?

еще момент. пользователь с id =0 получает права суперпользователя.
то есть суперпользователь может быть только 1.

B0nuse
Site Admin
Сообщения: 1582
Зарегистрирован: 27 июл 2009, 08:58
Благодарил (а): 40 раз
Поблагодарили: 363 раза
Контактная информация:

Re: структура таблиц сервера

Сообщение B0nuse »

random писал(а):по каким параметрам идет бан?
Пока сложно сказать. Можно спросить у разработчиков.
random писал(а):пользователь с id =0 получает права суперпользователя.
то есть суперпользователь может быть только 1.
Мне кажется одного суперпользователя более чем достаточно.
Мы в Telegramm https://t.me/mumbleru
Пожалуйста, при персональном обращении сразу формулируйте его цель. Спасибо.
Подпишитесь на Новости форума feed/news :rtfm:

Изображение <--- Хочешь себе такой? Читай тут

Auster
Сообщения: 1
Зарегистрирован: 05 сен 2009, 21:32

Re: структура таблиц сервера

Сообщение Auster »

Спасибо. Помогло разобраться в некоторых тонкостях :yahoo:
Прим. Для этого есть специальная кнопка!!!
Последний раз редактировалось B0nuse 09 сен 2009, 18:55, всего редактировалось 1 раз.
Причина: правка

Закрыто