Mysql之權限管理

一、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語句設置密碼加密形成的。建議直接刪除該用戶並從新建立權限。

相關文章
相關標籤/搜索