基礎指令
MySQL 是最流行的關系型資料庫管理系統,在 WEB 應用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關系資料庫管理系統)應用軟體之一。mysql資料庫通過sql來操作資料庫
mysql中的注釋符
- @
- #
- -- (杠杠空格) (注入中經常用到的)
- /* ..... */
- /*! .... */
information_schema
mysql 5.0版本之後産生了一個虛拟資料庫information_schema,在這個資料庫中有三個很重要的表:
- information_schema: 該資料表存儲了mysql資料庫中的所有資料庫的庫名
- information_schema.tables: 該資料表存儲了mysql資料庫中的所有資料表的表名
- information_schema.columns: 該資料表存儲了mysql資料庫中的所有列的列名
mysql中比較常用的一些函數:
- version(): 查詢資料庫的版本
- user(): 查詢資料庫的使用者
- database(): 資料庫
- system_user(): 系統使用者名
- session_user(): 連接配接資料庫的使用者名
- current_user: 目前使用者名
- load_file(): 讀取本地檔案
- @@datadir: 讀取資料庫路徑
- @@basedir: mysql安裝路徑
- @@version_complie_os: 檢視作業系統
- length() 傳回字元串的長度
- substring() 截取字元串
- substr() 截取字元串
- mid() 截取字元串
- left() 從左側開始取指定字元個數的字元串
- concat() 沒有分隔符的連接配接字元串
- concat_ws() 含有分割符的連接配接字元串
- group_conat() 連接配接一個組的字元串
- ord() 傳回ASCII 碼
- ascii() 傳回ASCII 碼
- hex() 将字元串轉換為十六進制
- unhex() hex 的反向操作
- md5() 傳回MD5 值
- sleep() 睡眠時間為指定的秒數
- if(true,t,f) if 判斷
sql注入中的常見函數彙總
ascii(str) : 傳回給定字元的ascii值 如 ascii("a")=97
length(str) : 傳回給定字元串的長度,如 length("string")=6
substr(string,start,length) 對于給定字元串string,從start位開始截取,截取length長度 ,如 substr("chinese",3,2)="in"
substr()、stbstring()、mid() 三個函數的用法、功能均一緻
concat(username): 将查詢到的username連在一起,預設用逗号分隔
group_concat(字段1,'*',字段2): 将字段1和字段2的資料查詢到一起,中間用*連接配接
count(table_name) 傳回表的個數
if(expr1,expr2,expr3) 如果expr1的值為true,則傳回expr2的值,如果expr1的值為false,則傳回expr3的值。
基本指令
增删改查
- show databases; 檢視有哪些資料庫
- use mysql; 進入資料庫
- show tables; 檢視資料庫中有哪些表
- select * from user; 檢視users表中的所有内容
- select host,id,name from mysql.user; 檢視表中的指定字段
- desc 表名 檢視表中的字段
條件查詢
- limit 0,1 看第一行
- select host,id,name from mysql.user limit 1; 看第一行
- select host,id,name from mysql.user limit 2: 看前二行
- select host,id,name from mysql.user limit 2,3; 第二行(不包括)往下三行
- select * from users where id=5 查找users表中id字段值等于5的那一行資料
- select * from users where id=5 limit 0,2 查找users表中id字段值等于5的那一行資料,where後面加了兩個限定參數第一個是顯示第五行第二個是顯示第一行和第二行,程式以id=5這個限定條件為先,相當于此時的limit0,2沒起作用
mysql允許遠端登入
測試環境:phpstudy2016,mysql5.5.53
mysql預設不允許使用者進行遠端登入,如下進行遠端登入顯示拒絕使用者登入。(使用者被禁止遠端登入和使用者名密碼錯誤的提示一樣,是以根據錯誤并不能判斷是否是禁止遠端登入還是密碼錯誤。并且掃描端口的狀态都為開放的狀态)
防火牆預設過濾3306端口
解決辦法如下:
1. 進入到mysql指令行中
2. 執行如下
- grant all privileges on *.* to 自己的使用者名@'%' identified by '遠端登入密碼';
- ——>
- grant all privileges on *.* to root@'%' identified by 'root';
- grant all privileges 賦予所有權限
- *.* 為資料庫名稱.表名 ,表示賦予使用者操作伺服器上所有資料庫所有表的權限
- '%' 表示從任何位址連接配接。或者可以是localhost,也可以是ip位址、機器名字、域名
3. 執行
flush privileges;
連接配接成功