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)