Python-mysql 權限 pymysql 注入共計

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+?鍵

相關文章
相關標籤/搜索