一、GRANT命令使用說明:mysql
先來看一個例子,建立一個只容許從本地登陸的超級用戶jack,並容許將權限賦予別的用戶,密碼爲:jack.sql
mysql> grant all privileges on *.* to ray@'localhost' identified by "123456" with grant option; Query OK, 0 rows affected (0.01 sec)
GRANT命令說明:
ALL PRIVILEGES 是表示全部權限,你也可使用select、update等權限。數據庫
ON 用來指定權限針對哪些庫和表。ide
*.* 中前面的*號用來指定數據庫名,後面的*號用來指定表名。oop
TO 表示將權限賦予某個用戶。加密
jack@'localhost' 表示jack用戶,@後面接限制的主機,能夠是IP、IP段、域名以及%,%表示任何地方。注意:這裏%有的版本不包括本地,之前碰到過給某個用戶設置了%容許任何地方登陸,可是在本地登陸不了,這個和版本有關係,遇到這個問題再加一個localhost的用戶就能夠了。spa
IDENTIFIED BY 指定用戶的登陸密碼。code
WITH GRANT OPTION 這個選項表示該用戶能夠將本身擁有的權限受權給別人。注意:常常有人在建立操做用戶的時候不指定WITH GRANT OPTION選項致使後來該用戶不能使用GRANT命令建立用戶或者給其它用戶受權。orm
若是想只讓固定IP段的user訪問,能夠這樣寫:hadoop
mysql> grant all privileges on *.* to ray@'192.168.%' identified by "123456" with grant option; Query OK, 0 rows affected (0.01 sec)
備註:可使用GRANT重複給用戶添加權限,權限疊加,好比你先給用戶添加一個select權限,而後又給用戶添加一個insert權限,那麼該用戶就同時擁有了select和insert權限。
二、刷新權限
使用這個命令使權限生效,尤爲是你對那些權限表user、db、host等作了update或者delete更新的時候。之前遇到過使用grant後權限沒有更新的狀況,只要對權限作了更改就使用FLUSH PRIVILEGES命令來刷新權限。
mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)
三、查看權限
查看當前用戶的權限: mysql> show grants; +---------------------------------------------------------------------+| Grants for root@localhost |+---------------------------------------------------------------------+| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION || GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |+---------------------------------------------------------------------+2 rows in set (0.00 sec) 查看某個用戶的權限: mysql> show grants for 'jack'@'%'; +-----------------------------------------------------------------------------------------------------+| Grants for jack@% |+-----------------------------------------------------------------------------------------------------+| GRANT USAGE ON *.* TO 'jack'@'%' IDENTIFIED BY PASSWORD '*9BCDC990E611B8D852EFAF1E3919AB6AC8C8A9F0' |+-----------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)
四、回收權限
mysql> revoke delete on *.* from 'spider'@'%'; Query OK, 0 rows affected (0.01 sec)
關於回收權限,有可能直接用revoke並不能生效,能夠直接刪除user表裏面的相應數據,再從新賦予權限。
mysql> select user,host from user; +--------+-----------+ | user | host | +--------+-----------+ | fmcm | % | | hive | % | | spider | 10.24.% | | root | 127.0.0.1 | | root | ::1 | | root | localhost | +--------+-----------+ 6 rows in set (0.00 sec) mysql> delete from user where user='spider'; Query OK, 1 row affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql> select user,host from user; +--------+-----------+ | user | host | +--------+-----------+ | fmcm | % | | hive | % | | root | 127.0.0.1 | | root | ::1 | | root | localhost | +--------+-----------+ mysql> show grants for 'spider'; ERROR 1141 (42000): There is no such grant defined for user 'spider' on host '%'
5.修改用戶密碼
update mysql。user set password=password("新密碼") where user="root";
若是直接執行以上sql並且flush以後仍是登陸不上,報以下錯誤:
[hadoop@slave4 ~]$ mysql -u spider -p
Enter password:
ERROR 1045 (28000): Access denied for user 'spider'@'localhost' (using password: YES)
有多是使用grant語句設置密碼加密形成的。建議直接刪除該用戶並從新建立權限。