mysql数据库: 用户管理、pymysql使用、sql注入

   2023-02-07 学习力0
核心提示:本文目录:一、用户管理二、pymysql增删改查三、sql注入攻击  数据安全非常重要 不可能随便分配root账户应该按照不同开发岗位分配不同的账户和权限mysql中 将于用户相关的数据放在mysql库user -db -tables_priv - columns_priv如果用户拥有对所有库的访问权

本文目录:

一、用户管理

二、pymysql增删改查

三、sql注入攻击

 

数据安全非常重要 不可能随便分配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;

 

二、pymysql增删改查

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 = "select *from user"

# 返回值是本次查询的记录条数
res = cursor.execute(sql)  #执行sql
print(cursor.fetchall())   # 提取所有结果
# 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)) # 提取指定数量记录

# print(res)
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)

 

三、sql注入攻击

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)

name = input("输入用户名:")

pwd = input("输入密码:")


sql = "select *from user where name = %s and password = %s"
res = cursor.execute(sql,(name,pwd))
if res:
    print("登录成功")
else:
    print("登录失败")


# 什么是sql注入攻击 
# 一些了解sql语法的攻击者 可以通过一些特殊符号 来修改 sql执行逻辑 达到绕过验证的效果
# 如何避免?
# 1.在输入时加上正则判断 不允许输入与sql相关的关键字 这种方式 无法避免 代理服务器发起的攻击
# 2.在服务器端 执行sql前先来一波判断
# pymysql中已经帮你做了处理 只要将参数的拼接交给pymysql来完成就能够避免攻击

 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • ORACLE 分页SQL
    这个sql的分页很简单,但是由于十分常用,且通常用于查询大量数据的情况。SELECT * FROM(        SELECT A.*,ROWNUM RN        FROM                     (SELECT * FROM TABLE_XX ) A        WHERE ROWNUM=20)  TL WHERE RN =11 
    02-07
  • 代码中批量执行Oracle SQL语句
      今天在写一个工具(winform),作用是批量的INSERT OR  UPDATE ORACLE数据库中的一个表。  执行的时候老是报错“[911] ORA-00911: invalid character”  我把SQL语句拷贝出来放到PL SQL中去执行,又是对的,因为测试时正好就一条语句,而且我生成语
    02-07
  • ORM之Dapper操作Sql Server和MySql数据库
    1.为什么选择Dapper1)轻量。2)速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。3)支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server4)可以映射一对一
    02-07
  • MySQL同步故障:" Slave_SQL_Running:No" 两种
    进入slave服务器,运行:mysql show slave status\G         .......             Relay_Log_File: localhost-relay-bin.000535              Relay_Log_Pos: 21795072      Relay_Master_Log_File: localhost-bin
    02-07
  • 获得某个月的天数(java, mysql, oracle)
    java方式:Calendar   cal   =   Calendar.getInstance();  cal.set(Calendar.YEAR,year);  cal.set(Calendar.MONTH,month+1);//2月  int   maxDate   =   cal.getActualMaximum(Calendar.DATE);mysql方式:"SELECT day(LAST_DAY(‘2007-04
    02-07
  • Python操作mysql数据库出现pymysql.err.Program
    今天在用Python操作mysql数据库出现pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check报错"SELECT Failure_code,describe from failure_occur_now order by ID DESC LIMIT 1“黄色区域为报错的位置仔细查找,发现没有语法
    02-07
  • Oracle 笔记(2) ----PL/SQL结构、注释、变量、
    1、PL/SQL块结构:DECLARE ...BEGIN......EXCEPTION........END 注意:BEGIN 和 END之间不能什么语句都没有,如果不需要语句可以写NULL2、变量命名规则:① 变量由字符开头② 可以包含字母、数字、下划线、$、# 等③ 变量长度范围:1~30④ 不区分大小
    02-07
  • Spark SQL 编程初级实践2- 编程实现利用 DataFrame 读写 MySQL 的数据
    Spark SQL 编程初级实践2- 编程实现利用 DataFr
    编程实现利用 DataFrame 读写 MySQL 的数据(1)在 MySQL 数据库中新建数据库 sparktest,再创建表 employee,包含如表 6-2 所示的两行数据。表 6-2 employee 表原有数据(2)配置 Spark 通过 JDBC 连接数据库 MySQL,编程实现利用 DataFrame 插入如表 6-3 所
    02-07
  • mysql动态执行sql批量删除数据 sqlserver批量删
     CREATE PROCEDURE `sp_delete_pushmsg_data`() BEGINdeclare l_delete_date varchar(16);declare l_state_datevarchar(16);declare l_dutynoint;declare l_row_cnt int DEFAULT 0;declare rnint default 0;declare i int default 0;set l_dutyno=101;set l_
    02-07
  • MySQL_(Java)使用preparestatement解决SQL注入的问题
    MySQL_(Java)使用preparestatement解决SQL注入
        MySQL_(Java)使用JDBC向数据库发起查询请求  传送门  MySQL_(Java)使用JDBC创建用户名和密码校验查询方法  传送门   MySQL数据库中的数据,数据库名garysql,表名garytb,数据库中存在的用户表     存在SQL注入问题   使用preparest
    02-07
点击排行