前兩天專案資料庫要移植到mysql,為此臨時抓了幾天很久沒用的mysql。
公司的資料庫比較簡單,從oracle遷移到mysql很簡單,但是,中間的許可權管理讓我感覺既簡單又複雜。。簡單是因為網上關於mysql使用者,許可權管理的帖子很多,
按照上面的做,基本上能解決遇到的問題。複雜是因為如果考慮的特殊的場景,許可權管理會讓很多新手蛋疼的不要不要的。
mysql許可權的基礎我在這裡就不講了,大家一艘一大把,我這裡主要就我的理解在前人基礎上做一些解讀。公司用的是mysql5.5,所以我的解讀僅限於這個版本。其他版本大家自行實驗。
1. %和localhost
grant all on *.* to watf@'%';
grant all on *.* to watf@'localhost';
按照我開始的理解,%是代表所有的主機;localhost本地主機,也就是安裝mysql的主機。but,這個理解是有問題的。
用第一種授權方式並沒有獲得本地主機的許可權。所以localhost並不是%的子集, 遠端主機和本地主機請分別授權。
2. grant all on *. * to dbtest@'localhost' identified by 'dbtest';
解釋:已有dbtest使用者,這是在授權兼改密碼 ,沒有dbtest的情況下是建立帶密碼使用者兼授權。所以還可以用grant命令建使用者,改密碼,尼瑪又多了一項技能有沒有。看見不少人授權時用的帶密碼的方式,我懷疑他們認為這個密碼僅僅是用來驗證的。假如這個密碼輸的和原來的不一致,尼瑪後面登入不了恐怕他也不知道咋回事。
3. set password for root=password('root') 是否等同於 update mysql.user set password=password('root') where user='root';
看到不少帖子認為這兩種改密碼的方式是相同的。我想說no,
set password for root=password('root') 等同於 set password for root@'%'=password('root') ,
所以同樣應該等同於 update mysql.user set password=password('root') where user='root'and host='%';如果root分別設定了'localhost'和'%'的密碼,用第一種改密碼方式只會修改遠端登入root使用者的密碼,第二種方式遠端和本地登入root使用者的密碼都會修改。
另外,第一種是系統定義的修改密碼的方式,可能會牽扯到多張表或者其他操作,而第二種只是修改了使用者表而已,除非有明確的官方說明,修改密碼只需要修改使用者表,和其他表無關,沒有其他多餘操作,否則,我真的不建議用第二種方式。
4. drop user aaa;
你以為這個會讓aaa使用者不能登入麼?錯,實際上這個只能讓遠端使用者就不能登入,本地使用者(如果有的話),照登不誤。
原因其實和第乙個問題一樣,還是%和localhost的區別,因為drop user aaa; 等同於drop user aaa@'%';
另外,有人說可以用delete from mysql.user where user='aaa';這樣做確實會讓使用者不能登入,可以簡單的認為刪除了使用者,但是實際上使用者的許可權,資料庫 都沒有刪除,這樣只是自欺欺人。
MySQL使用者許可權管理
網際網路文件整理 mysql的使用者管理,指的是哪個使用者可以連線伺服器,從 連線,連線後能做什麼.mysql中grant語句建立mysql使用者並指定其許可權,而revoke語句刪除許可權。兩條語句實現了mysql資料庫的使用者管理,並提供與直接操作這些表的內容不同的另一種方法。create和re...
mysql 使用者許可權管理
mysql 中顯示所有使用者 select distinct concat user user,host,as query from mysql.user 檢視乙個使用者的許可權 show grants for company 為使用者授權 grant select on b2b search.to...
MySQL使用者許可權管理
使用者許可權管理主要有以下作用 1.可以限制使用者訪問哪些庫 哪些表 2.可以限制使用者對哪些表執行select create delete delete alter等操作 3.可以限制使用者登入的ip或網域名稱 4.可以限制使用者自己的許可權是否可以授權給別的使用者 mysql grant all...