1、mysql的權限是,從某處來的用戶對某對象的權限。
專注于為中小企業提供成都做網站、網站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業岳陽縣免費做網站提供優質的服務。我們立足成都,凝聚了一批互聯網行業人才,有力地推動了上千家企業的穩健成長,幫助中小企業通過網站建設實現規模擴充和轉變。
2、mysql的權限采用白名單策略,指定用戶能做什么,沒有指定的都不能做。
3、權限校驗分成兩個步驟:
a、能不能連接,檢查從哪里來,用戶名和密碼,常見錯誤 ERROR 1045 (28000): Access denied for user ...
b、能不能執行操作,粒度從粗到細,分別為:mysql.user, mysql.db, msql.tables_priv, mysql.columns_priv, mysql.proc_priv。
需要注意的是,這些表各有分工,但是在權限分配上有一定的重合。
可以這樣理解,mysql 先檢查對大范圍是否有權限,如果沒有再到小范圍里去檢查。比如:先檢查對這個數據庫是否有select權限,如果有,就允許執行。如果沒有,再檢查對表是否有select權限,一直到最細粒度,也沒有權限,就拒絕執行。舉例來說:要檢查張三能否控制一個團,我只要先檢查張三能否控制一個軍,如果可以,就是有權限,如果不行,再檢查張三能否控制一個師。因此,粒度控制越細,權限校驗的步驟越多,性能越差,需要考慮。
4、mysql服務啟動之后,就會把權限有關的表的數據讀到內存中,對權限做的修改,是否會即時生效?要看情況,手動修改表數據,需要 flush privileges
5、創建用戶 create user,修改密碼 set password,注意 alter user只是設置密碼過期,可以登錄,但是不能執行任何操作,必須從新設置密碼,刪除用戶 drop user
6、host+user 標示唯一的一個用戶,也就是說都叫張三,從不同地方來的張三是兩個用戶,他們有不同的權限。
7、那么問題來了,表中有兩條記錄:'root'@'192.168.1.101' 和 'root'@'%', 現在root來登錄,mysql 怎么匹配呢?認為是哪個root呢?
mysql 對用戶進行了排序,先對host排序,再對user排序,小范圍在前面,大范圍在后面,從上往下匹配。
8、權限授予,grant 權限 on 對象 to 用戶@哪里來 identified by 密碼
9、收回權限,revoke 權限 on 對象 from 用戶@哪里來,注意revoke 必須要與grant 對應,也就是說,只能收回授予的權限。
10、那么問題來了,我授予張三 select的權限,現在revoke all privileges 也不能收回張三select的權限,因為沒有對張三 grant all privileges,怎么解決這個問題?
使用 revoke all privileges,grant option from user
11、權限級別:從某臺主機來的某個用戶,對某個數據庫中某個表的某些列的某部分記錄,是否有權限。
12、全局:對象是mysql服務的所有數據庫,包含服務級的管理權限,比如showdown
13、數據庫:對象是某一個數據庫
14、表:對象是數據庫中某個表
15、列:對象是表中的某個列,比如:grant select (name) on xxx to xxx
16、程序:對象是存儲過程和方法。
17、information_scheme,數據庫和表是存放數據的,那么誰來存放 數據庫和表這些信息呢? information_scheme 就是記錄數據庫和表的,需要注意的是,infromation_scheme沒有對應的物理文件,它是mysql在內存中維護的。
18、權限設定原則:
a、盡量縮小權限
b、按業務,分離用戶,不同的業務對應不同的用戶
c、避免權限粒度太細,因為mysql權限檢查,會影響性能。
19、文件泄密,linux下mysql客戶端執行的操作記錄在文件 ~/.mysql_history中,輸出重定向/dev/null
20、密碼丟失怎么辦?
a、mysql啟動,增加選項重置密碼
b、mysql啟動,增加選項不檢查權限,登陸后修改密碼,退出重啟啟動。
Mysql安裝完成后,便有一個最高權限用戶,用戶名是root。另外,也可以使用CREATE USER命令新建用戶,然后用GRANT命令賦予其所有權限。此時,這個新建的用戶具有與root相同的權限。不知道,你問的是不是這個。
打開mysql命令行。鍵入以下命令后回車。
1、繼續鍵入以下命令后回車。
2、然后重新登錄mysql即可。
當權限1,權限2
mysql grant 權限1,權限2,…權限n on 名稱.表名稱 to 用戶名@用戶地址 identified by ‘連接口令’;
權限1,權限2,…權限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14個權限。
當權限1,權限2,…權限n被all privileges或者all代替,表示賦予用戶全部權限。
當數據庫名稱.表名稱被*.*代替,表示賦予用戶操作服務器上所有數據庫所有表的權限。
用戶地址可以是localhost,也可以是ip地址、機器名字、域名。也可以用’%表示從任何地址連接。
‘連接口令’不能為空,否則創建失敗。
增加一個用戶test1 密碼為abc,讓他可以在任何主機上登錄,并對所有數據庫有查詢、插入、修改、刪除的權限。
首先用以root 用戶連入MySQL,然后鍵入以下命令:
mysqlgrant select,insert,update,
delete on *.* to test2@localhost identified by \"abc\";
grant命令:
創建一個可以從任何地方連接服務器的一個完全的超級用戶,但是必須使用一個口令something 做這個:
mysql grant all privileges on *.* to user@localhost identified
by ’something’ with GRANT OPTION;
語法:
1.grant 權限 on 數據庫.數據表 to '用戶' @ '主機名';
例:給 xiaogang 分配所有的權限
grant all on *.* to 'xiaogang'@'%';
這個時候 xiaogang 就擁有了 所有權限了
3 如何更精準的控制用戶的權限呢?
1.grant 權限 on 數據庫.數據表 to '用戶' @ '主機名';
例:讓 xiaogang 有查詢 tmp 數據庫 tmp1 表的權限;
grant select on temp.temp1 to 'xiaogang'@'%'; //這個時候 xiaogang 就具有查詢temp小的temp1的權限了。
例如:
mysqlgrant select,insert,update,delete,create,drop on vtdc.employee to joe@10.163.225.87 identified by ‘123′;
給來自10.163.225.87的用戶joe分配可對數據庫vtdc的employee表進行select,insert,update,delete,create,drop等操作的權限,并設定口令為123。
mysqlgrant all privileges on vtdc.* to joe@10.163.225.87 identified by ‘123′;
給來自10.163.225.87的用戶joe分配可對數據庫vtdc所有表進行所有操作的權限,并設定口令為123。
mysqlgrant all privileges on *.* to joe@10.163.225.87 identified by ‘123′;
給來自10.163.225.87的用戶joe分配可對所有數據庫的所有表進行所有操作的權限,并設定口令為123。
mysqlgrant all privileges on *.* to joe@localhost identified by ‘123′;
給本機用戶joe分配可對所有數據庫的所有表進行所有操作的權限,并設定口令為123。
本文名稱:mysql高權限怎么使用 mysql擁有最高權限的超級用戶
瀏覽地址:http://m.kartarina.com/article28/hjgocp.html
成都網站建設公司_創新互聯,為您提供用戶體驗、微信小程序、品牌網站制作、做網站、域名注冊、網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯