Меню
Контакты
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Интернет-магазин
сетевого оборудования
Москва +7 (495) 103-41-03 +7 (915) 420-28-94
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Заказать звонок

Как исключить дублирование данных при добавлении нового пользователя в Mikrotik RouterBoard

 16 Фев 2011    MikroTik, Scripts

Пока пользователей у вас немного, запомнить их логины и Ip-адреса – довольно просто. По мере разрастания базы пользователей это задание становится сложнее, соответственно возникает вероятность дублирования  данных. Чтобы этого избежать, необходимо перед добавлением пользователей выполнить проверку введенных данных с теми, что находятся в базе данных.

Итак, скрипт:

 

#!/usr/bin/env python

# -*- coding: utf_8 -*-

import MySQLdb

from paramiko import SSHClient

from paramiko import AutoAddPolicy

print "asp24.com.ua"

while True:

    login = raw_input("Введите имя пользователя: ")

    password = raw_input("Введите пароль пользователя: ")

    ipaddress = raw_input("Введите IP адрес пользователя: ")

    speed = raw_input("Скорость пользователя: ")

    db = MySQLdb.connect(user='user', passwd='1q2w3e', db='mymikrotik')

    cur = db.cursor()

    sql = ("SELECT login, ipaddress FROM users WHERE login = '%s' OR ipaddress='%s'") % (login, ipaddress) # Извлекаем данные о пользователях в базе данных

    cur.execute(sql)

    data = cur.fetchall()

    cur.close()

    if not data:

            mtlogin = raw_input("Введите имя администратора mikrotik: ")

            mtpassword = raw_input("Введите пароль администратора mikrotik: ")

            mtipaddress = raw_input("Введите IP адрес mikrotik: ")

            db = MySQLdb.connect(user='user', passwd='1q2w3e', db='mymikrotik')

            cur = db.cursor()

            sql = ("INSERT INTO users (login, password, ipaddress, speed, ipmikrotik) VALUES ('%s', '%s', '%s', '%s', '%s')" % (login, password, ipaddress, speed, mtipaddress))

            cur.execute(sql)

            cur.close()

            ssh = SSHClient()

            ssh.set_missing_host_key_policy(AutoAddPolicy())

            ssh.connect(mtipaddress, port=22, username=mtlogin, password=mtpassword)

            cmd = "/ppp secret add name=%s password=%s service=any profile=default local=172.16.1.1 remote=%s" % (login, password, ipaddress)

            ssh.exec_command(cmd)

            ssh.close()

            print "Пользователь %s добавлен" % (login)

        if raw_input("Хотите продолжить? y/n: ")=="n":

                break

    else:

        for sql_record in data:

            sql_login = sql_record[0]

            sql_ipaddress = sql_record[1]

    if login == sql_login:

        print "Логин занят"

    if ipaddress == sql_ipaddress:

        print "ip адрес занят"

Вот, что мы добавляем:

db = MySQLdb.connect(user='root', passwd='1q2w3e', db='mymikrotik')
    cur = db.cursor()
    sql = ("SELECT login, ipaddress FROM users WHERE login = '%s' OR ipaddress='%s'") % (login, ipaddress)
    cur.execute(sql)
    data = cur.fetchall()
    cur.close()

Подключение к базе и создание курсора –  мы уже знаем.

sql = ("SELECT login, ipaddress FROM users WHERE login = '%s' OR ipaddress='%s'") % (login, ipaddress) #  (извлекаем данные о пользователях из базы данных)

В этом запросе мы извлекаем поля login и ipaddress из таблицы users, если они совпадают с введенными значениями. Результат помещаем в data = cur.fetchall()

Делаем проверку:

 if not data:  - если совпадений не было, то продолжаем вводить значения для добавления пользователей в mikrotik.

else:  - иначе (то есть если совпадения были)
        for sql_record in data: запускаем цикл, в котором будут созданы две переменные sql_login и sql_ipaddress.
            sql_login = sql_record[0]
            sql_ipaddress = sql_record[1]

Сравниваем эти переменные со значениями, которые мы вводили с клавиатуры. Выводим сообщения.

    if login == sql_login:

        print "Логин занят"

    if ipaddress == sql_ipaddress:

        print "ip адрес занят"

 Как исключить дублирование данных при добавлении нового пользователя в Mikrotik RouterBoard

Рис.1. Запускаем скрипт.

Запускаем скрипт и вводим данные.

Как исключить дублирование данных при добавлении нового пользователя в Mikrotik RouterBoard

Рис.2. Логин и IP уже существуют.

Мы ввели все необходимые данные. Скрипт выполнил проверку на совпадение в базе данных и выдал результат, что и логин, и ip-адрес заняты.

Как исключить дублирование данных при добавлении нового пользователя в Mikrotik RouterBoard
 
Рис.3. Логин уже существует.

Если бы совпал только логин, мы бы увидели всего одно сообщение.

Как исключить дублирование данных при добавлении нового пользователя в Mikrotik RouterBoard
 
Рис.4. Совпадений не обнаружено.

Если совпадений не обнаружено, скрипт продолжит свою работу.

Евгений Рудченко специально для Asp24