Вход | Регистрация
    1  2   
Информационные технологии :: Математика и алгоритмы

Алгоритм формирования логинов для vpn клиентов

Алгоритм формирования логинов для vpn клиентов
Я
   Garykom
 
09.05.19 - 18:22
Собственно предложите/подскажите удобный сабж.

Ваяю сервис где пользователь в личном кабинете может добавлять свои сервера (без белого ip) чтобы опубликовать их в инете.
Каждому серверу (имя задается произвольно) присваивается уникальное имя пользователя vpn и пароль.
С паролями (случайными) легко разобрался, но как имена клиентов формировать? Чтобы они более-менее вменяемые были.

Отдавать это пользователю на усмотрение никак по логике, даже к id сложно привязаться потому что при записи в базу уникальность проверяется.
А id автоинкремент уже после записи имеется только.
 
 
   ДенисЧ
 
1 - 09.05.19 - 18:25
   Garykom
 
2 - 09.05.19 - 18:26
(1) Старая шутка но очень в тему
   Garykom
 
3 - 09.05.19 - 18:27
Может гуиды заюзать?
Или случайный набор символов и сделать проверку перед записью что такого еще нет?
   Лефмихалыч
 
4 - 09.05.19 - 18:45
(0) (Максимум(IDСуществующихКлиентов)+1)+"_СлучайнаяСольИзШестиБуквоцифер"
   Злопчинский
 
5 - 09.05.19 - 18:46
это некошерно так в 8 делать
надо записать, а потом запросом вытащить - если в итоге более одной записи - тогда сделанную запись отменить! будь в тренде! юзай правильные методики!
   Лефмихалыч
 
6 - 09.05.19 - 18:46
в итоге даже при параллельной регистрации нескольлких разных юзеров вероятность коллизии практически равна нулю
   Garykom
 
7 - 09.05.19 - 18:48
(4) Да про нечто подобное и думал, только впереди еще одинаковый префикс добавить.
   Лефмихалыч
 
8 - 09.05.19 - 18:49
на поле таблицы, а котором хранится id клиента, естественно в обязательном порядке надо навесить констрэйнт, чтобы уникальное было. Иначе мандец всему. Так что можно тупо максимум()+1 и не делать мозг.
С солью, конечно, и красивей, и инетерсней.
   Лефмихалыч
 
9 - 09.05.19 - 18:51
все id, которые ты наружу отдаешь, надо солить, если они в основе имеют порядковое число. Иначе потом задолбишься.
   Garykom
 
10 - 09.05.19 - 19:34
(5) У меня mysql с golang'ом вместо 8-ки
   Ванпанчмен
 
11 - 09.05.19 - 21:20
(0) Пусть пользователи сами себе придумывают. Какие проблемы?
   Ванпанчмен
 
12 - 09.05.19 - 21:24
(0) >> А id автоинкремент уже после записи имеется только.

Его тогда и используй. Какие проблемы??? Вообще непонятно описал задачу
   almar
 
13 - 09.05.19 - 22:34
(0) Или e-mail или номер мобильного телефона
   Garykom
 
14 - 09.05.19 - 22:46
(13) Несколько серверов на одном мыле (учетке) могут быть.

По логину у меня уже есть проверка на уникальность ввода пользователем, для email вероятно тоже добавлю чтобы много учеток с одного мыла не заводили а пароль восстановили если что.

Суть в том что пара vpnuser/vpnpassword по сути используется для авторизации и vpnuser должен быть уникальным.
Дефолтный первый сервер могу и vpnuser = логин сделать, но далее сервера добавляются и пользователь только имя сервера для себя может поменять.
vpnuser, vpnpassword и vpnip присваиваются системой для подключения к vpn-серверу, причем мультивход запрещен ибо внутренний ip присваивается тот же всегда.
   Чингачгук
 
15 - 09.05.19 - 22:59
(14) Тогда тебе автоинкрементный id - идеальный вариант. Он всегда уникальный.
   Garykom
 
16 - 09.05.19 - 23:21
(15) Читать уже научись: "id автоинкремент уже после записи имеется только" в (0)
На полях vpnuser и vpnip стоит запрет не уникальных значений.

И да уже сделал добавление
https://i.paste.pics/519b4a8f88936aa3a6ebe50e48715ca3.png
   Чингачгук
 
17 - 09.05.19 - 23:31
(16) Это я уже читал. И что плохого в том что он имеется после записи? Главное что он имеется, и его можно получить и использовать.
   Garykom
 
18 - 09.05.19 - 23:54
(17) Ты реально тугодум.
Каким образом можно записать (чтобы получить id) если стоит запрет записи не уникальных значений?
Первая запись с пустыми еще проходит, вторая падает.
   Garykom
 
19 - 09.05.19 - 23:57
(18)+ В итоге два варианта или писать NULL (тогда mysql/mariadb пропускат плюя на уникальность) или писать нечто случайное.
Затем получив id уже делать апдейт на правильное впн имя и впн ip адрес.
   Чингачгук
 
20 - 10.05.19 - 00:07
(18) Не тупи. Тебе и не нужно записывать неуникальные значение, если это делать запрещено.

(19) Иметь колонки с возможностью записывать NULL - это вообще плохо.
   Чингачгук
 
21 - 10.05.19 - 00:09
(19) >> Затем получив id уже делать апдейт на правильное впн имя и впн ip адрес.

Как ты сделаешь апдейт если запись с такими уникальными полями уже существует?
   Garykom
 
22 - 10.05.19 - 00:13
Иногда меня удивляет на основании чего некоторые называют себя программистами.
   Чингачгук
 
23 - 10.05.19 - 00:16
(22) Просто я не вижу никаких проблем в твоей задаче, я бы ее решил легко. Почему ты не можешь это сделать, ты даже объяснить не в состоянии. У тебя какие-то принципы или ограничения не дают это сделать?
   Чингачгук
 
24 - 10.05.19 - 00:17
Ты не можешь добавить неуникального vpnuser и vpnip, но при этом можешь сделать апдейт? Бред же.
   Garykom
 
25 - 10.05.19 - 00:18
Как может решить проблему тот кто ее даже не понял?

А у меня уже все работает как надо.
   Чингачгук
 
26 - 10.05.19 - 00:19
(25) Я не вижу проблемы. Я вижу задачу которую легко решить. Если не согласен, можешь сказать в чем проблема. Если не можешь сказать, значит ты затупил, а потом понял что затупил, но боишься признаться.
   Garykom
 
27 - 10.05.19 - 00:20
Для совсем того:

1. Надо записать имя и ip адрес зависящие от id в поля где только уникальные
2. Чтобы получить id сначала надо записать запись, но записать пустое имя и 0 ip не выйдет
3. Что делать?
   Чингачгук
 
28 - 10.05.19 - 00:22
1. Как ip адрес может зависеть от id?
   Чингачгук
 
29 - 10.05.19 - 00:24
Я предложил вместо имени использовать id, так как id всегда уникально, и это сразу решает проблему.
Если ip должен быть уникален, то конечно записать второй раз не получится. Но вроде это и було нужно по твоим словам.
   Garykom
 
30 - 10.05.19 - 00:24
Два юзера одновременно добавляют сервер, если первый insert для получения id запись с vpnuser = "", vpnip=0 чтобы получить id и затем update vpnuser = "username_"+id, vpnip=начальныйIP+id

То второй между insert и update первого не сможет сделать insert с vpnuser = "", vpnip=0
 
 Рекламное место пустует
   Garykom
 
31 - 10.05.19 - 00:26
(28) (29) Извини но ты реально не программист а "настоящий 1Сник"
   Чингачгук
 
32 - 10.05.19 - 00:29
(31) Я тебе скажу одну вещь, только ты не обижайся. Даже могу две сказать:
1. LAST_INSERT_ID()
2. Транзакция.

Обе по отдельности решают то что ты написал в (30), хоть ты и плохо объяснил сразу что тебе нужно
   Garykom
 
33 - 10.05.19 - 00:33
(32) Чего на идиотов обижаться.

1. last_insert_id() работает только после insert только для текущего коннекта, второй юзер получит свой последний id а не от первого.
Функцию использую как раз между insert и update
2. Транзакция тут никоим местом не поможет
3. То что ты написал ничего не решает без (19) что мне подсказали в (4)
   Чингачгук
 
34 - 10.05.19 - 00:34
(33) 1. Так тебе это и нужно! Ты явно тупишь. Каждый юзер получит свой id, а не чужой
   Чингачгук
 
35 - 10.05.19 - 00:35
(33) 2. Полностью решает проблему с одновременным добавлением. Рукалицо.
   Чингачгук
 
36 - 10.05.19 - 00:36
Есть еще третий вариант. Записывать ID в одну таблицу, а юзеров и ip потом в другую.
   Garykom
 
37 - 10.05.19 - 00:38
(35) Если в базе уже есть запись vpnuser = "", vpnip=0 то неважно что транзакция, insert не пройдет
   Garykom
 
38 - 10.05.19 - 00:40
(36) Нахера когда можно разрешить NULL и записывать их или генерить случайные для insert и потом менять на нужные в update ?
   Чингачгук
 
39 - 10.05.19 - 00:43
(37) Объясняю как работает транзакция для чайников:
Открываешь транзакцию
Читаешь последнее значение vpnuser, чтобы не привязываться к id, так будет правильнее.
Прибавляешь 1
Записываешь новый vpnuser
Закрываешь транзакцию

Пока открыта транзакция, второй пользователь не сможет начать свою, и будет ждать пока завершится первая.
   Чингачгук
 
40 - 10.05.19 - 00:45
(38) NULL разрешать не красиво в принципе.
   Garykom
 
41 - 10.05.19 - 00:47
(39) До тебя не доходит что в базе по какой то причине уже может быть запись которая неважно есть ли транзакция не даст сделать insert в ней при дублях?

А если ты собираешься нечто читать и прибавлять то нахера мне геморой для второго юзера который то же "Читаешь последнее значение vpnuser" схватит вместе с первым но слегка опоздает и первый уже начал транзакцию?
Ему +1 надо и снова пытаться записать нафуй такое.
   Garykom
 
42 - 10.05.19 - 00:48
(41)+ Транзакции в базе где дохера юзеров одновременно это бред и тормоза, особенно если все они будут +1 и пытаться, пытаться и пытаться ))
   Чингачгук
 
43 - 10.05.19 - 00:52
(41) Блиииин, ну ты тугой.... Как она может быть, если ты всегда будешь прибавлять +1?

Второй юзер не схватит вместе с первым, там транзакция!!!! Я для кого писал то?
   Чингачгук
 
44 - 10.05.19 - 00:53
(42) Подумай еще раз, прежде чем писать
   Чингачгук
 
45 - 10.05.19 - 01:59
Вот четвертый вариант, без транзакций, одним запросом:

INSERT INTO `maya tablitsa Garykoma` (`vpnuser`, `vpnip`)
SELECT MAX(`id`) + 1, MAX(`id`) + 127001 FROM `maya tablitsa Garykoma`;
   Garykom
 
46 - 10.05.19 - 06:24
   Garykom
 
47 - 10.05.19 - 06:32
(46)+ Осталось уже чуть чуть:
1. Запилить создание файлов настроек для nginx по доменам (по vpn клиентам уже пашет)
2. Сделать внешние обработки 1С для установки апача с публикацией базы и настройкой vpn подключения в винде
3. Все отполировать
   Чингачгук
 
48 - 10.05.19 - 16:02
(46) Да вижу, костыль с рандомным мусором. Ну как знаешь
   Лефмихалыч
 
49 - 10.05.19 - 19:31
(48) чем конкретно твой костыль лучше?
   dmitryds
 
50 - 10.05.19 - 19:35
Пусть сами придумывают, а в итоге делать id логина (или сам логин) + придуманное имя (по умолчанию какое-нибудь случайное число). Ну и само собой проверять на уникальность в пределах владельца.
   Чингачгук
 
51 - 10.05.19 - 21:02
(49) Отсутствием костылей. Не люблю компромиссы.
   DGorgoN
 
52 - 10.05.19 - 22:45
(0) Сделай email или номер телефона логином. А лучше и то и другое (вход по емайлу и номеру параллельно)
   DGorgoN
 
53 - 10.05.19 - 22:46
В конце концов сервис по смс информированию, который присылает пароль в виде смс и почту уж сам допилишь.
   Garykom
 
54 - 10.05.19 - 22:50
(52) Логин отдельно - имя (точнее имена) клиентов vpn отдельно.

Плиз внимательнее хотя бы (0) читайте, один логин - много серверов по vpn
https://i.paste.pics/eaef91bb5be64c9c339d90ecba5a2c69.png
   Garykom
 
55 - 10.05.19 - 22:52
(52) Емайл логином сделаю как и номер телефона в будущем, пока при регистрации имя(ник) и емайл указывается с паролем дважды повторенным.

Далее уже в личке можно сервера добавлять своим и им выдаются уникальные vpnuser, по которому сервер определяется какой подключился чтобы уникальный vpnip присвоить, на него идет проброска с внешнего домена.
   Garykom
 
56 - 10.05.19 - 22:53
(55) *свои
   Garykom
 
57 - 10.05.19 - 22:57
В будущем есть в планах добавить "создавать подсети" кроме серверов с узлами чтобы легко можно было свои локалки и отдельные компы с инетом объединять в одну VPN с общим доступом и прозрачной маршрутизацией.

Сервер все маршрутизирует и выдает готовые маршруты для настройки на оборудовании локальных сеток, не надо даже админа грамотного нанимать.
   Лефмихалыч
 
58 - 10.05.19 - 23:00
(51) О каком отсутствии речь? Вероятность коллизии точно такая же у тебя, если не больше, соответственно, все минусы те же самые.
   DGorgoN
 
59 - 10.05.19 - 23:09
Так рождался LogMeIn
   Garykom
 
60 - 10.05.19 - 23:17
(59) В курсе про Hamachi, но у меня немного другое и для другого, по максимуму используются технологии и оборудование уже имеющееся.

Hamachi на роутер хрен засунешь или локалку через один узел не выведешь надо на каждый комп вроде ставить.
Ну и основной функционал все же сделать доступным извне, типа вот есть у тебя локалка выведенная через узел, там маршруты есть.
Добавляешь домен и назначаешь его компу-сервере в локалке (не узлу а за ним) и все пашет, комп доступен из инета по имени домена.
   Чингачгук
 
61 - 10.05.19 - 23:45
(58) У меня решение с полным отсутствием коллизий без лищних усилий, простое, и красивое.
А решение с добавлением всякого мусора чтобы уменьшить верятность коллизий - это подставление костылей в изначально неверно выбранное направления.
   Лефмихалыч
 
62 - 11.05.19 - 07:54
(61) При параллельном одновременном выполнении запроса (45) несколькими пользователями они все получат одни и те же значения. Вероятность коллизии у тебя даже выше, чем в решении с солью
   mistеr
 
63 - 11.05.19 - 13:14
(0) >С паролями (случайными) легко разобрался, но как имена клиентов формировать?

Точно так же, как и пароли. Proton VPN делает так, и все норм.

>Чтобы они более-менее вменяемые были.

А это зачем? Ну правда, задумайся, зачем? Его один раз заносят в конфиг и больше никогда не вспоминают.
   mistеr
 
64 - 11.05.19 - 13:15
(0) А про сервис можно пару слов? Для чего, для кого, почем, когда?
   mistеr
 
65 - 11.05.19 - 13:16
(59) Скорее PwnMeIn
   mistеr
 
66 - 11.05.19 - 13:17
(64) А, все, нашел уже.
 
 Рекламное место пустует
   Тарзан Сережа
 
67 - 13.05.19 - 02:13
(62) учи матчасть, как тут принято говорить. Не могут выполняться одновременно два запроса на инсерт в одну и ту же таблицу, блокировка сработает.
   ДенисЧ
 
68 - 13.05.19 - 05:40
(67) Как два байта переслать. Иначе бы 1с не работала в многопользовательском режиме. Так что учи матчасть
   Тарзан Сережа
 
69 - 13.05.19 - 17:43
(68) Тут ты снова ошибся. Это MySQL, а не 1С.
   Cyberhawk
 
70 - 13.05.19 - 18:01
Мускуль и без транзакций вроде бывает
   Cyberhawk
 
71 - 13.05.19 - 18:01
(63) Для мнемоники
   Garykom
 
72 - 13.05.19 - 18:07
(71) Да именно, хотел некую мнемонику если руками забивать а не копировать-вставить.
Это конечно безопасность слегка понижает ибо подобрать легче, но для логинов vpn пофиг.

Еще надо бы придумать алгоритм для имен новых доменов по дефолту, тоже некая псевдоблагозвучность.
   Тарзан Сережа
 
73 - 13.05.19 - 18:10
(70) Один хрен не может два инсерта выполняться одновременно. Представь для наглядности, как эти запросы будут храниться в журнале, друг за другом. Если база будет восстанавливаться из журнала, она должна прийти в то же самое состояние. А при восстановлении запросы выполняются последовательно, а не одновременно.
   Cyberhawk
 
74 - 13.05.19 - 18:12
(73) Так никто не спорит, что база не допустит коллизию. Тебе лишь говорят что вероятность получить отлуп пользователю будет выше.
   Garykom
 
75 - 13.05.19 - 18:17
   Тарзан Сережа
 
76 - 13.05.19 - 18:27
(75) Там написано про возможность одновременного выполнения запросов SELECT и INSERT
А не про выполнение двух INSERT одновременно. Это две большие разницы
   Тарзан Сережа
 
77 - 13.05.19 - 18:29
(74) Никакого отлупа не будет. Просто будет ожидание в несколько миллисекунд пока завершится чужой запрос и начнется свой. Я думал ты шаришь в запросах в отличии от других.
   Cyberhawk
 
78 - 13.05.19 - 18:30
(77) Не будет ожидания, а будет (62). Что-то ты бакланишь )
   Тарзан Сережа
 
79 - 13.05.19 - 18:32
(78) На (62) я уже писал ответ, следи по циферкам
   Garykom
 
80 - 13.05.19 - 18:41
(76) Попробуй уже мануал от мускула или от марии почитать а?
   Тарзан Сережа
 
81 - 13.05.19 - 18:46
(80) Что ты этим хочешь сказать? Что понимаешь что я прав, но хочешь чтобы другие думали что нет? Или действительно не понимаешь?
Если думаешь что я не прав в чем-то, до покажи в чем именно. Но я уверен что не сможешь.
   Garykom
 
82 - 13.05.19 - 18:47
(81) Нет я думаю что ты тупой недоучка с непонятно откуда взявшимся самомнением.
   Тарзан Сережа
 
83 - 13.05.19 - 18:52
(82) Пустые слова. Мы то знаем кто из нас тупой недоучка. Я тебе советы даю, а ты хамишь, вместо того чтобы прислушаться.
Я то в мускуле ужа давно работаю, мои советы стоят денег, а я их для своих бывших коллег даю бесплатно. Неблагодарный ты.
   Garykom
 
84 - 13.05.19 - 18:53
(83) Давно это примерно с MySQL 4.0 да?
   Тарзан Сережа
 
85 - 13.05.19 - 18:55
(84) Достаточно чтобы знать простые вещи, про которые ты тут задаешь вопросы.
Меня даже Cyberhawk не смог подловить, а ты то куда пытаешься?
   Cyberhawk
 
86 - 14.05.19 - 13:46
Да лениво проверять и моделировать просто, еще и в разных режимах и с разными настройками конкурентности и ведением / неведением лога. Вроде как если в конструкции "инсерт...селект" одна и таже таблица (а не разные), то она-таки блочится даже для читателей, т.е. к ней организуется очередь на чтение другими инсерт...селектами.
   Cyberhawk
 
87 - 14.05.19 - 13:47
Можно вообще как в почтовых сервисах делать - предлагаешь пользователю самому вписать логин, а если такой уже занят, то добавляешь суффиксы и предлагаешь еще разок )
   Garykom
 
88 - 14.05.19 - 14:06
(87) Пока меня случайный vpn логин по правилам "s"+id+random(6) вполне устраивает, есть префиксная часть которая постоянно будет расти, что в сочетании со случайной частью не позволит появиться ошибкам от случайного совпадения.

У меня сча раздумья по идее на таком этапе проект что надо привлекать других специалистов, в тех областях где я не силен. Но ресурсов на это нет ибо бесплатно они не будут работать.
Почти всю техническую часть могу сам но дизайнерская, рекламно-маркетинговая и прочее для продвижения это немного иное.
   Cyberhawk
 
89 - 14.05.19 - 14:16
(88) Перебирайся на оффлайн в МСК на фикси, где 7 часов в день можно плевать в потолок за зарплату в 160к :) Будешь отстегивать профильным спецам
   Garykom
 
90 - 14.05.19 - 14:26
(89) Не нашел таких, пока только где надо "вкалывать" по 10-12 часов в день а я уже отвык и не смогу так долго ИБД заниматься...
   ProxyInspector
 
91 - 14.05.19 - 15:24
Простой алгоритм формирования легко запоминающихся логинов для VPN клиентов на английском языке
Логины имеют след. вид     "БольшаяСогласная""Маленькая гласная""МаленькаяСогласная""БольшаяГласная""4х значнное число" т.е вида
    GinA2473,  NuvE8965 ну и так далее   либо по другому
    GiNa2473,  NuVe8965 так будет даже лучше запоминаться
  Согласные, гласные, цифры в случайном порядке
   Garykom
 
92 - 14.05.19 - 15:46
(91) Вот это практически то что я хотел по сути, но еще с цифрами что то сделать наверно можно, как то улучшить.
   Garykom
 
93 - 14.05.19 - 15:46
(91) Спасибо, довольно простая идея но не пришла в голову.
   Тарзан Сережа
 
94 - 14.05.19 - 15:57
(86) Да и без моделирования все очевидно.

(88) Зачем тебе дизайнеры на домашний проект? Хочешь сделать из него конфетку и потом показывать в портфолио при устройтве на работу? Смысла не вижу.
   Garykom
 
95 - 14.05.19 - 16:04
(94) Читать уже научись
   Тарзан Сережа
 
96 - 14.05.19 - 16:40
(95) Нового ничего не можешь придумать? Какие-нибудь более осмысленные аргументы, хотябы.
Подобных сервисов полно, гораздо лучше и удобнее, есть даже бесплатные. Для учебы эта разработка пойдет. Для заработка - никак. Если только дураков на форуме найдешь, и лапши им навешаешь что это им очень нужно, может даже за один месяц заплатят. Но со временем все равно поймут.
   Garykom
 
97 - 14.05.19 - 16:48
(96) Список плиз "Подобных сервисов полно, гораздо лучше и удобнее, есть даже бесплатные"

Именно через vpn работающие для компов/роутеров/железок с приватным ip и предоставляющие любое доменное имя за денежку с проброской всего трафика (все порты или только указанные) с этого домена на сервер.
   Тарзан Сережа
 
98 - 14.05.19 - 17:01
"Именно через vpn работающие" - как раз таких очень мало, из-за ненужности. Были бы они востребованы и полезны, их бы было гораздо больше, если их любой студент может поднять на своем хостинге за два бакса, сам подумай логически. Почему все сервисы работают через туннели, а не через vpn, неужели так трудно понять.
   Сияющий в темноте
 
99 - 14.05.19 - 17:08
А чем не нравится просто цифровой ид?
пользователю при регистрации дается числовой номер,который фиксируется во временной таблице сессии.если сессия протухла,то ид можно использовать еще раз,для этого создать таблицу свободных ид и чистить сессии раз в сутки.
кто не успел,в следующий раз будет быстрее.
для солидности можнл время жизни сессии выставить в несколько дней,тогда не успеет тот,кто закрыл страницу и забыл нафиг про нее.

если пользователи хотят осмысленные имена,тот тут принцип,кто первый встал,того и тапки,очень подходит.

ид не меняется,а имя пользователь сможет поменять,если новое свободно.
   Тарзан Сережа
 
100 - 14.05.19 - 17:21
(99) >> А чем не нравится просто цифровой ид?
Тем что ТС не смог до него додуматься сам, и сделал уже более сложный вариант. Не хочет признавать свою ошибку.
  1  2   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.