前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python编写数据库连接工具

Python编写数据库连接工具

作者头像
申霖
发布2020-04-10 16:48:38
1.2K0
发布2020-04-10 16:48:38
举报
文章被收录于专栏:小白程序猿小白程序猿

前段时间写过一个数据库暴力破解的工具,使用了一个28G的大字典,最后还是以失败告终。当然这个也是自己写着娱乐的。并没有发布出来。通过测试来看,破解数据库密码还是有一定难度的。但是大家千万不要使用弱密码,比如下面的几种:

  1. 纯数字模式,如123456、6666666、88888等;
  2. 纯字母模式,如aaaaa、bbbbbb、cccccc等;
  3. 单字母加数字,如a123456、a6666等常见且有规律数字;

在设计密码模式时建议大家在程序上强制要求用户满足强密码模式,可以参考以下几种:

  1. 强密码长度至少有 8 个字符
  2. 不包含全部或部分用户账户名
  3. 没有规则的大小写字母、数字、符号的组合
  4. 不是容易被猜测到的密码

下面说一下mysql连接工具的设计和实现吧!

设计

MySQL在连接时要求用户提供主机地址、端口号、数据库名、用户名、密码等条件。我们就以这些信息为模型,设计出表单和提交按钮。

我们使用python的第三方库 tkinter 来实现UI界面。最终实现效果如下:

QQ截图20200409212959.png
QQ截图20200409212959.png

数据库连接

我们知道程序在运行过程中出现错误会停止运行,如果我们输入了错误的密码,那么程序将自行跳出,停止运行,所以在这里我们需要使用try-except来执行代码。

代码语言:javascript
复制
try:
except:

这种模式在执行代码时会执行try下的代码,如果代码出现异常则执行except下的代码,跳出try模式。如果没有异常则会直接忽略掉except下的代码,继续向下执行。

想学习python的同学,可以看一看下面的这本书,目前我这里有这本书的电子版,可以联系我获取。

代码

通过UI界面获取到我们输入的数据库配置信息,在后台对数据进行校验。将校验结果返回至前台,这里我使用的是tkinter中的 messagebox 进行弹窗提示,代码如下。

代码语言:javascript
复制
tkinter.messagebox.showinfo('提示信息', '请输入完整数据')

程序打包

目前已经将程序使用pyinstaller进行打包,有需要的可以找我。

代码

代码语言:javascript
复制
# -*-coding:UTF-8 -*-
import tkinter
import tkinter.messagebox
import pymysql
import time

win = tkinter.Tk()

# 设置标题
win.title('Mysql测试连接')
# 设置位置和大小
win.geometry("400x400+704+304")
# 描述性文字
tkinter.Label(win, text='主机地址', font=('Helvetica Neue', 12)).place(x=10, y=10)
tkinter.Label(win, text='端口号', font=('Helvetica Neue', 12)).place(x=10, y=50)
tkinter.Label(win, text='数据库', font=('Helvetica Neue', 12)).place(x=10, y=90)
tkinter.Label(win, text='用户名', font=('Helvetica Neue', 12)).place(x=10, y=130)
tkinter.Label(win, text='密码', font=('Helvetica Neue', 12)).place(x=10, y=170)
# 主机
host_default = tkinter.StringVar()
host_default.set('127.0.0.1')
host = tkinter.Entry(win, textvariable=host_default, font=('Helvetica Neue', 14))
host.place(x=120, y=10)
# 端口号
port_default = tkinter.StringVar()
port_default.set('3306')
port = tkinter.Entry(win, textvariable=port_default, font=('Helvetica Neue', 14))
port.place(x=120, y=50)
# 数据库名
database_default = tkinter.StringVar()
# database_default.set()
database = tkinter.Entry(win, textvariable=database_default, font=('Helvetica Neue', 14))
database.place(x=120, y=90)
# 用户名
name_default = tkinter.StringVar()
# name_default.set()
name = tkinter.Entry(win, textvariable=name_default, font=('Helvetica Neue', 14))
name.place(x=120, y=130)

# 密码
password_default = tkinter.StringVar()
# password_default.set()
password = tkinter.Entry(win, textvariable=password_default, font=('Helvetica Neue', 14))
password.place(x=120, y=170)


# 计算及下一步操作
def button_call_back():
    # 获取输入框内的数据
    host = host_default.get()
    port = port_default.get()
    database = database_default.get()
    name = name_default.get()
    password = password_default.get()

    if (host and port) and (database and name):
        # 破解
        res = find_pass(host, port, database, name, password)
        if res:
            tkinter.messagebox.showinfo('提示信息', '连接成功')
        else:
            tkinter.messagebox.showinfo('提示信息', '连接失败')
    else:
        tkinter.messagebox.showinfo('提示信息', '请输入完整数据')


# 数据库连接测试
def find_pass(host, port, database, name, password):
    try:
        con = pymysql.connect(
            # 数据库地址
            host='%s' % host,
            # 端口
            port=int(port),
            # 用户名
            user='%s' % name,
            # 密码
            password='%s' % password,
            # 数据库名称
            database='%s' % database,
            # 编码设置
            charset='utf8'
        )
        con.close()
        return password  # 连接成功返回 密码
    except:
        return False


# 按钮
submit = tkinter.Button(win, text="开始", bg="#005ca9", fg="#FFF", width=20, height=1, command=button_call_back)
submit.place(x=130, y=300)

# 进入消息循环
win.mainloop()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档