[MySQL資料庫]賬戶及權限管理

[MySQL]賬戶及權限管理

 

MySQL初始賬戶管理

 

MySQL的初始賬戶如下:

[sql] 
[root@lx16 ~]# mysql -u root  
mysql> select host,user,password from mysql.user;  
+-----------+------+----------+  
| host      | user | password |  
+-----------+------+----------+  
| lx16      | root |          |  
| 127.0.0.1 | root |          |  
| ::1       | root |          |  
| localhost |      |          |  
| lx16      |      |          |  
| localhost | root |          |  
+-----------+------+----------+  

 

MySQL有兩類初始用戶:

root超級賬戶:擁有全部的權限,可以做任何事。

匿名賬戶:如何人都可以通過它連接伺服器,但它權限很小。

在默認情況下,這些賬戶都沒有口令,因此為瞭安全起見,我們首先必須得為所有的root賬戶設置密碼。

設置密碼的第一種方法是用SET PASSWORD語句,假如我們現在要給'root'@'localhost'設置口令,隻要執行:

[sql] 
mysql> set password for 'root'@'localhost'=password('*****');  

 

 

設置密碼的第二種方法是直接update user權限表,這種方法的好處是可以同時給多個賬戶設置密碼,如下面的語句可以一次修改所有root賬戶的密碼:

[sql] 
mysql> update mysql.user set password=password('***') where user='root';  
mysql> flush privileges;  

 

如果用update方式修改,必須明確告訴伺服器重新加載權限表(flush privileges)

 

對於匿名賬戶,強烈建議將他們刪除,刪除語句如下:

[sql] 
mysql> drop user ''@'localhost';  
mysql> drop user ''@'lx16'; 

 

執行完以上操作之後,user權限表裡的數據如下:

[sql] 
mysql> select host,user,password from mysql.user;  
+-----------+------+-------------------------------------------+  
| host      | user | password                                  |  
+-----------+------+-------------------------------------------+  
| lx16      | root | *578EC7851088AC1F2A67B100540344B03BD2BA99 |  
| 127.0.0.1 | root | *578EC7851088AC1F2A67B100540344B03BD2BA99 |  
| ::1       | root | *578EC7851088AC1F2A67B100540344B03BD2BA99 |  
| localhost | root | *578EC7851088AC1F2A67B100540344B03BD2BA99 |  
+-----------+------+-------------------------------------------+  

 

 

創建新賬戶

 

MySQL不僅要求你必須值得誰(user_name)能連接,還必須指定從什麼地方連接(host_name),也就是說即便兩個賬戶擁有相同的名字,如果他們將從不同客戶端連接,你也要為它們各自創建一個賬戶。

可以利用以下兩個通配符靈活配置主機名的限制:

‘%’ – 匹配任何多個字符

‘-’ – 配置一個字符

[sql] 
test賬戶可以從任意IP連接  
create user 'test'@'%' identified by '***';  
test賬戶隻能從本地連接  
create user 'test'@'localhost' identified by '***';  
test賬戶隻能從'192.168.2.%'網段連接  
create user 'test'@'192.168.2.%' identified by '***';  
還可以使用IP掩碼  
create user 'test'@'192.168.2.2  

 

 

權限管理

 

對賬戶授權需要使用Grant語句,如果賬戶已存在,Grant語句給它授權,如果賬戶不存在,Grant語句先創建它,再給它授權。

可以通過show grants語句獲得自己的權限:

[sql] 
mysql> show grants;  
+----------------------------------------------------------------------------------------------------------------------------------------+  
| Grants for root@localhost                                                                                                              |  
+----------------------------------------------------------------------------------------------------------------------------------------+  
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*578EC7851088AC1F2A67B100540344B03BD2BA99' WITH GRANT OPTION |  
+----------------------------------------------------------------------------------------------------------------------------------------+  

 

也可以通過show grants for 獲得其它用戶的權限:

[sql] 
mysql>show grants for ''@'localhost';  
+--------------------------------------+  
| Grants for @localhost                |  
+--------------------------------------+  
| GRANT USAGE ON *.* TO ''@'localhost' |  
+--------------------------------------+  

 

 

上面顯示的是兩種特殊權限,一種是ALL(後面的PRIVILEGES關鍵字可省略),表示所有操作的權限(但不包括Grant權限,Grant權限由with grant option賦予);另一種是USAGE,一種特殊的“無權限”的權限。

 

在某些少數情況下,我們可能需要更細致的權限控制,MySQL可以做到在列上進行授權,下面這條語句表示把全表的select權限給test,但隻把(street,city)這兩列的update權限給它:

[sql] 
grant select, update (street,city) on sampdb.member to 'test'@'localhost';  

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。