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)

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息