pymysql

1.mysql用户管理  mysql

    数据安全很是重要  不可能随便分配root帐户sql

    应该按照不一样开发岗位分配不一样的帐户和权限数据库

 

    mysql中 将于用户相关的数据放在mysql库安全

    user - > db - > tables_priv -> columns_priv服务器

    若是用户拥有对全部库的访问权 则存储在 user中框架

    若是用户拥有对部分库的使用权          dbide

    若是用户拥有对部分表的使用权          tables;fetch

    若是用户拥有对表中某些字段的使用权    columns_priv中代理

 

   

Mysql中建立新帐户对象

    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这个用户  并容许jack在任意一台电脑登陆

    grant all on  day45.* to "jack"@"%" identified by  "123";

    授予day45数据库的emp表的全部权限给rose这个用户  并容许rose在任意一台电脑登陆

    grant all on  day45.emp to "rose"@"%" identified by  "123";

    授予day45数据库的emp表的name字段的查询权限给maria这个用户  并容许maria在任意一台电脑登陆

    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;

 

2.pymysql

后期开发中都是用框架代替pymysql

 

import pymysql

 

conn = pymysql.connect(

    host="127.0.0.1",

    port=3306,

    user="root",

    password="root",

    database="day26",

    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)

 

sql注入攻击 :’—随便写  或者是or 1 – 随便写

 

 什么是sql注入攻击 一些了解sql语法的攻击者  能够经过一些特殊符号 来修改 sql执行逻辑 达到绕过验证的效果

避免的方式 1.在输入时加上正则判断 不容许输入与sql相关的关键字 这种方式 没法避免 代理服务器发起的攻击

2.在服务器端 执行sql前先来一波判断

pymysql中已经帮你作了处理  只要将参数的拼接交给pymysql来完成就可以避免攻击

cursor.execute() 在括号内拼接

pymysql 不会自动提交 对数据的修改不会持久化 须要手动commit

例子:

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)

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息