1. 程式人生 > >Mysql DBA 高級運維學習筆記-創建mysql用戶及授權的多種方法實戰

Mysql DBA 高級運維學習筆記-創建mysql用戶及授權的多種方法實戰

hang 包括 efm insert 實戰 con let 技術分享 mysql服務器

9.8創建Mysql用戶及賦予用戶權限

9.8.1通過help查看grant命令幫助

1.通過在mysql中輸入“help grant”得到如下幫助信息。

mysql> help grant;
……省略部分…….
CREATE USER ‘jeffrey‘@‘localhost‘ IDENTIFIED BY ‘mypass‘;
GRANT ALL ON db1.* TO ‘jeffrey‘@‘localhost‘;
GRANT SELECT ON db2.invoice TO ‘jeffrey‘@‘localhost‘;
GRANT USAGE ON *.* TO ‘jeffrey‘@‘localhost‘ WITH MAX_QUERIES_PER_HOUR 90;
……省略部分…….

2.運維人員比較常用的創建用戶的方法是,使用grant命令在創建用戶的同時進行權限授權具體授權例子為:

GRANT ALL ON db1.* TO ‘jeffrey‘@‘localhost‘ IDENTIFIED BY ‘mypass‘;

3.上述grant命令幫助裏還提供了一個先用create命令創建用戶,然後再用Grant授權的方法,即創建用戶和授權權限分開進行,列如:

CREATE USER ‘jeffrey‘@‘localhost‘ IDENTIFIED BY ‘mypass‘;
GRANT ALL ON db1.* TO ‘jeffrey‘@‘localhost‘;

以上兩條命令相當於下面一條命令

GRANT ALL ON db1.* TO ‘jeffrey‘@‘localhost‘ IDENTIFIED BY ‘mypass‘;

9.8.2 通過grant命令創建用戶並授權

1.Grant命令簡單語法如下

Grant all privileges on dbname.* to username@localhost identified by ‘passwd’;

2.列表說明

技術分享圖片

3.案例:創建用戶zhangsan,對test庫具備所有權限,允許從localhost主機登錄管理數據庫,密碼是zhangsan123。

實現上述操作的具體命令為

mysql> grant all privileges on test.* to ‘zhangsan‘@‘localhost‘ identified by ‘zhangsan123‘;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

檢查授權用戶zhangsan的具體權限

mysql> show grants for ‘zhangsan‘@‘localhost‘;
 Grants for zhangsan@localhost   
GRANT USAGE ON *.* TO ‘zhangsan‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*7E72D61D7B957897AA8ECED9A9397B649BE3B546‘ |
 GRANT ALL PRIVILEGES ON `test`.* TO ‘zhangsan‘@‘localhost‘  
2 rows in set (0.00 sec)

9.8.3 Create和grant配合法

1.首先創建用戶username及密碼passwd,授權主機localhost。

CREATE USER ‘username‘@‘localhost‘ IDENTIFIED BY ‘passwd‘;
mysql> create user ‘lisi‘@‘localhost‘ identified by ‘kisi123‘;
Query OK, 0 rows affected (0.01 sec)
mysql> show grants for ‘lisi‘@‘localhost‘;
Grants for lisi@localhost   GRANT USAGE ON *.* TO ‘lisi‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*686008E0BFD16925072B84AA099EB5BC8375C35B‘ 
1 row in set (0.00 sec)

默認權限是USAGE,及連接的權限,因為此時還沒有權限。

2.然後授權localhost主機上通過用戶username管理test數據庫的所有權限,無需密碼。

mysql> grant all on test.* to ‘lisi‘@‘localhost‘;
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for ‘lisi‘@‘localhost‘;
Grants for lisi@localhost   
GRANT USAGE ON *.* TO ‘lisi‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*686008E0BFD16925072B84AA099EB5BC8375C35B‘ 
GRANT ALL PRIVILEGES ON `test`.* TO ‘lisi‘@‘localhost‘ 

提示:可以看到默認權限是usage即連接的權限,後面又增加了ALL權限。

9.8.4 授權局域網內主機遠程連接數據庫

根據grant命令的語法我們知道,test@localhost位置為授權訪問數據庫的主機,localhost可以用域名,IP地址或者IP段來替代,因此要授權局域網內主機可以通過如下方法來實現。

a.百分號匹配法

system@ceshi 01:5945->grant all privileges on test.* to ‘zbf‘@‘192.168.1.%‘ identified by ‘zbf123‘;
Query OK, 0 rows affected (0.01 sec)
system@ceshi 01:5950->show grants for ‘zbf‘@‘192.168.1.%‘;
Grants for [email protected].%   
GRANT USAGE ON *.* TO ‘zbf‘@‘192.168.1.%‘ IDENTIFIED BY PASSWORD ‘*E2190B1F46FD9E171DD25B61138EA7F4F4D82B8C‘ 
GRANT ALL PRIVILEGES ON `test`.* TO ‘zbf‘@‘192.168.1.%‘  
2 rows in set (0.00 sec)
system@ceshi 02:0023->flush privileges;
Query OK, 0 rows affected (0.00 sec)

b.子網掩碼配置法

system@ceshi 02:3013->grant all privileges on test.* to ‘wwn‘@‘192.168.1.0/255.255.255.0‘ identified by ‘wwn520‘;
Query OK, 0 rows affected (0.01 sec)
system@ceshi 02:3127->flush privileges;
Query OK, 0 rows affected (0.00 sec)

通過mysql客戶端連接異地數據庫服務:

1.本地mysql –uroot –pzbf666連接數據庫相當於mysql –uroot –pzbf666 –h localhost

2.要遠程連接192.168.1.108的數據庫,命令為 mysql -uwwn -pwwn520 -h 192.168.1.108

3.通過php服務器連接mysql服務器的代碼寫法為

<?php
        //$link_id=mysql_connect(‘主機名‘,‘用戶‘,‘密碼‘);
        $link_id=mysql_connect(‘192.168.1.108‘,‘wwn‘,‘wwn123‘);
        if($link_id){
                echo "mysql successful by wwn";
        }else{
            echo mysql_error();
        }
?>

9.8.5 MySQL用戶可以授權的權限有哪些?

通過實驗獲得ALL PRIVILEGES包括哪些權限

1.先看看有哪些用戶

system@ceshi 03:3751->select user,host from mysql.user;
+--------+---------------------------+
| user   | host  |
+--------+---------------------------+
| zbf| 192.168.1.%   |
| wwn| 192.168.1.0/255.255.255.0 |
| system | localhost |
+--------+---------------------------+

2.看看授權過的wwn的權限

system@ceshi 03:3920->show grants for ‘wwn‘@‘192.168.1.0/255.255.255.0‘;
| Grants for [email protected]/255.255.255.0   
 GRANT USAGE ON *.* TO ‘wwn‘@‘192.168.1.0/255.255.255.0‘ IDENTIFIED BY PASSWORD ‘*C9CE90EB588AA17159BB7C612DC7B34259AC0816‘ |
| GRANT ALL PRIVILEGES ON `test`.* TO ‘wwn‘@‘192.168.1.0/255.255.255.0‘ 

註意這個地方的test.,我們後面取消只讀權限的時候也這樣寫成test.

這時候查看還是ALL PRIVILEGES權限,沒有細分。

3.取消wwn的只讀權限(SELECT)。

(1) 先看一下幫助,幫助裏面提供了語法,revoke在sql語言介紹那節已經提到過了,意思是取消授權。

system@ceshi 03:4001->help revoke

……省略……….
The REVOKE statement enables system administrators to revoke privileges
from MySQL accounts. Each account name uses the format described in
http://dev.mysql.com/doc/refman/5.1/en/account-names.html.For example:
REVOKE INSERT ON *.* FROM ‘jeffrey‘@‘localhost‘;
If you specify only the user name part of the account name, a host name
part of ‘%‘ is used.
……省略……

(2) 取消授權,將ALL PRIVILEGES權限細分。

system@ceshi 03:4909->REVOKE INSERT ON test.* FROM ‘wwn‘@‘192.168.1.0/255.255.255.0‘;
Query OK, 0 rows affected (0.00 sec)
system@ceshi 03:5216->flush privileges;
Query OK, 0 rows affected (0.00 sec)

(3)再查看一下用戶wwn的權限就已經被細分了。

system@ceshi 03:5224->show grants for ‘wwn‘@‘192.168.1.0/255.255.255.0‘;
GRANT USAGE ON *.* TO ‘wwn‘@‘192.168.1.0/255.255.255.0‘ IDENTIFIED BY PASSWORD ‘*C9CE90EB588AA17159BB7C612DC7B34259AC0816‘
GRANT SELECT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `test`.* TO ‘wwn‘@‘192.168.1.0/255.255.255.0

提示:此時wwn用戶的權限,ALL PRIVILEGES權限已經被細分了。按照下面的步驟我們可以更加清楚的知道ALL PRIVILEGES的權限包括哪些內容。

(1) 我們用-e 不登錄mysql數據庫直接查看用戶wwn有哪些權限

[root@localhost ~]# mysql -usystem -pzbf666 -e "show grants for ‘wwn‘@‘192.168.1.0/255.255.255.0‘;"|grep -i grant|tail -1
GRANT SELECT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `test`.* TO ‘wwn‘@‘192.168.1.0/255.255.255.0‘

(2) 查看用戶wwn有哪些權限之後,我們要把有用的篩選出來。grep的-i參數是忽略大小寫的意思。

[root@localhost ~]# mysql -usystem -pzbf666 -e "show grants for ‘wwn‘@‘192.168.1.0/255.255.255.0‘;"|grep -i grant|tail -1|tr ‘,‘ ‘\n‘>all1.txt

(3) 好我們查看一下過濾的內容,下面內容就是用戶wwn所具有的所有權限。

[root@localhost ~]# cat all1.txt -n
 1   SELECT
 2   UPDATE
 3   INSERT
 4   DELETE
 5   CREATE
 6   DROP
 7   REFERENCES
 8   INDEX
 9   ALTER
10   CREATE TEMPORARY TABLES
11   LOCK TABLES
12   EXECUTE
13   CREATE VIEW
14   SHOW VIEW
15   CREATE ROUTINE
16   ALTER ROUTINE
17   EVENT
18   TRIGGER ON

註意:在授權時可以授權用戶最小的滿足業務的權限,而不是一味的授權“ALL PRIVILEGES”

9.8.6 企業環境授權用戶權限

1.博客,CMS等產品的數據庫授權

對於web連接用戶授權盡量采用最小化規則,很多開源軟件都是web界面安裝,因此,在安裝期間除了select,insert,update,delete4個權限外,還需要create,drop等比較危險的權限。

system@ceshi 04:5606->grant select,insert,update,delete,create,drop on blog.* to ‘blog‘@‘192.168.1.%‘ identified by ‘1b23456‘;
Query OK, 0 rows affected (0.00 sec)
system@ceshi 04:5907->flush privileges;
Query OK, 0 rows affected (0.00 sec)

常規情況下授權select,insert,update,delete4個權限即可,有的開源軟件,列如discuzbbs,還需要create,drop等比較危險的權限。

2.生成數據庫表之後,要收回create、drop授權

system@ceshi 04:5925->help revoke
REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user [, user] ...
REVOKE INSERT ON *.* FROM ‘jeffrey‘@‘localhost‘;
2   rows in set (0.01 sec)
system@ceshi 05:1327->REVOKE CREATE,DROP ON blog.* FROM ‘blog‘@‘192.168.1.%‘;
Query OK, 0 rows affected (0.00 sec)

system@ceshi 05:1452->flush privileges;
Query OK, 0 rows affected (0.00 sec)
system@ceshi 05:1543->show grants for ‘blog‘@‘192.168.1.%‘\G;
*************************** 1. row ***************************
Grants for [email protected].%: GRANT USAGE ON *.* TO ‘blog‘@‘192.168.1.%‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘
*************************** 2. row ***************************
Grants for [email protected].%: GRANT SELECT, INSERT, UPDATE, DELETE ON `blog`.* TO ‘blog‘@‘192.168.1.%‘
2 rows in set (0.00 sec)

2018/1/27 0:54:16

Mysql DBA 高級運維學習筆記-創建mysql用戶及授權的多種方法實戰