數據庫篇-mysql權限

數據庫4大語句相信你們也都清楚,所謂的crud,就算不了解也據說過,這也是數據庫最基礎的東西。 若是要是真是不在意性能安全什麼的基本上這四大基本草錯也能完成,可是我們在不少時候其實要考慮的更多, 比方說 **事務處理,**這個對於一些應用來講,好比錢方面的,沒這個的話基本上就廢了。 再有其中一個就是本文所講的 數據庫權限,由於不能存在整個mysql徹底對外的狀況,全部後端隨便玩這樣出了問題被老闆砍死的概率會比較大,每每這個權限方面作的會比較細,mysql對這方面支持的也比較好,好比能夠以庫爲單位,也能夠對錶爲單位,好比指定某一個用戶只能在某一個庫裏的某一個表裏進行某一種類型的操做。html

權限語句

在數據庫裏通常語句分爲兩大類 一大類是專門對數據進行操做的,也就是crud這種 一大類是管理方面的,好比說create 一個 table、database這種命令,我們說的權限也是屬於這種的mysql

  • GRANT        -    賦予權限
  • REVOKE      -    收回權限

操做權限方法

在數據庫裏操做權限實際上是有兩種方法的sql

  • 正經的方法就是上面說的GRANT和REVOKE
  • 還有就是直接改**mysql.user **

GRANT、REVOKE 操做權限

GRANT :
GRANT 權限 ON 庫.表 TO '用戶'@'主機' IDENTIFIED BY '密碼' [WITH GRANT OPTION];
複製代碼

這個權限能夠直接寫若是 要是想給所有權限的話也能夠直接給個ALL、只要你心大~       也能夠單獨給好比:SELECT,UPDATE 逗號隔開,具體名稱是啥能夠看 **'mysql.user' **裏的列 ,這裏很少贅述數據庫

後面的這個IDENTIFIED設計的也是比較有意思的,能夠存在同一個主機下的同一個用戶可是密碼不同的狀況後端

這個庫.表這個簡寫你們應該也知道好比我如今操做的是mysql,那**'mysql.user'就能夠簡寫成'user',**同樣的,若是要所有權限,那就 '.'安全

**        **服務器

**       **主機若是也想給全部的話(固然這就離出事而 不遠了),理論上能夠給個 "%",%在SQL裏是通配符,表明全部。 假設如今如今公司ip是 210.34.65.153微信

GRANT ALL ON *.* TO '用戶'@'210.34.65.153' IDENTIFIED BY '密碼';
複製代碼

那麼直接這樣寫也是同樣的,權限雖然開放,可是主機是寫死的,只要你能防得住公司本身人的狀況下。。。markdown

WITH GRANT OPTION: 這個參數是可選的,意思就是說若是不給,那這句話到這就結束了,這個用戶就是最終一級,他不能再去建子用戶了,若是給了,就表明能夠建子帳號,固然子用戶能分出去的權限僅限他本身有的權限架構

注意一點,這裏的操做只能分配給已有的帳戶,建立新帳戶須要另外的權限 而且,還得有GRANT權限,否則的話就算有這個權限可是沒有執行這個權限的權限

這裏稍微多提一句,若是你這個mysqlserver想要對外開放,不必定對客戶端,可能對本身的服務器開放,那你除了這個數據庫的權限還有一層防火牆,假設防火牆3306沒開那也是過不去的,須要兩層都過才能夠

例子:

image.png 這裏先賦予所有權限; 而後能夠用show grants 命令查看用戶權限 image.png


REVOKE:
REVOKE 權限 ON 庫.表 FROM '用戶名'@'主機';
複製代碼

REVOKE 語法層面跟GRANT差很少,也都是權限和角色若是要多個直接加,日後接就好相似:

注意⚠️

若是要撤銷所有權限的話須要用另外一種寫法,該語法將刪除命名用戶或角色的全部全局,數據庫,表,列和例程特權 這裏的 user_or_role 就是說能夠直接寫我們上邊寫的 '用戶名'@'主機',多個的話就接着後面來個,接着寫就行 置於這個role,數據庫權限固然能夠有角色,不過用法也都差很少,有興趣能夠直接去mysql官網查看刪除角色的詳細寫法  REVOKE

REVOKE ALL PRIVILEGES, GRANT OPTION
  FROM user_or_role [, user_or_role]
複製代碼

要使用此REVOKE語法,您必須具備全局CREATE USER 特權或系統架構的UPDATE 特權mysql

例子: 拿上面grants建立的用戶來講,建出來是ALL權限,查看權限是這樣的: image.png

image.png 收回SELECT INSERT UPDATE以後查看權限就會是 image.png

已經沒有SELECT INSERT UPDATE了

直接操做系統表改權限

這兩種方法固然仍是推薦用第一種,由於第二種是屬於一種野路子的方法,畢竟100次裏有1次出問題了那仍是有點風險。不過有的時候一些特殊的狀況下直接操做系統的用戶表也是有可能的,因此在這裏說一下 mysql 系統表裏的user表就是mysql本身來區分用戶的。 image.png

這裏方便查看就直接用navicat了。 這裏的權限不少、這個表裏全部的Y、N 都是權限、這裏簡單說幾個字段的意思 Host:簡單的來講這個Host就是說我這條權限對哪一個地址好使,好比說 192.168.0.3 下的 root有什麼權限,localhost也就是本地好使,外部連接都不認 User:用戶名、Host不一樣能夠重複  image.png

這一堆也就是可不能夠增刪改查 Create:建表建庫 Drop:刪除表或者刪除庫 Reload:重啓 Shutdown:關閉 等等吧。。。。

權限刷新 

有的時候操做完權限會存在不生效的狀況,好比把用戶刪除了還能登進去 能夠用

flush privileges;
複製代碼

刷新一下;

查看權限

show grants for 用戶名@主機;
複製代碼

有什麼感興趣的,或者遇到什麼問題能夠直接加我好友,我們一塊兒溝通

微信:Dyy916829411 qq: 916829411

相關文章
相關標籤/搜索