溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL用戶和權(quán)限管理

發(fā)布時(shí)間:2020-03-01 05:26:22 來(lái)源:網(wǎng)絡(luò) 閱讀:480 作者:warrent 欄目:MySQL數(shù)據(jù)庫(kù)

前言

MySQL 5.7.24中,關(guān)于用戶及用戶權(quán)限的相關(guān)信息,都保存在了mysql庫(kù)中的user表中,可以將user表中大致分為用戶列、權(quán)限列、安全列、資源控制列這幾種。

1、用戶列

user表的用戶列包括 Host、 User、password,分別表示主機(jī)名、用戶名和密碼。其中 user和 Host為user表的聯(lián)合主踺。當(dāng)用戶與服務(wù)器之間建立連接時(shí),輸入的賬戶信息中的用戶名稱、主機(jī)名和密碼必須匹配user表中對(duì)應(yīng)的字段,只有3個(gè)值都匹配的時(shí)候,才允許連接的建立。這3 個(gè)字段的值就是創(chuàng)建賬戶時(shí)保存的賬戶信息。修改用戶密碼時(shí),實(shí)際就是修改user表的password字段值。

2、權(quán)限列

權(quán)限列的字段決定了用戶的權(quán)限,描述了在全局范圍內(nèi)允許對(duì)數(shù)據(jù)和數(shù)據(jù)庫(kù)進(jìn)行的操作。包括查詢權(quán)限、修改權(quán)限等普通權(quán)限,還包括了關(guān)閉服務(wù)器、超級(jí)權(quán)限和加載用戶等高級(jí)權(quán)限。普通權(quán)限用于操作數(shù)據(jù)庫(kù);高級(jí)權(quán)限用于數(shù)據(jù)庫(kù)管理。 user表中對(duì)應(yīng)的權(quán)限是針對(duì)所有用戶數(shù)據(jù)庫(kù)的。這些字段值的類型為 ENUM,可以取的值只能為 Y和 N, Y表示該用戶有對(duì)應(yīng)的權(quán)限; N表示用戶沒(méi)有對(duì)應(yīng)的權(quán)限。查看user表的結(jié)構(gòu)可以看到,這些字段的值默認(rèn)都是 N。如果要修改權(quán)限,可以使用 GRANT語(yǔ)句或 UPDATE語(yǔ)句更改 user表的這些字段來(lái)修改用戶對(duì)應(yīng)的權(quán)限。

3、安全列

安全列只有6個(gè)字段,其中兩個(gè)是 SSI相關(guān)的,2個(gè)是 x509相關(guān)的,另外2個(gè)是授權(quán)插件相關(guān)的。SSI用于加密; X509標(biāo)準(zhǔn)可用于標(biāo)識(shí)用戶: Plugin字段標(biāo)識(shí)可以用于驗(yàn)證用戶身份的插件,如果該字段為空,服務(wù)器使用內(nèi)建授權(quán)驗(yàn)證機(jī)制驗(yàn)證用戶身份。可以通過(guò) SHOW VARIABLES LIKE ' have_openssl'語(yǔ)句來(lái)查詢服務(wù)器是否支持 SSI功能。

4、資源控制列

資源控制列的字段用來(lái)限制用戶使用的資源,包含4個(gè)字段,分別為:
1)Max_questions—用戶每小時(shí)允許執(zhí)行的查詢操作次數(shù)。
2)Max_updates一用戶每小時(shí)允許執(zhí)行的更新操作次數(shù)。
3)Max_connections—用戶每小時(shí)允許執(zhí)行的連接操作次數(shù)。
4)Max_user_connections—用戶允許同時(shí)建立的連接次數(shù)。

一個(gè)小時(shí)內(nèi)用戶查詢或者連接數(shù)量超過(guò)資源控制限制,用戶將被鎖定,直到下一個(gè)小時(shí),才可以在此執(zhí)行對(duì)應(yīng)的操作??梢允褂肎RANT語(yǔ)句更新這些字段的值。

注:若新建的用戶無(wú)法登錄到數(shù)據(jù)庫(kù),排除權(quán)限錯(cuò)誤的前提下,可以嘗試刷新權(quán)限,命令如下:

mysql> flush privileges;

在使用grant給用戶授權(quán)時(shí),可以使用下面的指令查看有哪些權(quán)限可以授權(quán)給用戶:

mysql> SHOW PRIVILEGES;        

一、創(chuàng)建用戶

1、使用create user語(yǔ)句創(chuàng)建新用戶

1)方法1:
mysql> create user 'tom'@'localhost' identified by '123.com';

上面的語(yǔ)句是創(chuàng)建了一個(gè)tom用戶,只允許本機(jī)登錄,并且密碼為123.com。

但是上面這種方式,密碼是以明文的方式寫下來(lái)的(雖然存儲(chǔ)進(jìn)去后是密文的方式),但有些不安全,上述指令會(huì)在mysq.user這個(gè)表中產(chǎn)生tom這個(gè)用戶的信息,如下:

mysql> select * from user where User='tom'\G        <!--查詢User字段為tom的列-->
*************************** 1. row ***************************
                  Host: localhost           <!--允許從哪個(gè)主機(jī)登錄-->
                  User: tom              <!--用戶名-->
                                    <!--以下是權(quán)限,“N”表示沒(méi)有對(duì)應(yīng)的權(quán)限,“Y”表示擁有對(duì)應(yīng)的權(quán)限-->
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
         Shutdown_priv: N
          Process_priv: N
             File_priv: N
            Grant_priv: N
       References_priv: N
            Index_priv: N
            Alter_priv: N
          Show_db_priv: N
            Super_priv: N
 Create_tmp_table_priv: N
      Lock_tables_priv: N
          Execute_priv: N
       Repl_slave_priv: N
      Repl_client_priv: N
      Create_view_priv: N
        Show_view_priv: N
   Create_routine_priv: N
    Alter_routine_priv: N
      Create_user_priv: N
            Event_priv: N
          Trigger_priv: N
Create_tablespace_priv: N
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
 authentication_string: *AC241830FFDDC8943AB31CBD47D758E79F7953EA
 <!--上面是123.com經(jīng)過(guò)哈希加密過(guò)的密碼-->
      password_expired: N
 password_last_changed: 2019-12-27 11:45:25
     password_lifetime: NULL
        account_locked: N
1 row in set (0.00 sec)
2)方法2:
mysql> select password('123.com');
+-------------------------------------------+
| password('123.com')                       |
+-------------------------------------------+
| *AC241830FFDDC8943AB31CBD47D758E79F7953EA |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> create user 'zhangyi'@'localhost' 
    -> identified by password '*AC241830FFDDC8943AB31CBD47D758E79F7953EA';
Query OK, 0 rows affected, 1 warning (0.00 sec)

上述命令是先將123.com字符串進(jìn)行加密,然后創(chuàng)建用戶的時(shí)候,直接寫入加密后的密碼即可,但是需要添加password關(guān)鍵字。

創(chuàng)建后,zhangyi用戶在本機(jī)使用123.com這個(gè)密碼就可以登錄到數(shù)據(jù)庫(kù)了。

2、使用grant語(yǔ)句創(chuàng)建新用戶

mysql> grant select on test01.* to 'zhanger'@'localhost' identifiedd by '123.com';

上述指令在創(chuàng)建用戶zhanger的同時(shí),指定其只允許本機(jī)登錄,密碼為123.com,并且該用戶對(duì)test01這個(gè)庫(kù)的所有表具有select權(quán)限。

驗(yàn)證:

[root@mysql ~]# mysql -uzhanger -p123.com         <!--使用zhanger用戶進(jìn)行登錄-->
mysql> show databases;          <!--查看有哪些庫(kù),其實(shí)還有很多,但是由于沒(méi)權(quán)限,所以不會(huì)顯示所有的庫(kù)-->
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test01             |
+--------------------+
2 rows in set (0.00 sec)
mysql> use test01;           <!--切入到有權(quán)限的庫(kù)-->
mysql> show tables;         <!--查看所有表-->
+------------------+
| Tables_in_test01 |
+------------------+
| bank             |
| student          |
+------------------+
2 rows in set (0.00 sec)

mysql> select * from bank;             <!--查看某個(gè)表內(nèi)容-->
+------+-------+
| name | money |
+------+-------+
| lu   |  1000 |
| qi   |  5000 |
+------+-------+
2 rows in set (0.00 sec)
mysql> update bank set money=600 where name='lu';       <!--試著更新表內(nèi)容,但是由于只有select權(quán)限,所以會(huì)被拒絕-->
ERROR 1142 (42000): UPDATE command denied to user 'zhanger'@'localhost' for table 'bank'

二、刪除用戶

1、使用DROP USER語(yǔ)句刪除

mysql> drop user zhangyi@localhost;

2、使用delete語(yǔ)句刪除用戶

mysql> delete from mysql.user where Host='localhost' and user='tom';

三、修改用戶密碼

1、在命令行使用mysqladmin命令修改用戶密碼

[root@mysql ~]# mysqladmin -uroot -p password '2008.com'  <!--將root用戶的密碼修改為2008.com-->
Enter password:            <!--此處注意,需要填寫舊密碼-->
[root@mysql ~]# mysql -uroot -p123.com       <!--此時(shí)舊密碼已經(jīng)無(wú)法登錄了-->
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@mysql ~]# mysql -uroot -p2008.com     <!--使用新密碼登錄即可-->

2、修改MySQL數(shù)據(jù)庫(kù)的user表

<!--修改root密碼為123.com-->
mysql> update mysql.user set authentication_string=password("123.com") where User="root" and Host="localhost";
mysql> flush privileges;

3、使用set語(yǔ)句修改當(dāng)前用戶的密碼

mysql> set password=password('2019.com');

4、Root用戶修改普通用戶密碼

1)使用set語(yǔ)句來(lái)修改普通用戶
mysql> set password for 'liss'@'localhost'=password('123456');
<!--修改liss用戶的密碼為123456-->
2)使用update語(yǔ)句修改普通用戶
mysql> update mysql.user set authentication_string=password("123.com") 
    -> where User='liss' and host='localhost';
<!--修改liss用戶的密碼為123.com-->
mysql> flush PRIVILEGES;      <!--需要刷新一下才可以生效-->
3)使用grant語(yǔ)句修改普通用戶密碼
mysql> grant select on *.* to 'liss'@'localhost' identified by '304.com';
<!--修改liss用戶的密碼為304.com,同時(shí)賦予select權(quán)限-->

5、普通用戶修改自己的密碼

[root@mysql ~]# mysql -uliss -p304.com         <!--登錄-->
mysql> set password=password("lvjianzhao");     <!--修改密碼為lvjianzhao-->

6、撤銷普通用戶的權(quán)限

在上面已經(jīng)寫下了如何為用戶授權(quán),那么這里將寫下如何將用戶的已有權(quán)限撤銷。如下:

mysql> show grants for liss@localhost\G     <!--查看用戶擁有的權(quán)限-->
mysql> revoke select on *.* from 'liss'@'localhost';      <!--將用戶的select權(quán)限撤銷-->
mysql> flush PRIVILEGES;       <!--刷新權(quán)限,至此,當(dāng)用戶再次登錄,就沒(méi)有select權(quán)限了--> 

———————— 本文至此結(jié)束,感謝閱讀 ————————

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI