MySQL用戶管理和權限管理

MySQL用戶管理和權限管理

在項目中,一個數據庫有很多人需要使用,不能所有的人都使用相同的權限,如果人比較多,一人一個用戶也很難管理。一般來說,會分超級管理員權限,管理員權限,讀寫權限,只讀權限等,這樣方便管理。當然,具體怎麼管理權限根據實際情況來確定。

無論如何,都需要創建多個用戶來管理權限。

root 是數據庫的超級管理員用戶,對於普通開發人員來說,權限太大了,如果不小心做了一些不可逆的操作,後果是非常嚴重的,並且還不容易查出責任人。

所以 root 用戶不會讓開發人員使用,一般會由 DBA 或運維人員統一管理,也不一定非得 DBA,總之統一由超級管理員 root 來分配。

1. 查看所有用戶

MySQL 中所有的用戶及權限信息都存儲在默認數據庫 mysql 的 user 表中。

進入 mysql 數據庫,通過 desc user; 可以查看 user 表的結構。

use mysql;
desc user;

可以看到 user 中有40多個字段,字段非常多,只要關注主要字段就行了。

其中的主要字段有:

host: 允許訪問的主機地址,localhost 爲本機,% 爲任何主機。
user: 用戶名。
authentication_string: 加密後的密碼值。

使用 select * from user; 查看 user 表中當前有哪些用戶。

select host,user,authentication_string from user;

在安裝 MySQL 後,有三個默認的用戶。

2. 創建用戶

使用 create user '用戶名'@‘訪問主機’ identified by '密碼'; 創建用戶。

create user 'admin'@'localhost' identified by 'Mysql!123';

創建用戶後,查看用戶,多了剛纔創建的 admin,創建成功。

3. 查看用戶權限

使用 show grants for '用戶名'@'訪問主機'; 查看用戶的權限。

show grants for 'admin'@'localhost';

在創建數據庫的時候,沒有指定權限,默認就會賦予 USAGE 權限,這個權限很小,幾乎爲0,只有連接數據庫和查詢information_schema 的權限。雖然 *.* 表示所有數據庫的所有表,但因爲 USAGE 的限制,不能操作所有數據庫。

退出 root 用戶,登錄到 admin 用戶,只能看到 information_schema 數據庫。

4. 給用戶授權

創建 admin 用戶,目的是創建一個管理員,所以要給 admin 授權。退出 admin ,重新登錄 root 。

在授權時,常用的權限有 CREATE、ALTER、DROP、INSERT、UPDATE、DELETE、SELECT,ALL PRIVILEGES 表示所有權限。

通過 數據庫.數據表 指定對哪個數據庫的哪個表授權,*.* 表示所有數據庫中的所有表。

通過 ‘用戶名’@‘訪問主機’ 來表示用戶可以從哪些主機登錄, ‘%’ 表示可以從任何主機登錄。

使用 grant 權限 on 數據庫.數據表 to '用戶名'@'訪問主機' identified by '密碼'; 來給數據庫用戶授權。

grant all privileges on *.* to 'admin'@'localhost' identified by 'Mysql!123';

給 admin 用戶授權後,權限從 USAGE 變成了 ALL PRIVILEGES ,表示 admin 擁有了所有權限。

如果授權沒有生效,記得刷新一下權限,使權限生效。

flush privileges;

再重新登陸到 admin 用戶上,可以操作所有數據庫了。

給用戶授權的時候,必須要指定 ‘用戶名’@‘訪問主機’ 來指定用戶。如果 '訪問主機' 不相同,不是給用戶授權,而是創建一個同名同密碼的用戶,這個用戶與原用戶可以登陸的主機不相同,權限不同。

grant all privileges on *.* to 'admin'@'%' identified by 'Mysql!123';

執行上面的語句後,user 表中有兩個 admin 用戶,用戶名和密碼都一樣,但可以登陸的主機不一樣。第一次創建的 admin 訪問主機是 localhost,執行上面的語句時指定的訪問主機是 % ,訪問主機不一樣,MySQL 會創建兩個用戶。雖然用戶名密碼相同,但這是兩個不同的用戶,兩個用戶的權限不一樣。給兩個用戶指定不同的權限,在兩個用戶都有權限的主機登錄時,局部用戶的權限會覆蓋全局用戶的權限,當在 localhost 登錄時,‘admin’@‘localhost’ 的權限會覆蓋 ‘admin’@'%' 的權限。

對於可以從任何主機登錄的用戶,在查看用戶權限時,可以使用 show grants for admin; 來查看權限,指定主機的用戶在查看權限時,要跟上訪問主機才能查看權限。

5. 創建用戶並授權

使用 grant 權限 on 數據庫.數據表 to '用戶名'@'訪問主機' identified by '密碼'; 來創建一個用戶並指定權限,與上面授權使用的語句相同。

grant create,select on *.* to 'creater'@'%' identified by 'Mysql!123';

創建了一個有讀寫權限的用戶 creater,這個用戶擁有所有數據庫的 SELECT 和 CREATE 權限,可以從任何主機登錄數據庫。

6. 修改用戶的權限

使用 grant 權限 on 數據庫.數據表 to '用戶名'@'訪問主機' identified by '密碼'; 修改用戶的權限,其實前面的授權就是修改權限。

grant all privileges on *.* to 'creater'@'%' identified by 'Mysql!123';

修改用戶的權限後,creater 的權限從 SELECT 和 CREATE 權限變成了 ALL PRIVILEGES。

7. 刪除用戶

使用 drop user '用戶名'@'主機地址'; 來刪除用戶。

drop user 'admin'@'localhost';

執行刪除操作後,user 表中不再有該用戶。

8. 修改用戶名和訪問主機

使用 rename user "用戶名"@"訪問主機" to "新用戶名"@"新訪問主機"; 來修改用戶名和用戶的訪問主機。

修改之後,creater 用戶改名 create ,訪問主機從 % 變成了 localhost 。

9. 修改用戶密碼  

使用 set password for "用戶名"@"訪問主機" = password("新密碼"); 修改用戶的密碼。

上面創建的 admin 用戶和 create 用戶密碼相同,現在給 create 修改密碼,使密碼不一樣。

以上就是對數據庫用戶和權限管理的基本操作。這些操作都是對 mysql 數據庫中的 user 表進行操作,所以上面的大部分操作都還有另外一種方法,就是通過對 mysql.user 表的增刪改查語句來實現。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章