博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python-mysql 权限 pymysql 注入共计
阅读量:6840 次
发布时间:2019-06-26

本文共 4678 字,大约阅读时间需要 15 分钟。

1.mysql用户管理  ***     数据安全非常重要  不可能随便分配root账户     应该按照不同开发岗位分配不同的账户和权限     mysql中 将于用户相关的数据放在mysql库     user - > db - > tables_priv -> columns_priv     如果用户拥有对所有库的访问权 则存储在 user中     如果用户拥有对部分库的使用权          db     如果用户拥有对部分表的使用权          tables;     如果用户拥有对表中某些字段的使用权    columns_priv中     创建新账户     create user "账户名"@"主机名" identified by 密码     create user "tom"@"localhost" identified by "123";     授予所有数据库所有表的所有权限给jerry这个用户  并允许jerry在任意一台电脑登录     如果用户不存在会自动创建     grant all on *.* to "jerry"@"%" identified by  "123" with grant option;     with grant option这个用户可以将拥有的权限授予别人     授予day45数据库所有表的所有权限给jack这个用户  并允许jerry在任意一台电脑登录     grant all on  day45.* to "jack"@"%" identified by  "123";     授予day45数据库的emp表的所有权限给rose这个用户  并允许jerry在任意一台电脑登录     grant all on  day45.emp to "rose"@"%" identified by  "123";     授予day45数据库的emp表的name字段的查询权限给maria这个用户  并允许jerry在任意一台电脑登录     grant select(name) on  day45.emp to "maria"@"%" identified by  "123";     收回权限     REVOKE all privileges [column] on db.table from user@"host";     如何授权就如何收回 因为不同权限信息存到不同的表中     REVOKE all privileges  on day45.emp from maria@"%";     立即刷新权限信息     flush privileges;     # 删除用户     drop user 用户名@主机     drop user maria@%     当你在云服务器部署了 mysql环境时 你的程序无法直接连接到服务器  需要授予在任意一台电脑登录的权限     grant all on *.* to "jerry"@"%" identified by  "123" with grant option; MySQL数据备份 1 使用mysqldump实现逻辑备份     #语法:     # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql     #示例:         #单库备份             mysqldump -uroot -p123 db1 > db1.sql             mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql         #多库备份             mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql         #备份所有库             mysqldump -uroot -p123 --all-databases > all.sql 2 恢复逻辑备份     #方法一:         [root@egon backup]# mysql -uroot -p123 < /backup/all.sql     #方法二:         mysql> use db1;         mysql> SET SQL_LOG_BIN=0;         mysql> source /root/db1.sql     #注:如果备份/恢复单个库时,可以修改sql文件         DROP database if exists school;         create database school;         use school; 2.pymysql ****     后期开发中都是用框架代替pymysql     为什么使用pymysql 因为我们需要在程序去连接数据库进行增删改查 import pymysql conn = pymysql.connect(     host="127.0.0.1",     port=3306,     user="root",     password="123",     database="1123test",     charset="utf8" ) # cursor 游标对象 负责执行sql语句 获取返回的数据 # pymysql.cursors.DictCursor指定使用字典类型的游标 默认是元祖类型 cursor = conn.cursor(pymysql.cursors.DictCursor) sql = "select *from book" # 返回值是本次查询的记录条数 res = cursor.execute(sql)  #执行sql # print(res) # print(cursor.fetchall())   # 提取所有结果 print(cursor.fetchone()) print(cursor.fetchone()) # cursor.scroll(1,mode="absolute") # 游标从开始位置往后移动1条记录 cursor.scroll(1,mode="relative") # 游标从当前位置往后移动1条记录 print(cursor.fetchone())  # 提取一条记录 # print(cursor.fetchone()) # print(cursor.fetchone()) # print(cursor.fetchmany(2)) # 提取指定数量记录 3. sql注入共计     注意:符号--会注释掉它之后的sql,正确的语法:--后至少有一个任意字符     根本原理:就根据程序的字符串拼接name='%s',我们输入一个xxx' -- haha,         用我们输入的xxx加'在程序中拼接成一个判断条件name='xxx' -- haha'     # 什么是sql注入攻击 一些了解sql语法的攻击者  可以通过一些特殊符号 来修改 sql执行逻辑 达到绕过验证的效果     # 避免的方式         1.在输入时加上正则判断 不允许输入与sql相关的关键字 这种方式 无法避免 代理服务器发起的攻击         2.在服务器端 执行sql前先来一波判断     # pymysql中已经帮你做了处理  只要将参数的拼接交给pymysql来完成就能够避免攻击 import pymysql conn = pymysql.connect(     host="127.0.0.1",     port=3306,     user="root",     password="123",     database="1123test",     charset="utf8" ) # cursor 游标对象 负责执行sql语句 获取返回的数据 # pymysql.cursors.DictCursor指定使用字典类型的游标 默认是元祖类型 cursor = conn.cursor(pymysql.cursors.DictCursor) author = input("输入author:") page = input("输入page:") sql = "select *from book where author = '%s' and page = '%s'" %(author,page) # sql = "select *from book where author = %s and page = %s" print(sql) res = cursor.execute(sql) # res = cursor.execute(sql,(author,page)) if res:     print("登录成功") else:     print("登录失败") 4.mysql 增删改 import pymysql conn = pymysql.connect(     host="127.0.0.1",     port=3306,     user="root",     password="root",     database="day47",     charset="utf8" ) # cursor 游标对象 负责执行sql语句 获取返回的数据 # pymysql.cursors.DictCursor指定使用字典类型的游标 默认是元祖类型 cursor = conn.cursor(pymysql.cursors.DictCursor) # sql = "insert into user values(null,'中狗子','123')" sql = "update user set name = '小黄' where name = '中狗子'" # sql = "delete from user where name = '大狗子'" res = cursor.execute(sql) # pymysql不会自动提交  对数据的修改不会持久化 需要手动commit conn.commit() print(res) 3.可视化工具navicat *****     # 什么阶段使用可视化     # 项目开始前 就应该先设计数据库  如果表很多 就需要使用可视化     # 最好的功能是ER图  可以直观看出 表与表的关系     掌握:         #1. 测试+链接数据库         #2. 新建库         #3. 新建表,新增字段+类型+约束         #4. 设计表:外键         #5. 新建查询     #6. 备份库/表     #注意:         批量加注释:ctrl+?键         批量去注释:ctrl+shift+?键

 

 

转载于:https://www.cnblogs.com/du-jun/p/10009826.html

你可能感兴趣的文章
NoSql 简介
查看>>
Spring MVC - 配置Spring MVC
查看>>
ubuntu 命令整合1
查看>>
比较好用的web打印控件——Lodop
查看>>
UVA 10689 Yet another Number Sequence 矩阵快速幂 水呀水
查看>>
已知/未知宽高的浮动元素水平居中对齐 和 图片水平垂直居中对齐
查看>>
asp.net MVC里的 ModelState使用方法
查看>>
Erlang--热更新
查看>>
C库函数:scanf、fscanf、printf、fprintf、sprintf、 snprintf
查看>>
FFT与多项式、生成函数题目泛做
查看>>
JAVA 的wait(), notify()与synchronized同步机制
查看>>
java script w3c study notes
查看>>
GridView 实现LinkButton下载文件/附件
查看>>
cocos2dx spine之一 :spine缓存 (c++ & lua)
查看>>
P1155 双栈排序(二分图染色)
查看>>
XFCE字体发虚的解决方法
查看>>
Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)(转载)
查看>>
java获取本机外网ip
查看>>
JavaScript设计模式--简单工厂模式例子---XHR工厂
查看>>
LinkExtractor
查看>>