goletsa
NoDeny
Спец
Карма: 21
Offline
Сообщений: 973
|
|
« : 12 Октября 2009, 12:17:52 » |
|
В логе радиуса пишутся такие параметры как мак и интерфейс пппове сервера: Например: Mon Oct 12 00:00:00 2009 Service-Type = Framed-User Framed-Protocol = PPP NAS-Port = 17315 NAS-Port-Type = Ethernet User-Name = "c-08-1372" Calling-Station-Id = "00:08:54:04:6A:20" NAS-Port-Id = "vlan6_obj" Acct-Session-Id = "818016ef" Framed-IP-Address = 10.5.251.191 Acct-Authentic = RADIUS Event-Timestamp = "Oct 11 2009 23:59:47 MSD" Acct-Session-Time = 550 Acct-Input-Octets = 916728 Acct-Input-Gigawords = 0 Acct-Input-Packets = 6394 Acct-Output-Octets = 7974217 Acct-Output-Gigawords = 0 Acct-Output-Packets = 8032 Acct-Status-Type = Interim-Update NAS-Identifier = "MikroTik" NAS-IP-Address = 192.168.0.10 Acct-Delay-Time = 0 Client-IP-Address = 192.168.0.10 Acct-Unique-Session-Id = "fc01597bc77c3744" Timestamp = 1255291200
А можно ли както сделать чтобы при логине юзера по пппое в отдельную таблицу писались login\mac\nas-address? В теории в недалеком будущем бы хотелось чтобы писалось например в отдельное поле таблицы dopdata...
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #1 : 12 Октября 2009, 20:41:32 » |
|
А можно ли както сделать чтобы при логине юзера по пппое в отдельную таблицу писались login\mac\nas-address?
Да, в sql.conf в authorize_check_query предусмотреть передачу параметра Calling-Station-Id а процедуре radcheck записать в нужную таблицу
|
|
|
Записан
|
|
|
|
serojperoj
NoDeny
Пользователь
Карма: 0
Offline
Сообщений: 72
|
|
« Ответ #2 : 13 Октября 2009, 13:11:12 » |
|
переделал чуток radcheck(); если комуто надо - привязка user+pass+MAC(только тех клиентов у кого в доп. поле указан MAC Address) если кто-то сделал что-то вроде этого - просьба поделитесь =) так-как в мускуле я совсем новенький и уверен что есть иной более грамотный вариант этого скрипта. DROP PROCEDURE IF EXISTS `radcheck`; DELIMITER $$ CREATE PROCEDURE `radcheck` (IN login VARCHAR(64)) BEGIN SELECT id,name,'Password' AS Attribute,AES_DECRYPT(passwd,'hardpass3') AS Value,'==' AS Op FROM users WHERE name=login; IF ((SELECT dopdata.field_value FROM users,dopdata WHERE dopdata.parent_id=users.id AND dopdata.template_num=1 AND dopdata.field_alias='_mac' AND users.name=login ORDER BY dopdata.revision DESC LIMIT 1) <> '') THEN
SELECT users.id,users.name,'Calling-Station-Id' AS Attribute,dopdata.field_value AS Value,'==' AS Op FROM users,dopdata WHERE dopdata.parent_id=users.id AND dopdata.template_num=1 AND dopdata.field_alias='_mac' AND users.name=login ORDER BY dopdata.revision DESC LIMIT 1; END IF; END$$ DELIMITER ; запрос виглядет так: mysql> use bill; Database changed mysql> call radcheck('seroj'); +----+-------+-----------+--------+----+ | id | name | Attribute | Value | Op | +----+-------+-----------+--------+----+ | 1 | seroj | Password | pass11 | == | +----+-------+-----------+--------+----+ 1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec) mysql> call radcheck('yazva'); +----+-------+-----------+---------+----+ | id | name | Attribute | Value | Op | +----+-------+-----------+---------+----+ | 2 | yazva | Password | pass222 | == | +----+-------+-----------+---------+----+ 1 row in set (0.00 sec)
+----+-------+--------------------+-------------------+----+ | id | name | Attribute | Value | Op | +----+-------+--------------------+-------------------+----+ | 2 | yazva | Calling-Station-Id | 00:34:58:5D:21:43 | == | +----+-------+--------------------+-------------------+----+ 1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
|
|
« Последнее редактирование: 13 Октября 2009, 13:33:55 от serojperoj »
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #3 : 13 Октября 2009, 13:21:01 » |
|
я думаю ORDER BY dopdata.revision DESC LIMIT 1 лучше заменить на подзапрос с выборкой наибольшей ревизии, см. представление users_rev. Мне кажется будет быстрее обрабатываться. Хотя надо, конечно, тестировать или план запроса смотреть
|
|
|
Записан
|
|
|
|
serojperoj
NoDeny
Пользователь
Карма: 0
Offline
Сообщений: 72
|
|
« Ответ #4 : 14 Октября 2009, 01:22:40 » |
|
наверное что-то типа этого.. 1. SELECT field_value FROM dopdata WHERE revision IN (SELECT rev FROM rev_users WHERE id IN (SELECT id FROM users where name=login)) AND field_alias='_mac'; 2. SELECT field_value from dopvalues where revision IN (SELECT rev FROM rev_users WHERE id IN (SELECT id FROM users where name=login)) and dopfield_id=4; непомню точно в доках или на форуме было написано что dopdata=dopfields+dopvalues , тоесть смело можно пологать , что второй запрос более легкий? и еще dopfield_id в таблице dopvalue неповторяютса?
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #5 : 14 Октября 2009, 07:14:27 » |
|
2. SELECT field_value from dopvalues where revision IN (SELECT rev FROM rev_users WHERE id IN (SELECT id FROM users where name=login)) and dopfield_id=4; непомню точно в доках или на форуме было написано что dopdata=dopfields+dopvalues , тоесть смело можно пологать , что второй запрос более легкий? и еще dopfield_id в таблице dopvalue неповторяютса? абсолютно верно, dopdata это объединение таблиц dopfields и dopvalues, поэтому 2й запрос будет легче. dopfield_id это ссылка на описание поля в таблице dopfields, совершенно правильно по field_alias был вычислен dopfield_id. Для одной ревизии dopfield_id не повторяется
|
|
|
Записан
|
|
|
|
Maks
NoDeny
Ветеран
Карма: 13
Offline
Сообщений: 575
Скажи спасибо - подними карму.
|
|
« Ответ #6 : 20 Августа 2010, 23:13:19 » |
|
Я в Мускуле вообще не шарю, но задача у меня схожа с той что в этой теме.
Нужно чтоб когда абон подключался по PPPoE в его доп данных заносился мак с которого было подключение. Но это нужно только для статистики, ограничений нет. И нужно реализовать поиск по этим макам.
Тобиш я пишу мак, а мне ответ, что комп с этим маком подключался с таких, таких учеток. Идеально было бы время подключения, но если это сильно усложняет задачу (увеличивает стоимость) то не нужно.
Кто сможет реализовать и какова будет стоимоть?
|
|
|
Записан
|
|
|
|
stix
NoDeny
Спец
Карма: 72
Offline
Сообщений: 1872
Nodeny Support Team
|
|
« Ответ #7 : 21 Августа 2010, 06:06:00 » |
|
если через радиус, то измени процедуру авторизации, добавив один sql запрос Insert
|
|
|
Записан
|
|
|
|
Maks
NoDeny
Ветеран
Карма: 13
Offline
Сообщений: 575
Скажи спасибо - подними карму.
|
|
« Ответ #8 : 21 Августа 2010, 09:55:08 » |
|
Да через радиус. И в доп полях будут записываться все маки или последний с которого была авторизация?
|
|
|
Записан
|
|
|
|
stix
NoDeny
Спец
Карма: 72
Offline
Сообщений: 1872
Nodeny Support Team
|
|
« Ответ #9 : 21 Августа 2010, 10:07:36 » |
|
можешь создать еще одно доп поле в БД и в него автоинкрементом будет каждый раз писаться новый мак. но тогда правильней сделать еще одну таблицу для маков чтобы одна учетная запись имела несколько маков. типо поля ID, login, mac и в нее постоянно дописывать маки, которые видит радиус
или вариант2, который быстрее и проще, это через update обновлять последний мак
|
|
|
Записан
|
|
|
|
elite
Начальник планеты
NoDeny
Спец
Карма: 52
Offline
Сообщений: 1226
In LAN we trust!
|
|
« Ответ #10 : 21 Августа 2010, 11:30:12 » |
|
или вариант2, который быстрее и проще, это через update обновлять последний мак
нужно видеть, менялся ли мак адрес у абонента или нет
|
|
|
Записан
|
|
|
|
stix
NoDeny
Спец
Карма: 72
Offline
Сообщений: 1872
Nodeny Support Team
|
|
« Ответ #11 : 21 Августа 2010, 18:04:45 » |
|
SELECT id,name,'Password' AS Attribute,AES_DECRYPT(passwd,'hardpass3') AS Value,'==' FROM users WHERE name=login; далее сделать сравнение нового мака с тем что есть в бд
|
|
|
Записан
|
|
|
|
ser970
NoDeny
Спец
Карма: 70
Offline
Сообщений: 1323
|
|
« Ответ #12 : 21 Августа 2010, 19:00:47 » |
|
можешь создать еще одно доп поле в БД и в него автоинкрементом будет каждый раз писаться новый мак. но тогда правильней сделать еще одну таблицу для маков чтобы одна учетная запись имела несколько маков. типо поля ID, login, mac и в нее постоянно дописывать маки, которые видит радиус
или вариант2, который быстрее и проще, это через update обновлять последний мак
зачем так сложно. в доп дату писать новый мак только в том случае если єтот мак еще не бил в сети - тогда запросом можно вытаскивать все маки клиента - за одно контролировать - хотя контроль чисто .... мак легко меняется . можно по дургому - надо проверять с того ли порта свича пришел мак - это более защищенно. кстати счас этим и занят - авторизация через веб с использованием вланов - не авторизированый зверь - только на страничу статистики и кнопка вход - запрос с тоголи порта свича пришел - если да то разрешим - елси нет то выведем соощение и уберем кнопку.переодически опрашиваем всех авторизированых на присутсвтие - если мак исчес из массива то (пользователь отключился ) переведем его порт обратно во влан авторизации. где то так.
|
|
« Последнее редактирование: 21 Августа 2010, 19:06:16 от ser970 »
|
Записан
|
|
|
|
stix
NoDeny
Спец
Карма: 72
Offline
Сообщений: 1872
Nodeny Support Team
|
|
« Ответ #13 : 21 Августа 2010, 20:22:26 » |
|
я думал тоже сделать так, но потом решил что для юзеров это геморно браузер подключать каждый раз.
|
|
|
Записан
|
|
|
|
ser970
NoDeny
Спец
Карма: 70
Offline
Сообщений: 1323
|
|
« Ответ #14 : 21 Августа 2010, 21:16:43 » |
|
я думал тоже сделать так, но потом решил что для юзеров это геморно браузер подключать каждый раз.
че геиморойно ? не совсем понял через что звери в однокласнки ходять? смыслн не каждый раз а только при включении компа (если он был отключен от сети более 300 сек)
|
|
|
Записан
|
|
|
|
|