在Mysql 中,權限設置很是重要,分配權限能夠清晰的劃分責任,管理人員只須要關注本身的任務便可,最重要的是保證系統數據安全。mysql
1.授予權限sql
(1)權限控制主要是出於安全因素,所以須要遵循如下幾個原則:數據庫
a. 只授予能知足須要的最小權限,爲了防止用戶誤操做和幹壞事。好比用戶只須要查詢,只需賦予 serlect 權限就能夠了,不用給用戶 uodate 、insert 、delete 權限。安全
b. 建立用戶的時候限制用戶的登陸主機,通常是限制成指定IP 或者內網 IP.服務器
c. 初始化數據庫時刪除沒有密碼的用戶。安裝完數據庫時會自動建立一些用戶,這些用戶沒有密碼。ide
e. 爲每一個用戶設置知足密碼複雜度的密碼。ui
f. 按期清理不須要的用戶。收回權限或者刪除用戶。this
(2)授予權限使用 GRANT 命令,命令格式以下:spa
GRANT 權限列表 ON 庫名.表名 TO 用戶名@主機地址 [IDENTIFIED BY ‘密碼‘].orm
命令格式很明確,是指定用戶容許它操做某些表,對於這些表擁有相應的操做權限。
[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 -ADatabase 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 容許顯示全部數據