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)