Mysql 授權控制

        在Mysql 中,權限設置非常重要,分配權限可以清晰的劃分責任,管理人員只需要關注自己的任務即可,最重要的是保證系統數據安全。

1.授予權限

(1)權限控制主要是出於安全因素,因此需要遵循以下幾個原則:

          a. 只授予能滿足需要的最小權限,爲了防止用戶誤操作和幹壞事。比如用戶只需要查詢,只需賦予 serlect 權限就可以了,不用給用戶 uodate 、insert 、delete 權限。

         b. 創建用戶的時候限制用戶的登錄主機,一般是限制成指定IP 或者內網 IP.

         c. 初始化數據庫時刪除沒有密碼的用戶。安裝完數據庫時會自動創建一些用戶,這些用戶沒有密碼。

         e. 爲每個用戶設置滿足密碼複雜度的密碼。

         f. 定期清理不需要的用戶。收回權限或者刪除用戶。

(2)授予權限使用 GRANT 命令,命令格式如下:

    GRANT  權限列表  ON  庫名.表名   TO   用戶名@主機地址 [IDENTIFIED BY ‘密碼‘].

  命令格式很明確,是指定用戶允許它操作某些表,對於這些表擁有相應的操作權限。

[root@bogon ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.

mysql> grant select on school.info to 'user03'@'localhost' identified by '123abc';   
Query OK, 0 rows affected, 1 warning (0.00 sec)

使用戶 user03 可以在主機 localhost 連接,密碼是 123abc ,它擁有對數據庫表 school.info 的 select 權限

mysql> quit
Bye
[root@bogon ~]# mysql -u user03 –p                          //使用user03 登錄,進行驗證
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.

mysql> select * from school.info;                           //select 語句可以正常執行
+----+----------+-------+-------+
| id | name     | score | hobby |
+----+----------+-------+-------+
|  1 | zhangsan | 30.00 |     1 |
|  2 | lisi     | 74.00 |     2 |
|  3 | wangwu   | 86.00 |     3 |
|  4 | zhaoliu  | 95.00 |     4 |
+----+----------+-------+-------+
4 rows in set (0.00 sec)

mysql> insert into school.info (id,name,score,hobby) values (6,'lili',78,3);
ERROR 1142 (42000): INSERT command denied to user 'user03'@'localhost' for table 'info'    //執行 insert 語句沒有足夠權限
mysql>

使用GRANT 時有些問題需要注意:

      (1)當用戶名和主機名在數據庫中不存在時,用戶和主機名被創建,也就是 user 表中多了一個用戶數據,和使用創建新用戶命令效果相同,登錄密碼是後面指定的密碼。

      (2)當用戶名和主機名在數據庫中已經存在,後面設置的新密碼可以覆蓋舊密碼,相當於修改密碼的功能。

[root@localhost ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select User,authentication_string,Host from user;
+-----------+-------------------------------------------+-----------+
| User      | authentication_string                     | Host      |
+-----------+-------------------------------------------+-----------+
| root      | *3620754A963ECB3D7296097F9DA00C1FA5476B03 | localhost |
| mysql.sys | *3620754A963ECB3D7296097F9DA00C1FA5476B03 | localhost |
| root      | *3620754A963ECB3D7296097F9DA00C1FA5476B03 | %         |
| user01    | *3620754A963ECB3D7296097F9DA00C1FA5476B03 | localhost |
| user03    | *3620754A963ECB3D7296097F9DA00C1FA5476B03 | localhost |
| user02    | *3620754A963ECB3D7296097F9DA00C1FA5476B03 | localhost |
+-----------+-------------------------------------------+-----------+
6 rows in set (0.00 sec)

2.查看權限

查看用戶擁有的權限可以使用 SHOW GRANTS 命令。命令格式如下:

SHOW GRANTS FOR ‘username’ @ ‘localhost’;

查看用戶user03 的權限。

mysql> show grants for 'user03'@'localhost';                       
+---------------------------------------------------------+
| Grants for user03@localhost                             |
+---------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user03'@'localhost'              |
| GRANT SELECT ON "school"."info" TO 'user03'@'localhost' |
+---------------------------------------------------------+
2 rows in set (0.01 sec)

顯示user03 對錶school.info  擁有 select 權限,與之前設置相同。

3.撤銷權限使用REVOKE  語句可以撤銷指定用戶的數據庫權限。命令格式如下:

REVOKE  權限列表 ON  數據庫名.表名  FROM  用戶@主機名。

mysql> revoke select on school.info from 'user03'@'localhost';
Query OK, 0 rows affected (0.01 sec)

mysql> show grants for 'user03'@'localhost';
+--------------------------------------------+
| Grants for user03@localhost                |
+--------------------------------------------+
| GRANT USAGE ON *.* TO 'user03'@'localhost' |                
+--------------------------------------------+
1 row in set (0.00 sec)


mysql> show grants for 'user03'@'localhost';
+---------------------------------------------------------+
| Grants for user03@localhost                             |
+---------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user03'@'localhost'              |
| GRANT SELECT ON "school"."info" TO 'user03'@'localhost' |
+---------------------------------------------------------+
2 rows in set (0.00 sec)

4.權限列表說明

ALL                                                     設置GRANT OPTION 之外的所有權限

ALTER                                                 允許使用 ALTER TABLE

CREATE                                             允許使用  CREATE TABLE

CREATE USER                                  允許使用 CREATE USER

DELETE                                             允許使用 TELETE

INDEX                                               允許使用INDEX

INSERT                                              允許使用INSERT

SELECT                                               允許使用SELECT

UPDATE                                            允許使用IPDATE

DROP                                                 允許使用DROP TABLE

REPLICATION SLAVE                        允許從主服務器中讀取二進制文件

SHOW ADTABASES                          允許顯示所有數據






































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