欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解MySQL中的存取權(quán)限

 更新時間:2015年07月07日 11:53:25   投稿:goldensun  
這篇文章主要介紹了詳解MySQL中的存取權(quán)限,針對用戶使用數(shù)據(jù)庫權(quán)限分配的問題做出說明,需要的朋友可以參考下

看到很多網(wǎng)友提出關(guān)于MySQL登錄不上服務(wù)器的問題,包括有的是在PHP中調(diào)用MySQL時發(fā)生的不能登錄MySQL數(shù)據(jù)庫服務(wù)器的問題,以為是PHP出了問題。其實是MySQL權(quán)限的問題。

  MySQL的權(quán)限系統(tǒng)在MySQL的手冊中是很長的一章,我把它打印出來足足印了20多頁!這里就將我對它的理解簡要地寫出來,希望能對剛剛接觸MySQL的同志有點幫助;有說得不對的地方,也請同志們指出。

  在我了解了MySQL的權(quán)限機制后,不由得不贊嘆它的嚴密與巧妙;也許所有的數(shù)據(jù)庫系統(tǒng)都是如此罷,只是別的大型數(shù)據(jù)庫把權(quán)限做得不需超級管理員親自干預(yù)數(shù)據(jù)表而已。

  MySQL的權(quán)限保存在名為mysql的數(shù)據(jù)庫中,有user、db、host、tables_priv、columns_priv 等五個表。

  首先,限制用戶的登錄的,只有 user 表,其中最常用的是 user、host、password這三個字段。其他的select_priv、update_priv、…… 這些字段分別表示該用戶是否有select、update、……等權(quán)限,這些字段設(shè)置為'Y'表示該用戶擁有對應(yīng)的權(quán)限,'N'表示用戶沒有對應(yīng)的權(quán)限。注意,這里指定的權(quán)限是全局的,一旦你在user表中給了一個用戶select或update權(quán)限,他就對這臺服務(wù)器上任何數(shù)據(jù)庫、任何表擁有上述權(quán)限!其中當(dāng)然包括mysql數(shù)據(jù)庫?。∵@意味著他可以通過更改user表里的數(shù)據(jù)非法地獲取更大的權(quán)限?。?!這是非??膳碌模越ㄗh除了給root用戶外,不要在user表中分配權(quán)限。特別的,你可以建立一個幾乎跟root擁有同樣權(quán)限的用戶(密碼可不要告訴別人喲?。┰谕浟藃oot密碼時就用得到了。在添加一個用戶時,如果不指定權(quán)限字段的值,它們的默認值都是'N',——也就是這個用戶什么權(quán)限也沒有——你可以放心的在user表中添加用戶,因為即使他能登錄進來,卻什么也干不了。

  還有一個應(yīng)該注意的問題就是user表中的password字段。試想,既然root用戶可以瀏覽mysql數(shù)據(jù)庫,可以看到user表的password字段,是不是就是看到了其他用戶的密碼呢?不是的!user表的password字段保存的是用password()函數(shù)加密了的用戶密碼,當(dāng)用戶登錄時,服務(wù)器將收到的用戶輸入的密碼用password()函數(shù)加密,加密得到的字串與user表password字段如能匹配,則認為密碼正確。password()沒有逆運算,所以任何人無法從一個加密的字串得到密碼的明文。同時,如果你手工修改user表,別忘了在更新password字段時一定要用password()函數(shù)加密。例如,你要允許一位名為 bill 的用戶登錄你的服務(wù)器,你給他設(shè)定一個 12345 的密碼,則應(yīng)該:

insert into user (user,host,password) values ('bill','%',password('12345'));

如果你直接

insert into user (user,host,password) values ('bill','%','12345');

的話,恐怕他登不上你的服務(wù)器,也會到奧索網(wǎng)上發(fā)帖子問的。

  注意,每當(dāng)手工操作了跟權(quán)限有關(guān)的數(shù)據(jù)表以后,要執(zhí)行一條 flush privileges 命令才能使其生效。

  下面的問題就是如何給用戶分配權(quán)限了。如果你要給一個用戶開一個數(shù)據(jù)庫,并把有關(guān)這個數(shù)據(jù)庫的所有或部分權(quán)限開放給他,這就用到了db表。db表的意義在于,當(dāng)一個用戶請求一個查詢時,檢測該用戶對于他的查詢所針對的數(shù)據(jù)庫是否擁有進行該查詢操作的權(quán)限,有,則允許查詢;沒有,則進一步咨詢tables_priv表。db表的最常用字段是 user、db、和那一大堆有關(guān)權(quán)限的字段。user,不用說了,就是那個用戶的用戶名,跟user表中的對應(yīng);db,就是要分給他的數(shù)據(jù)庫名。然后就把要給他的權(quán)限相對應(yīng)的權(quán)限字段設(shè)為'Y'。同樣,這些字段的值在不指定的時候默認是'N'。你也可以用GRANT/REVOKE命令給用戶分配權(quán)限,可以是這樣的:

grant select,update,insert,delete,creater,alter,drop,index on bill.* to bill;

  這樣就把針對bill這個數(shù)據(jù)庫的幾乎所有的權(quán)限給了用戶bill。這里沒有給的只是grant權(quán)限,關(guān)于這個權(quán)限,建議不要輕易給人,因為用戶有了grant權(quán)限,也就可以將權(quán)限分配給其他用戶。值得慶幸的是,擁有g(shù)rant權(quán)限的用戶能而且只能將他自己已經(jīng)擁有的權(quán)限分配給別人。

  使用GRANT/REVOKE命令更改了權(quán)限后,不須執(zhí)行 flush privileges 命令就可以使更改生效。

  上面討論的是給一個用戶完全開放一個數(shù)據(jù)庫的問題,如果只想給一個用戶一個特定的表的權(quán)限,就是 tables_priv 表發(fā)揮作用的時候啦。這里的關(guān)鍵性字段是user、db、table_name 。顯而易見的,要給一個用戶指定一個特定的數(shù)據(jù)庫中特定表的權(quán)限,三個關(guān)鍵要素就是:哪個用戶(user)、哪個數(shù)據(jù)庫(db)、哪個表(table_name)。它的機理跟db表是類似的,我不必再重復(fù)。唯一不同的是這里用了一個SET類型的字段 table_priv 來指定用戶對這個表權(quán)限,SET的成員有 SELECT, UPDATE, INSERT, DELETE, ALTER, CREATE, DROP, GRANT, INDEX, REFERENCE 等,你可以選擇其中任意一個或幾個分配給用戶。

  在上述提及的幾個權(quán)限表中以及未提及的host表中,都有一個host字段,它用來區(qū)分來自不同主機的、用戶名可能相同的人,或者是給同一個用戶從不同的主機連接時給予不同的權(quán)限。這種用法不很常用,但為了安全起見,建議root用戶,如果不需要從遠程連接,請將他的host設(shè)為 localhost,其他的則可以設(shè)為 % ,即任何主機。

相關(guān)文章

  • 深入解析mysql中order by與group by的順序問題

    深入解析mysql中order by與group by的順序問題

    本篇文章是對mysql中order by與group by的順序問題進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL order by性能優(yōu)化方法實例

    MySQL order by性能優(yōu)化方法實例

    這篇文章主要介紹了MySQL order by性能優(yōu)化方法實例,本文講解了MySQL中order by的原理和優(yōu)化order by的三種方法,需要的朋友可以參考下
    2015-05-05
  • 淺談MYSQL主鍵約束和唯一約束的區(qū)別

    淺談MYSQL主鍵約束和唯一約束的區(qū)別

    本文主要介紹了MYSQL主鍵約束和唯一約束的區(qū)別,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • MySQL 如何設(shè)計統(tǒng)計數(shù)據(jù)表

    MySQL 如何設(shè)計統(tǒng)計數(shù)據(jù)表

    有些時候,改進數(shù)據(jù)表查詢性能的最佳方式是在同一張數(shù)據(jù)表中冗余一些繼承的數(shù)據(jù)。然而,有些時候需要新建完全獨立的統(tǒng)計或緩存數(shù)據(jù)表,尤其是在需要反復(fù)查詢的需求情況下。如果業(yè)務(wù)允許一些時間上的誤差的話,那么這種方式會更好。
    2021-06-06
  • 深度解析MySQL 5.7之臨時表空間

    深度解析MySQL 5.7之臨時表空間

    盡管臨時表在實際在線場景中很少會去顯式使用,但在某些運維場景還是需要到的,在MySQL5.7中,專門針對臨時表做了些優(yōu)化,下面這篇文章我們來一起深入的解析MySQL 5.7之臨時表空間,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • MySQL報錯Lost connection to MySQL server during query的解決方案

    MySQL報錯Lost connection to MySQL server&n

    在確保網(wǎng)絡(luò)沒有問題的情況下,服務(wù)器正常運行一段時間后,數(shù)據(jù)庫拋出了異常"Lost connection to MySQL server during query",本文將給大家介紹MySQL報錯Lost connection to MySQL server during query的解決方案,需要的朋友可以參考下
    2024-01-01
  • Mysql添加用戶和設(shè)置權(quán)限的操作方法

    Mysql添加用戶和設(shè)置權(quán)限的操作方法

    這篇文章主要介紹了Mysql添加用戶和設(shè)置權(quán)限的操作方法,主要包括管理用戶,權(quán)限控制的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Windows下使用Cygwin編譯MySQL客戶端

    Windows下使用Cygwin編譯MySQL客戶端

    這篇文章主要介紹了Windows下使用Cygwin編譯MySQL客戶端,本文詳細的講解了編譯過程,需要的朋友可以參考下
    2015-04-04
  • Mysql數(shù)據(jù)庫的主從同步配置

    Mysql數(shù)據(jù)庫的主從同步配置

    這篇文章主要介紹了Mysql主從同步配置的相關(guān)資料,需要的朋友可以參考下文內(nèi)容
    2021-08-08
  • 使用canal監(jiān)控mysql數(shù)據(jù)庫實現(xiàn)elasticsearch索引實時更新問題

    使用canal監(jiān)控mysql數(shù)據(jù)庫實現(xiàn)elasticsearch索引實時更新問題

    這篇文章主要介紹了使用canal監(jiān)控mysql數(shù)據(jù)庫實現(xiàn)elasticsearch索引實時更新,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03

最新評論