用戶與許可權(節選自《MySQL數據分析實戰》講義)

大家好,我是jacky,很高興繼續跟大家學習MySQL數據分析實戰,本節課的主題是用戶管理和許可權管理;

在分享之前,jacky在不厭其煩的強調一下:學習任何一門學科和技能,最重要的是捋清邏輯,我們要知道,一個知識點的出現,一定是有它現實意義的,一定是解決了當前工作的生活中的某項痛點,所以它才會出現,所以我們才要去研究它,應用它;

(一)邏輯梳理

好,那麼回歸我們這次課分享的主題:用戶管理和許可權管理;什麼意思呢?顧名思義,用戶管理就是通過SQL語句管理我們MySQL這個軟體的用戶,好,那麼許可權管理就是通過SQL語句管理我們當前MySQL用戶中增刪改查的許可權;可能有朋友會問了,說jacky你說的也太直白了嗎?我好像記得書本中和其他資料課程把它叫做資料庫控制語言DCL;的確是這樣,但是如果我把今天的主題換為資料庫控制語言,這樣跟朋友們講,然後在把相應的SQL語句羅列出來,大家會聽的懂嗎?資料庫控制語言出現的背景是什麼呢,它的企業應用意義是什麼呢?大家都會是一頭霧水,所以有的資料說MySQL的邏輯性不強,我是及其不認同的;

那麼我們這次課,就是要回到下面2個問題:

1.用戶管理和許可權管理的出現的背景是什麼?

2.如何編寫用戶管理和許可權管理的SQl語句來解決實際問題?

(二)用戶管理和許可權管理

  • 關於用戶管理和許可權管理的出現背景,也就是為什麼MySQL要有用戶管理和許可權管理這種機制,我們先看下邏輯導圖:

2.1 背景

關於用戶管理和許可權管理被MySQL這款產品設計出來的背景,我們還是拿前面手機銷售公司舉例,學習了資料庫設計,我們也模擬創建了手機銷售公司的資料庫,jacky說資料庫是一套共享系統,正因為共享,在實際業務中我們才能提高數據管理效率,是吧!

但任何事情都有兩面性是吧,有好的一面,一定有壞的一面,也是由於我們的資料庫是共享的,這也就意味這可能一些心懷不軌的人會串改資料庫數據,導致整個資料庫系統的混亂,那麼我們有什麼辦法,避免這件事的發生呢?或者說如何提高資料庫的安全性呢?

大家思考一下,怎樣才能提高資料庫的安全性呢?我們說提高安全性的途徑有兩個,第一個是控制能訪問資料庫的人,也就是不是不是隨便的任何人都能操作和訪問資料庫的;第二個措施途徑是控制使用資料庫人的許可權,也就是說我即使讓你使用了資料庫,我也要限制你使用的許可權,比如說我限制你只能是可讀的,你就不能編輯資料庫了,以上兩點就控制住初步控制住資料庫的安全性了,那麼第一個措施就是我們說的用戶管理,第二個措施就是許可權管理,那具體在MySQL中我們是如何實現的呢?就是通過SQL語句設定用戶管理和許可權管理,下面jacky分別講解:

2.2 用戶管理的SQL實現

大家還記得我們前面是怎麼樣連接mysql客戶端的吧,我們輸入的指令是不是mysql -u root -p,是吧;這個root就是我們當前系統的用戶名,這個root用戶擁有對整個MySQL伺服器完全控制的許可權,所以為了避免別有用心的人惡意破壞資料庫,我們在實際工作中,要儘可能的不用或者少用root賬號登陸系統,這時,我們就要創建不同用戶賬號,jacky給大家總結了用SQL語句實現用戶管理的2大步驟(如下)

2.2.1 步驟一:查看當前資料庫系統現有用戶

在我們創建用戶之前呢,我們第一步要先查看當前資料庫系統的現有用戶,這一步的意義是:當我們創建完用戶之後,接下來才可以檢驗我們是否把用戶成功的創建在我們的資料庫中,那麼如何查看當前資料庫系統下有多少用戶呢?

show databases;

  • 在root 用戶當前的資料庫庫下,有一個mysql表;

use mysql;show tables;

  • 我們看到mysql表的最下面有一個user表,user表的數據量是比較大,如果查詢user表的全部數據,在我們直觀的視覺上是比較難區分的(select * from user;),那麼我們看下user表一共有多少列

desc user;

我們接下來,只選擇host 和user列,我們查詢下;

select host,user from user;

  • host列表示我們用的是哪台機器登陸,user表示的是我們用的哪個用戶名;
    • 對於host 列來說,127.0.0.1,::1和localhost都是本地的意思,它們是一樣的,127.0.0.1是ip,localhost是域名,::1是縮寫;

好,通過上面我們就知道了,我們我們當前的用戶名都有什麼,以及它通過哪台機器登陸的,知道了我們用戶名的位置,接下來我們就能給我們資料庫創建用戶了;

2.2.2 步驟二:創建用戶

  • 初學者創建用戶容易陷入的誤區
    • 在前面我們在SQL熱身中,我們記不記得我們如何給表中插入數據

insert into 表名(nid,name,pwd) values(1,jacky,123)

那大家思考一下,我們能不能按照上面得方法給user表創建一個用戶?答案是可以的,我們在後面課程SQL基礎操作里,會給大家總結,上述語句是給表中插入數據的的通用方法,所以用insert into 表名(… …) values(… ..)是完全沒問題的,但是,但是,user這張表至關重要,如果我們插入錯誤,我們user表就登陸不上去了,如果插入錯誤,會對MySQL軟體造成嚴重影響;

所以對於這種特殊的表,jacky不推薦用上面的命令,我們聰明的開發人員為創建用戶的這張特殊的表指定了特定的命令

  • 用戶管理的特定命令,我們說下面的SQL語句對於表來說,不是普遍使用的,只是針對用戶管理這個特殊的操作定製的,是特定的;
    • 所以,jacky說下面的用戶的增、刪、改的SQL語句,大家不用記,因為它不是普遍使用的,大家在具體工作環境中,找到自己的筆記,拿來直接用就可以,這就是jacky在本系統課程開篇說的,學習知識的時候,要知道學什麼,不學什麼,記住什麼,不記住什麼,下面jacky給大家演示一下,這樣有助於大家的理解

--新建用戶(增) create user 用戶名@IP地址 identified by 密碼;--刪除用戶(刪) drop user 用戶名@IP地址;--修改用戶(改) rename user 用戶名@IP地址 to 新用戶名@IP地址;--修改密碼(改) set password for 用戶名@IP地址= Password(新密碼);

2.3 許可權管理的SQL實現

  • 上面我們創建新用戶的時候,默認新創建的用戶什麼許可權都沒有;

--查看許可權show grants for 用戶@IP地址--授權grant 許可權 on 資料庫.表 to 用戶@IP地址--取消許可權revoke 許可權 on 資料庫.表 from 用戶@IP地址

  • 關於上面許可權替換
    • select 只能查
  • 關於資料庫.表替換
    • 資料庫.* 這個資料庫里所有的表
    • *.* 所有的庫所有的表

最後jacky總結一下:對於一個數據分析師來說,資料庫的用戶管理和許可權管理的SQL代碼,大家理解就好,用的時候,能快速查閱資料運用就可以的,但對於資料庫管理員也就是DBA來說,jacky說的這部分知識是重中之重,大家要熟練掌握,好,這就是這此課我們要說的內容,我們下次課見!

推薦閱讀:

誰有精簡的SQLSerVer安裝包,聽說有一種只有28M?
SQL 查詢按照家庭住址進行分組時,組內平均年齡小於50歲的組中成員的姓名和年齡?
請教一個SQL,詳情請看問題補充?
OCP-1Z0-051 第十題
沒有任何基礎的人怎麼學SQL?

TAG:MySQL | 數據分析 | SQL |