標籤:blog http os sp 資料 2014 問題 log bs
一個使用者可以不登入進Mysql 資料庫,由兩方面的因數決定
1、你是誰:也就是mysql 資料庫中記錄的使用者名稱和密碼,在SQL Server資料庫,中只要求說明你是誰就可以登入了,可是mysql 不是這樣的它還要看第二條
2、出生:你是京城皇宮裡的張三,還是山溝溝裡的張三,在mysql 看來你是兩個不同的人。
mysql 把這些重要訊息記錄在mysql.user 表中 (User,Password)-->你是誰 (Host)-->你是那裡人(出生地)
發現沒有光是root 就有4 個哦。
-------------------------------------------------------------------------------------------------------------------------
我們最終的目的不只是為了串連上mysql 資料庫更是為了可以對裡面的資料進行操作。面要進行操作我們首先要取得相應的許可權!使用者的許可權記錄在如下幾張表中
1 mysql.user 它記錄了使用者的全域許可權這個也是最大粒度的許可權,這樣說了也說不明白,還是來個例子
root 使用者的Select_Priv 為Y 說明它可以查詢 mysql 任何一個資料庫中的任何對象。這麼強大的許可權如果我只是想把使用者的許可權控制在某一個資料庫中呢!
這個粒度的許可權就與mysql.db表對應
2 mysql.db 它記錄了哪個使用者對哪個資料庫有哪些許可權,還是老樣子直接上例子
看見沒有User 列沒有記錄root 使用者哦!那麼問題就來了,為毛root 可以查詢任何資料庫中的表呢?這個裡因為記錄再了mysql.user表裡面,在mysql.user 表中的
Select_Priv = Y 是針對所有資料庫的,也就是說當root 運行一查詢時,首先去看一下mysql.user 看有沒有運行這一查詢的許可權,如果有就執行,如果沒有就去 mysq.db 表中看一下有沒有這個許可權。看到了沒有許可權的粒度每小一級就會多一次判斷!這可以會影響效能。
3 mysql.tables_priv 上面說了這麼多我想這個就不用多說了,看名字就知道了它是表一級的控制。
4 mysql.columns_priv 列層級的粒度控制
5 mysql.proc_priv 預存程序與函數層級的粒度控制
MySQL 使用者登入與操作執行