Python爬取字幕檔案保姆級筆記
在MySQL 5.7中,關於使用者及使用者許可權的相關資訊,都儲存在了mysql庫中的user表中,可以將user表中大致分為使用者列、許可權列、安全列、資源控制列這幾種。
一、使用者、許可權概述
1.1 使用者列
user表的使用者列包括 Host、 User、password,分別表示主機名、使用者名稱和密碼。其中 user和 Host為user表的聯合主踺。當用戶與伺服器之間建立連線時,輸入的賬戶資訊中的使用者名稱稱、主機名和密碼必須匹配user表中對應的欄位,只有3個值都匹配的時候,才允許連線的建立。這3 個欄位的值就是建立賬戶時儲存的賬戶資訊。修改使用者密碼時,實際就是修改user表的password欄位值。
1.2 許可權列
許可權列的欄位決定了使用者的許可權,描述了在全域性範圍內允許對資料和資料庫進行的操作。包括查詢許可權、修改許可權等普通許可權,還包括了關閉伺服器、超級許可權和載入使用者等高階許可權。普通許可權用於操作資料庫;高階許可權用於資料庫管理。 user表中對應的許可權是針對所有使用者資料庫的。這些欄位值的型別為 ENUM,可以取的值只能為 Y和 N, Y表示該使用者有對應的許可權; N表示使用者沒有對應的許可權。檢視user表的結構可以看到,這些欄位的值預設都是 N。如果要修改許可權,可以使用 GRANT語句或 UPDATE語句更改 user表的這些欄位來修改使用者對應的許可權。
1.3 安全列
安全列只有6個欄位,其中兩個是 SSI相關的,2個是 x509相關的,另外2個是授權外掛相關的。SSI用於加密; X509標準可用於標識使用者: Plugin欄位標識可以用於驗證使用者身份的外掛,如果該欄位為空,伺服器使用內建授權驗證機制驗證使用者身份。可以通過 SHOW VARIABLES LIKE ' have_openssl
'語句來查詢伺服器是否支援 SSI功能。
1.4 資源控制列
資源控制列的欄位用來限制使用者使用的資源,包含4個欄位,分別為:
1)Max_questions—使用者每小時允許執行的查詢操作次數;
2)Max_updates一使用者每小時允許執行的更新操作次數;
3)Max_connections—使用者每小時允許執行的連線操作次數;
4)Max_user_connections—使用者允許同時建立的連線次數;
一個小時內使用者查詢或者連線數量超過資源控制限制,使用者將被鎖定,直到下一個小時,才可以在此執行對應的操作。可以使用GRANT語句更新這些欄位的值。
注:若新建的使用者無法登入到資料庫,排除許可權錯誤的前提下,可以嘗試重新整理許可權,命令如下:
mysql> flush privileges;
在使用grant給使用者授權時,可以使用下面的指令檢視有哪些許可權可以授權給使用者:
mysql> show privileges;
二、建立使用者
2.1 使用create語句
① 方法一
mysql> create user lzj@'localhost' identified by '123';
#建立一個使用者lzj,並設定密碼為123,僅允許本機登入
mysql> select * from mysql.user where user='lzj'\G;
#查詢mysql庫user表中User欄位為lzj的列
*************************** 1. row ***************************
Host: localhost #允許從哪個主機登入
User: lzj #使用者名稱
#以下是許可權,“N”表示沒有對應的許可權,“Y”表示擁有對應的許可權-
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: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 #經過雜湊加密過的密碼
password_expired: N
password_last_changed: 2020-04-14 12:38:17
password_lifetime: NULL
account_locked: N
但是上面這種方式,密碼是以明文的方式寫下來的(雖然儲存進去後是密文的方式),但有些不安全!
② 方法二
mysql> select password('123'); #查詢123加密後的字串
+-------------------------------------------+
| password('123') |
+-------------------------------------------+
| *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+-------------------------------------------+
mysql> create user lv@'localhost' identified by
-> password '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257';
#建立使用者的時候,直接寫入加密後的密碼即可,但是需要新增password關鍵字
2.2 使用grant語句
mysql> grant select on test.* to zhen@'localhost' identified by '123';
#建立使用者zhen,密碼為123,對test庫下的所有表只允許讀取的許可權
[root@db01 ~]# mysql -uzhen -p123
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
mysql> show tables from test;
+----------------+
| Tables_in_test |
+----------------+
| bank |
| student |
+----------------+
mysql> select * from test.student;
+----+----------+
| id | name |
+----+----------+
| 2 | zhangsan |
| 4 | wangwu |
+----+----------+
mysql> update test.student set name=zhang where id=2;
ERROR 1142 (42000): UPDATE command denied to user 'zhen'@'localhost' for table 'student'
#由於許可權的問題所以導致失敗
三、刪除使用者
3.1 使用drop user語句
mysql> drop user zhen@'localhost';
3.2 使用delete語句
mysql> delete from mysql.user where host='localhost' and user='lzj';
四、修改使用者密碼
4.1 使用mysqladmin命令
[root@db01 ~]# mysqladmin -uroot -p'123' password '123.com';
[root@db01 ~]# mysql -uroot -p123.com
mysql>
4.2 修改mysql庫下的user表
mysql> update mysql.user set authentication_string=password('123') where user='root';
mysql> flush privileges;
[root@db01 ~]# mysql -uroot -p123
mysql>
4.3 使用set語句修改當前使用者的密碼
mysql> set password=password('123.com');
[root@db01 ~]# mysql -uroot -p123.com
mysql>
4.4 root使用者修改普通使用者密碼
① 使用set語句
mysql> set password for lv@'localhost'=password('123.com');
② 使用update語句
mysql> update mysql.user set authentication_string=password('123')
-> where user='lv' and host='localhost';
mysql> flush privileges;
#需重新整理一下許可權
③ 使用grant語句
mysql> grant select on *.* to lv@'localhost' identified by '123.com';
4.5 普通使用者修改自己的密碼
[root@db01 ~]# mysql -ulv -p123.com
mysql> set password=password('123');
4.6 撤銷普通使用者許可權
mysql> show grants for lv@'localhost';
#檢視使用者擁有的許可權
mysql> revoke select on *.* from lv@'localhost';
#撤銷使用者的select許可權
mysql> flush privileges;
#需重新整理許可權