10. MySQL 用戶

文章目錄

  • 【 1. 權限表 】
    • 1.1 user 權限表
      • 1.1.1 用戶列
      • 1.1.2 權限列
      • 1.1.3 安全列
      • 1.1.4 資源控制列
    • 1.2 db 表
      • 用戶列
      • 權限列
    • 1.3 tables_priv 表
    • 1.4 columns_priv 表
    • 1.5 procs_priv表
  • 【 2. 用戶管理 】
    • 2.1 創建用戶 CREATE USER
    • 2.2 用戶的登陸、退出
      • 登陸 MySQL
      • 退出 MySQL
    • 2.3 重命名用戶 RENAME USER
    • 2.4 刪除用戶 DROP/DELETE USER
      • DROP USER 刪除普通用戶
      • DELETE 刪除普通用戶
    • 2.5 查看用戶權限
    • 2.6 用戶授權 GRANT
      • 2.6.1 數據庫的權限類型
      • 2.6.2 表的權限類型
      • 2.6.3 列的權限類型
      • 2.6.4 用戶的權限類型
    • 2.6 刪除用戶權限 REVOKE
      • 刪除用戶某些特定的權限
      • 刪除特定用戶的所有權限
    • 2.8 修改用戶密碼
      • 修改普通用戶密碼
      • 修改root用戶密碼

  • 問題背景
    MySQL 是一個多用戶數據庫,具有功能強大的訪問控制系統,可以為不同用戶指定不同權限。在前面的章節中我們使用的 root 用戶是超級管理員,擁有所有權限,包括創建用戶、刪除用戶和修改用戶密碼等管理權限。而為了實際項目的需要,可以創建擁有不同權限的普通用戶。

【 1. 權限表 】

  • MySQL 在安裝時會自動創建一個名為 mysql 的數據庫,mysql 數據庫中存儲的都是 用戶權限表 :用戶登錄以后,MySQL 會根據這些權限表的內容為每個用戶賦予相應的權限

1.1 user 權限表

  • user 表 是 MySQL 中最重要的一個權限表,用來 記錄允許連接到服務器的賬號信息在 user 表里啟用的所有權限都是全局級的,適用于所有數據庫
  • 顯示 user 權限表
DESC mysql.user;

在這里插入圖片描述

1.1.1 用戶列

  • 用戶列 存儲了用戶連接 MySQL 數據庫時需要輸入的信息
    MySQL 5.7 版本不再使用 Password 來作為密碼的字段,而改成了 authentication_string。
  • user 表的用戶列
    用戶登錄時,如果這 3 個字段同時匹配,MySQL 數據庫系統才會允許其登錄。創建新用戶時,也是設置這 3 個字段的值;修改用戶密碼時,實際就是修改 user 表的 authentication_string 字段的值。
字段名說明字段類型是否為空默認值
Host主機名char(60)NO
User用戶名char(32)NO
authentication_string密碼textYES

1.1.2 權限列

  • 權限列 的字段決定了用戶的權限,用來描述在全局范圍內允許對數據和數據庫進行的操作。
  • 權限大致分為兩大類,分別是高級管理權限和普通權限:
    • 高級管理權限 主要對數據庫進行管理。
      例如關閉服務的權限、超級權限和加載用戶等;
    • 普通權限 主要操作數據庫。
      例如查詢權限、修改權限等。
  • user表的權限列
    user 表的權限列包括 Select_priv、Insert_ priv 等以 priv 結尾的字段,這些字段值的數據類型為 ENUM,可取的值只有 Y 和 N:Y 表示該用戶有對應的權限,N 表示該用戶沒有對應的權限。從安全角度考慮,這些字段的默認值都為 N。
字段名字段類型是否為空默認值說明
Select_privenum(‘N’,‘Y’)NON是否可以通過SELECT 命令查詢數據
Insert_privenum(‘N’,‘Y’)NON是否可以通過 INSERT 命令插入數據
Update_privenum(‘N’,‘Y’)NON是否可以通過UPDATE 命令修改現有數據
Delete_privenum(‘N’,‘Y’)NON是否可以通過DELETE 命令刪除現有數據
Create_privenum(‘N’,‘Y’)NON是否可以創建新的數據庫和表
Drop_privenum(‘N’,‘Y’)NON是否可以刪除現有數據庫和表
Reload_privenum(‘N’,‘Y’)NON是否可以執行刷新和重新加載MySQL所用的各種內部緩存的特定命令,包括日志、權限、主機、查詢和表
Shutdown_privenum(‘N’,‘Y’)NON是否可以關閉MySQL服務器。將此權限提供給root賬戶之外的任何用戶時,都應當非常謹慎
Process_privenum(‘N’,‘Y’)NON是否可以通過SHOW PROCESSLIST命令查看其他用戶的進程
File_privenum(‘N’,‘Y’)NON是否可以執行SELECT INTO OUTFILE和LOAD DATA INFILE命令
Grant_privenum(‘N’,‘Y’)NON是否可以將自己的權限再授予其他用戶
References_privenum(‘N’,‘Y’)NON是否可以創建外鍵約束
Index_privenum(‘N’,‘Y’)NON是否可以對索引進行增刪查
Alter_privenum(‘N’,‘Y’)NON是否可以重命名和修改表結構
Show_db_privenum(‘N’,‘Y’)NON是否可以查看服務器上所有數據庫的名字,包括用戶擁有足夠訪問權限的數據庫
Super_privenum(‘N’,‘Y’)NON是否可以執行某些強大的管理功能,例如通過KILL命令刪除用戶進程;使用SET GLOBAL命令修改全局MySQL變量,執行關于復制和日志的各種命令。(超級權限)
Create_tmp_table_privenum(‘N’,‘Y’)NON是否可以創建臨時表
Lock_tables_privenum(‘N’,‘Y’)NON是否可以使用LOCK TABLES命令阻止對表的訪問/修改
Execute_privenum(‘N’,‘Y’)NON是否可以執行存儲過程
Repl_slave_privenum(‘N’,‘Y’)NON是否可以讀取用于維護復制數據庫環境的二進制日志文件
Repl_client_privenum(‘N’,‘Y’)NON是否可以確定復制從服務器和主服務器的位置
Create_view_privenum(‘N’,‘Y’)NON是否可以創建視圖
Show_view_privenum(‘N’,‘Y’)NON是否可以查看視圖
Create_routine_privenum(‘N’,‘Y’)NON是否可以更改或放棄存儲過程和函數
Alter_routine_privenum(‘N’,‘Y’)NON是否可以修改或刪除存儲函數及函數
Create_user_privenum(‘N’,‘Y’)NON是否可以執行CREATE USER命令,這個命令用于創建新的MySQL賬戶
Event_privenum(‘N’,‘Y’)NON是否可以創建、修改和刪除事件
Trigger_privenum(‘N’,‘Y’)NON是否可以創建和刪除觸發器
Create_tablespace_privenum(‘N’,‘Y’)NON是否可以創建表空間

1.1.3 安全列

  • 安全列 主要用來 判斷用戶是否能夠登錄成功

  • 即使 password_expired 為“Y”即用戶密碼過期,用戶也可以使用密碼登錄 MySQL,但是不允許做任何操作

  • 通常標準的發行版不支持 ssl,讀者可以使用 SHOW VARIABLES LIKE “have_openssl” 語句來查看是否具有 ssl 功能。如果 have_openssl 的值為 DISABLED,那么則不支持 ssl 加密功能。

  • user 表中的安全列

字段名字段類型是否為空默認值說明
ssl_typeenum(‘’,‘ANY’,‘X509’,‘SPECIFIED’)NO支持ssl標準加密安全字段
ssl_cipherblobNO支持ssl標準加密安全字段
x509_issuerblobNO支持x509標準字段
x509_subjectblobNO支持x509標準字段
pluginchar(64)NOmysql_native_password引入plugins以進行用戶連接時的密碼驗證,plugin創建外部/代理用戶
password_expiredenum(‘N’,‘Y’)NON密碼是否過期 (N 未過期,y 已過期)
password_last_changedtimestampYES記錄密碼最近修改的時間
password_lifetimesmallint(5) unsignedYES設置密碼的有效時間,單位為天數
account_lockedenum(‘N’,‘Y’)NON用戶是否被鎖定(Y 鎖定,N 未鎖定)

1.1.4 資源控制列

  • 資源控制列 的字段用來 限制用戶使用的資源
  • user 表中的資源控制列。
    • 以下字段的默認值為 0,表示沒有限制。
    • 一個小時內用戶查詢或者連接數量超過資源控制限制,用戶將被鎖定,直到下一個小時才可以在此執行對應的操作。
    • 可以使用 GRANT 語句更新這些字段的值。
字段名字段類型是否為空默認值說明
max_questionsint(11) unsignedNO0規定每小時允許執行查詢的操作次數
max_updatesint(11) unsignedNO0規定每小時允許執行更新的操作次數
max_connectionsint(11) unsignedNO0規定每小時允許執行的連接操作次數
max_user_connectionsint(11) unsignedNO0規定允許同時建立的連接次數

1.2 db 表

  • db 表 比較常用,是 MySQL 數據庫中非常重要的權限表,表中 存儲了用戶對某個數據庫的操作權限。表中的字段大致可以分為兩類,分別是用戶列和權限列。

用戶列

  • db 表用戶列有 3 個字段,分別是 Host、User、Db,標識 從某個主機連接某個用戶對某個數據庫的操作權限,這 3 個字段的組合構成了 db 表的主鍵。
  • db 用戶列
字段名字段類型是否為空默認值說明
Hostchar(60)NO主機名
Dbchar(64)NO數據庫名
Userchar(32)NO用戶名

權限列

  • db 表中的權限列和 user 表中的權限列大致相同,只是user 表中的權限是針對所有數據庫的,而 db 表中的權限只針對指定的數據庫,如果希望用戶只對某個數據庫有操作權限,可以先將 user 表中對應的權限設置為 N,然后在 db 表中設置對應數據庫的操作權限

1.3 tables_priv 表

  • tables_priv 表 用來 對單個表進行權限設置
  • tables_priv 表
字段名字段類型是否為空默認值說明
Hostchar(60)NO主機
Dbchar(64)NO數據庫名
Userchar(32)NO用戶名
Table_namechar(64)NO表名
Grantorchar(93)NO修改該記錄的用戶
TimestamptimestampNOCURRENT_TIMESTAMP修改該記錄的時間
Table_privset(‘Select’,‘Insert’,‘Update’,‘Delete’,‘Create’,‘Drop’,‘Grant’,‘References’,‘Index’,‘Alter’,‘Create View’,‘Show view’,‘Trigger’)NO表示對表的操作權限,包括 Select、Insert、Update、Delete、Create、Drop、Grant、References、Index 和 Alter 等
Column_privset(‘Select’,‘Insert’,‘Update’,‘References’)NO表示對表中的列的操作權限,包括 Select、Insert、Update 和 References

1.4 columns_priv 表

  • columns_priv 表 用來 對單個數據列進行權限設置
  • tables_priv 表
字段名字段類型是否為空默認值說明
Hostchar(60)NO主機
Dbchar(64)NO數據庫名
Userchar(32)NO用戶名
Table_namechar(64)NO表名
Column_namechar(64)NO數據列名稱,用來指定對哪些數據列具有操作權限
TimestamptimestampNOCURRENT_TIMESTAMP修改該記錄的時間
Column_privset(‘Select’,‘Insert’,‘Update’,‘References’)NO表示對表中的列的操作權限,包括 Select、Insert、Update 和 References

1.5 procs_priv表

  • procs_priv 表 可以 對存儲過程和存儲函數進行權限設置
  • procs_priv 表
字段名字段類型是否為空默認值說明
Hostchar(60)NO主機名
Dbchar(64)NO數據庫名
Userchar(32)NO用戶名
Routine_namechar(64)NO表示存儲過程或函數的名稱
Routine_typeenum(‘FUNCTION’,‘PROCEDURE’)NO表示存儲過程或函數的類型,Routine_type 字段有兩個值,分別是 FUNCTION 和 PROCEDURE。FUNCTION 表示這是一個函數;PROCEDURE 表示這是一個存儲過程。
Grantorchar(93)NO插入或修改該記錄的用戶
Proc_privset(‘Execute’,‘Alter Routine’,‘Grant’)NO表示擁有的權限,包括 Execute、Alter Routine、Grant 3種
TimestamptimestampNOCURRENT_TIMESTAMP表示記錄更新時間

【 2. 用戶管理 】

2.1 創建用戶 CREATE USER

  • 問題背景
    MySQL 在安裝時,會默認創建一個名為 root 的用戶,該用戶 擁有超級權限,可以控制整個 MySQL 服務器
    在對 MySQL 的日常管理和操作中,為了避免有人惡意使用 root 用戶控制數據庫,我們通常創建一些具有適當權限的用戶,盡可能地不用或少用 root 用戶登錄系統,以此來確保數據的安全訪問。
  • 使用 CREATE USER 語句來創建 MySQL 用戶,并設置相應的密碼。
    基本語法:
    • 用戶
      指定創建用戶賬號,格式為 user_name’@'host_name。這里的user_name是用戶名,host_name為主機名,即用戶連接 MySQL 時所用主機的名字。
      如果在創建的過程中,只給出了用戶名,而沒指定主機名,那么主機名默認為“%”,表示一組主機,即 不指定主機名則默認對所有主機開放權限。
    • IDENTIFIED BY ‘password’
      用于指定用戶密碼。新用戶可以沒有初始密碼,若該用戶不設密碼,可省略此子句,但是從安全的角度來說,不推薦這種做法。
      • ‘password’ 表示用戶登錄時使用的密碼,需要用單引號括起來。
    • 使用 CREATE USER 語句 必須擁有 mysql 數據庫的 INSERT 權限或全局 CREATE USER 權限
    • 使用 CREATE USER 語句創建一個用戶后,MySQL 會在 mysql 數據庫的 user 表中添加一條新記錄。
    • CREATE USER 語句可以同時創建多個用戶,多個用戶用逗號隔開。
CREATE USER <用戶> 
[ IDENTIFIED BY 'password' ] 
[ ,用戶 [ IDENTIFIED BY 'password' ]]
  • 新創建的用戶擁有的權限很少,它們只能執行不需要權限的操作。如登錄 MySQL、使用 SHOW 語句查詢所有存儲引擎和字符集的列表等。
  • 如果兩個用戶的用戶名相同,但主機名不同,MySQL 會將它們視為兩個用戶,并允許為這兩個用戶分配不同的權限集合。
  • 實例
    使用 CREATE USER 創建一個用戶,用戶名是 test1,密碼是 test1,主機名是 localhost。
    CREATE USER 'test1'@'localhost' IDENTIFIED BY 'test1';
    在這里插入圖片描述

2.2 用戶的登陸、退出

登陸 MySQL

  • 啟動 MySQL 服務后,可以使用以下命令來登錄。
    • -h:指定連接 MySQL 服務器的地址。可以用 hostname 或 hostIP 表示,
      • hostname 為主機名,
      • hostIP 為主機 IP 地址。
    • -p:指定連接 MySQL 服務器的端口號
      • port 為連接的端口號。MySQL 的默認端口號是 3306,因此如果不指定該參數,默認使用 3306 連接 MySQL 服務器。
    • u:指定連接 MySQL 服務器的用戶名
      • username :為用戶名。
    • -p:提示輸入密碼,即提示 Enter password。
      也可以直接在 mysql 命令的 -p 后加上登錄密碼,登錄密碼與 -p 之間沒有空格,此時的命令執行后,后面不會提示輸入密碼。
    • DatabaseName:指定連接到 MySQL 服務器后,登錄到哪一個數據庫中。如果沒有指定,默認為 mysql 數據庫。
    • -e:指定需要執行的 SQL 語句,登錄 MySQL 服務器后執行這個 SQL 語句,然后退出 MySQL 服務器。
mysql -h hostname|hostlP [-p port] -u username -p DatabaseName  -e "SQL語句"
  • CMD 中 登陸 root 用戶:mysql -u root -p
  • 實例
    通過值 localhost 指定 MySQL 服務器的地址,參數 -u 指定了登錄 MySQL 服務器的用戶賬戶,參數 -p 表示會出現輸入密碼提示信息,最后值“mytest”指定了登錄成功后要使用的數據庫。
    mysql -h localhost -u root -p test
    在這里插入圖片描述
  • 實例2
    使用 root 用戶登錄到自己計算機的 mysql 數據庫,同時查詢 tb_tudent表的表結構。
    mysql -h localhost -u root -p mytest -e"DESC tb_tudent"
    在這里插入圖片描述

退出 MySQL

  • 退出 MySQL 服務器的方式很簡單,只要在命令行輸入 EXIT 或 QUIT 即可。“\q”是 QUIT 的縮寫,也可以用來退出 MySQL 服務器。
QUIT;#或者
\q;

2.3 重命名用戶 RENAME USER

  • 基本語法
    • <舊用戶>:系統中已經存在的 MySQL 用戶賬號。
    • <新用戶>:新的 MySQL 用戶賬號。
    • 使用 RENAME USER 語句,必須擁有 mysql 數據庫的 UPDATE 權限或全局 CREATE USER 權限
    • 若系統中舊賬戶不存在或者新賬戶已存在,該語句執行時會出現錯誤。
RENAME USER <舊用戶> TO <新用戶>
  • 實例
    1. 使用 RENAME USER 語句將用戶名 test1 修改為 testUser1,主機是 localhost。
      RENAME USER 'test1'@'localhost' TO 'testUser1'@'localhost';
      在這里插入圖片描述
    2. 在 cmd 命令行工具中,使用 testUser1 用戶登錄數據庫服務器。
      mysql -h localhost -u testUser1 -p
      在這里插入圖片描述

2.4 刪除用戶 DROP/DELETE USER

DROP USER 刪除普通用戶

  • 用戶的刪除不會影響他們之前所創建的表、索引或其他數據庫對象,因為 MySQL 并不會記錄是誰創建了這些對象。
    基本語法:
    • 用戶 用來指定需要刪除的用戶賬號。
    • DROP USER 語句可用于刪除一個或多個用戶,并撤銷其權限。
    • 使用 DROP USER 語句 必須擁有 mysql 數據庫的 DELETE 權限或全局 CREATE USER 權限
    • 在 DROP USER 語句的使用中,若沒有明確地給出賬戶的主機名,則該主機名默認為“%”。
DROP USER <用戶1> [ , <用戶2> ]
  • 實例1
    1. 使用 DROP USER 語句刪除用戶’testUser1@‘localhost’。
      DROP USER 'testUser1'@'localhost';
      在這里插入圖片描述
    2. 在 cmd 命令行工具中,使用 test1 用戶登錄數據庫服務器,發現登錄失敗,說明用戶已經刪除。
      mysql -h localhost -u test1 -p
      在這里插入圖片描述

DELETE 刪除普通用戶

  • 基本語法
    • 可以使用 DELETE 語句直接刪除 mysql.user 表中相應的用戶信息,但必須擁有 mysql.user 表的 DELETE 權限
    • Host 和 User 這兩個字段都是 mysql.user 表的主鍵。因此,需要兩個字段的值才能確定一條記錄。
DELETE FROM mysql.user WHERE Host='hostname' AND User='username';

2.5 查看用戶權限

  • mysql 數據庫下的 user 表中存儲著用戶的基本權限,而新創建的用戶只有登錄 MySQL 服務器的權限,沒有任何其它權限,不能查詢 user 表。
  • 使用 SELECT 語句查詢用戶的權限。
    基本語法:
    • 要執行該語句,必須擁有對 user 表的查詢權限。
SELECT * FROM mysql.user;
  • 也可以使用 SHOW GRANTS 語句查詢用戶的權限。
    基本語法:
    • username 表示用戶名。
    • hostname 表示主機名或主機IP。
SHOW GRANTS FOR 'username'@'hostname';
  • 實例1
    1.創建 testuser1 用戶。
    CREATE USER 'testuser1'@'localhost';
    2.查詢權限。
    USAGE ON *.*表示該用戶對任何數據庫和任何表都沒有權限
    SHOW GRANTS FOR 'testuser1'@'localhost';
    在這里插入圖片描述
  • 實例2:
    查詢 root 用戶的權限
    SHOW GRANTS FOR 'root'@'localhost';
    在這里插入圖片描述

2.6 用戶授權 GRANT

  • 授權 就是為某個用戶賦予某些權限。
    例如,可以為新建的用戶賦予查詢所有數據庫和表的權限。
  • 為了安全起見,最好不要授予普通用戶 SUPER 權限、GRANT 權限
  • 基本語法
    • priv_type 參數表示權限類型;
    • columns_list 參數表示權限作用于哪些列上,省略該參數時,表示作用于整個表;
    • database.table 用于指定權限的級別,值有:
      • *:表示當前數據庫中的所有表。
      • .:表示所有數據庫中的所有表。
      • db_name.*:表示某個數據庫中的所有表,db_name 指定數據庫名。
      • db_name.tbl_name:表示某個數據庫中的某個表或視圖, - db_name 指定數據庫名,tbl_name 指定表名或視圖名。
      • db_name.routine_name:表示某個數據庫中的某個存儲過程或函數,routine_name 指定存儲過程名或函數名。
      • TO 子句:如果權限被授予給一個不存在的用戶,MySQL 會自動執行一條 CREATE USER 語句來創建這個用戶,但同時必須為該用戶設置密碼。
    • user 參數表示用戶賬戶,由用戶名和主機名構成,格式是“‘username’@‘hostname’”;
    • IDENTIFIED BY 參數用來為用戶設置密碼;
    • password 參數是用戶的新密碼。
    • WITH 關鍵字后面帶有一個或多個 with_option 參數。這個參數有 5 個選項,詳細介紹如下:
      • GRANT OPTION:被授權的用戶可以將這些權限賦予給別的用戶;
      • MAX_QUERIES_PER_HOUR count:設置每個小時可以允許執行 count 次查詢;
      • MAX_UPDATES_PER_HOUR count:設置每個小時可以允許執行 count 次更新;
      • MAX_CONNECTIONS_PER_HOUR count:設置每小時可以建立 count 個連接;
      • MAX_USER_CONNECTIONS count:設置單個用戶可以同時具有的 count 個連接。
GRANT priv_type [(column_list)] ON database.table
TO user 
[, user] ...
[WITH with_option [with_option]...]
  • MySQL 中可以授予的權限
MySQL 中可以授予的權限描述舉例
列權限和表中的一個具體列相關。例如,可以使用 UPDATE 語句更新表 students 中 name 列的值的權限。
表權限和一個具體表中的所有數據相關。例如,可以使用 SELECT 語句查詢表 students 的所有數據的權限。
數據庫權限和一個具體的數據庫中的所有表相關。例如,可以在已有的數據庫 mytest 中創建新表的權限。
用戶權限和 MySQL 中所有的數據庫相關。例如,可以刪除已有的數據庫或者創建一個新的數據庫的權限。

2.6.1 數據庫的權限類型

  • 授予數據庫權限時,<權限類型>可以指定為以下值:
權限名稱對應user表中的字段說明
SELECTSelect_priv表示授予用戶可以使用 SELECT 語句訪問特定數據庫中所有表和視圖的權限。
INSERTInsert_priv表示授予用戶可以使用 INSERT 語句向特定數據庫中所有表添加數據行的權限。
DELETEDelete_priv表示授予用戶可以使用 DELETE 語句刪除特定數據庫中所有表的數據行的權限。
UPDATEUpdate_priv表示授予用戶可以使用 UPDATE 語句更新特定數據庫中所有數據表的值的權限。
REFERENCESReferences_priv表示授予用戶可以創建指向特定的數據庫中的表外鍵的權限。
CREATECreate_priv表示授權用戶可以使用 CREATE TABLE 語句在特定數據庫中創建新表的權限。
ALTERAlter_priv表示授予用戶可以使用 ALTER TABLE 語句修改特定數據庫中所有數據表的權限。
SHOW VIEWShow_view_priv表示授予用戶可以查看特定數據庫中已有視圖的視圖定義的權限。
CREATE ROUTINECreate_routine_priv表示授予用戶可以為特定的數據庫創建存儲過程和存儲函數的權限。
ALTER ROUTINEAlter_routine_priv表示授予用戶可以更新和刪除數據庫中已有的存儲過程和存儲函數的權限。
INDEXIndex_priv表示授予用戶可以在特定數據庫中的所有數據表上定義和刪除索引的權限。
DROPDrop_priv表示授予用戶可以刪除特定數據庫中所有表和視圖的權限。
CREATE TEMPORARY TABLESCreate_tmp_table_priv表示授予用戶可以在特定數據庫中創建臨時表的權限。
CREATE VIEWCreate_view_priv表示授予用戶可以在特定數據庫中創建新的視圖的權限。
EXECUTE ROUTINEExecute_priv表示授予用戶可以調用特定數據庫的存儲過程和存儲函數的權限。
LOCK TABLESLock_tables_priv表示授予用戶可以鎖定特定數據庫的已有數據表的權限。
ALL 或 ALL PRIVILEGES 或 SUPERSuper_priv表示以上所有權限/超級權限

2.6.2 表的權限類型

  • 授予表權限時,<權限類型>可以指定為以下值:
權限名稱對應user表中的字段說明
SELECTSelect_priv授予用戶可以使用 SELECT 語句進行訪問特定表的權限
INSERTInsert_priv授予用戶可以使用 INSERT 語句向一個特定表中添加數據行的權限
DELETEDelete_priv授予用戶可以使用 DELETE 語句從一個特定表中刪除數據行的權限
DROPDrop_priv授予用戶可以刪除數據表的權限
UPDATEUpdate_priv授予用戶可以使用 UPDATE 語句更新特定數據表的權限
ALTERAlter_priv授予用戶可以使用 ALTER TABLE 語句修改數據表的權限
REFERENCESReferences_priv授予用戶可以創建一個外鍵來參照特定數據表的權限
CREATECreate_priv授予用戶可以使用特定的名字創建一個數據表的權限
INDEXIndex_priv授予用戶可以在表上定義索引的權限
ALL 或 ALL PRIVILEGES 或 SUPERSuper_priv所有的權限名

2.6.3 列的權限類型

  • 授予列權限時,<權限類型>的值只能指定為 SELECT、INSERT 和 UPDATE,同時權限的后面需要加上列名列表 column-list。

2.6.4 用戶的權限類型

  • 最有效率的權限是用戶權限。授予用戶權限時,<權限類型>除了可以指定為授予數據庫權限時的所有值之外,還可以是下面這些值:
    • CREATE USER:表示授予用戶可以創建和刪除新用戶的權限。
    • SHOW DATABASES:表示授予用戶可以使用 SHOW DATABASES 語句查看所有已有的數據庫的定義的權限。
  • 實例
    1. 用戶 testuser1 對所有的數據有查詢、插入權限,并授予 GRANT 權限。
      GRANT SELECT,INSERT ON *.* TO 'testuser1'@'localhost' WITH GRANT OPTION;
    2. 查詢用戶 testuser1 的權限。
      SHOW GRANTS FOR 'testuser1'@'localhost';
      在這里插入圖片描述

2.6 刪除用戶權限 REVOKE

  • 問題背景
    在 MySQL 中,可以使用 REVOKE 語句刪除某個用戶的某些權限(此用戶不會被刪除),在一定程度上可以保證系統的安全性
    例如,如果數據庫管理員覺得某個用戶不應該擁有 DELETE 權限,那么就可以刪除 DELETE 權限。
  • 要使用 REVOKE 語句,必須擁有 MySQL 數據庫的全局 CREATE USER 權限或 UPDATE 權限

刪除用戶某些特定的權限

  • 基本語法
    • priv_type 參數表示權限的類型;
    • column_list 參數可選,表示權限作用于哪些列上,沒有該參數時作用于整個表上;
    • user 參數由用戶名和主機名構成,格式為“username’@‘hostname’”。
REVOKE priv_type [(column_list)]...
ON database.table
FROM user [, user]...
  • 實例1
    1. 使用 REVOKE 語句取消用戶 testuser1 的插入權限
      REVOKE INSERT ON *.* FROM 'testuser1 '@'localhost';
    2. 查看 testuser1 的權限
      結果顯示, testuser1 用戶沒有了INSERT權限,刪除 testuser1 用戶的 INSERT 權限成功。
      SHOW GRANTS FOR 'testuser1 '@'localhost';
      在這里插入圖片描述

刪除特定用戶的所有權限

  • 基本語法
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...

2.8 修改用戶密碼

修改普通用戶密碼

  • 在 MySQL 中,只有 root 用戶可以通過更新 MySQL 數據庫來更改密碼。使用 root 用戶登錄到 MySQL 服務器后,可以修改普通用戶密碼。
    基本語法:
    • username 參數是普通用戶的用戶名,
    • hostname 參數是普通用戶的主機名,
    • newpwd 是要更改的新密碼。
ALTER USER 'username'@'localhost' IDENTIFIED BY 'newpwd';
# 或
SET PASSWORD FOR 'username'@'localhost' = 'newpwd';
  • 實例
    1. 創建一個沒有密碼的 testuser 用戶
      CREATE USER 'testuser'@'localhost';
    2. root 用戶登錄 MySQL 服務器后,再使用 SET 語句將 testuser 用戶的密碼修改為“newpwd”,
      ALTER USER 'testuser'@'localhost' IDENTIFIED BY 'newpwd';
      在這里插入圖片描述
    3. 退出 MySQL 服務器,使用 testuser 用戶登錄,輸入密碼“newpwd”
      由運行結果可以看出,testuser 用戶登錄成功,修改密碼成功。
      mysql -utestuser -p
      在這里插入圖片描述

修改root用戶密碼

  • mysqladmin 命令可在Windows 命令行窗口(cmd)中修改root密碼。
    基本語法:
    • usermame 指需要修改密碼的用戶名稱,在這里指定為 root 用戶;
    • hostname 指需要修改密碼的用戶主機名,該參數可以不寫,默認是 localhost;
    • password 為關鍵字,而不是指舊密碼;
    • newpwd 為新設置的密碼,必須用雙引號括起來。如果使用單引號會引發錯誤,可能會造成修改后的密碼不是你想要的。
mysqladmin -u username -h hostname -p password "newpwd"
  • SET PASSWORD 命令可以用來重新設置其他用戶的登錄密碼或者自己使用的賬戶的密碼。
    • NEWPWD當前賬戶的新密碼。
SET PASSWORD = "NEWPWD";
  • 實例1:mysqladmin 命令修改用戶密碼。
    1. 使用 mysqladmin 將 root 用戶的密碼修改為“rootpwd”
      運行結果中,輸入密碼后會提示在命令行界面上使用密碼可能不安全的警告信息,因為在命令行輸入密碼時,MySQL 服務器就會提示這些安全警告信息。
      mysqladmin -u root -p password "rootpwd"
    2. 用修改后的“rootpwd”密碼登錄 root 用戶。
      mysql -u root -p
      在這里插入圖片描述
  • 實例2:SET PASSWORD命令修改用戶密碼。
    使用 root 用戶登錄到 MySQL 服務器后,更改root密碼。
    SET PASSWORD = "rootpwd3";
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24536.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24536.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24536.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java常見錯誤-內部類-簡要分析

Java常見錯誤-內部類-簡要分析 概念分類成員內部類&#xff08;非靜態內部類&#xff09;靜態內部類成員內部類和靜態內部類區別 局部內部類匿名內部類 注意事項總結 概念 ? 內部類&#xff0c;顧名思義&#xff0c;就是在一個類的內部定義的類。這種設計允許將一個類的實現細…

深度學習-10-測試

深度學習-10-測試 本文是《深度學習入門2-自製框架》 的學習筆記&#xff0c;記錄自己學習心得&#xff0c;以及對重點知識的理解。如果內容對你有幫助&#xff0c;請支持正版&#xff0c;去購買正版書籍&#xff0c;支持正版書籍不僅是尊重作者的辛勤勞動&#xff0c;也是鼓勵…

Web前端ES6-ES13筆記合集(下)

#### 五.ES10新特性 ##### 1. Object.fromEntries > Object.fromEntries()方法允許你輕松地將鍵值對列表轉換為對象 js const arr [["name", "kerwin"], ["age", 100]]; console.log(Object.fromEntries(arr))//{name: kerwin, age: 100} …

pytorch 筆記:pytorch 優化內容(更新中)

1 Tensor創建類 1.1 直接創建Tensor&#xff0c;而不是從Python或Numpy中轉換 不要使用原生Python或NumPy創建數據&#xff0c;然后將其轉換為torch.Tensor直接用torch.Tensor創建或者直接&#xff1a;torch.empty(), torch.zeros(), torch.full(), torch.ones(), torch.…

樹莓派【Raspberry Pi-64位】3b+,Pi4J 2.0入門

一.前言: 前面的文章講解了樹莓派在centos7 arm64版本下的使用,用一款智能小車為例子,做了代碼實踐。 由于centos7不再維護,且Pi4J 1.x版本也因為WiringPi 的局限,Pi4J從1.x升級為2.x.所以本專欄的技術棧也將進行調整,A.從centos7系統回到Raspberry Pi-64位系統。B.Pi4…

4.通用編程概念

目錄 一、變量與常量1.1 變量1.2 常量 二、遮蔽三、數據類型3.1 標量類型1. 整型2. 浮點型3. 布爾類型4.字符類型 3.2 復合類型1. 元組2. 數組 四、函數五、語句和表達式六、函數的返回值 一、變量與常量 1.1 變量 在Rust中默認的變量是不可變的&#xff0c;如果修改其值會導致…

《青少年編程與數學》課程方案:4、課程策略

《青少年編程與數學》課程方案&#xff1a;4、課程策略 一、工程師思維二、使命感驅動三、價值觀引領四、學習現代化五、工作生活化六、與時代共進 《青少年編程與數學》課程策略強調采用工程師思維&#xff0c;避免重復造輪子&#xff0c;培養使命感&#xff0c;通過探索興趣、…

編程語言有哪些?這些希望你都知道

編程語言有哪些 編程語言有很多種&#xff0c;包括但不限于以下幾種&#xff1a; Java&#xff1a;當今最普遍使用的開發語言之一&#xff0c;簡單易學&#xff0c;且跨平臺性非常強&#xff0c;對網絡開發的支持令人稱贊。Python&#xff1a;語法清楚&#xff0c;干凈&#…

【Vue】如何提供訪問vuex的數據

文章目錄 一、提供數據二、訪問Vuex中的數據通過$store訪問的語法1&#xff09;模板中使用2&#xff09;組件邏輯中使用3&#xff09;js文件中使用 三、通過輔助函數 - mapState獲取 state中的數據 一、提供數據 State提供唯一的公共數據源&#xff0c;所有共享的數據都要統一…

[office] 快速刪除excel中的空行和列的方法 #其他#學習方法#經驗分享

快速刪除excel中的空行和列的方法 用戶在網上下載好的Excel表格打開之后發現有很多空白行&#xff0c;怎么樣將這些空白行或單元格一次性刪除掉呢?下面教大家在Excel中用定位一次性可以把空白行刪除 用戶在網上下載好的Excel表格打開之后發現有很多空白行&#xff0c;怎么樣將…

Vue3 使用audio播放語音+監聽播放語音完成事件

需求&#xff1a;輸入一段文字&#xff0c;點擊語音框&#xff0c;將本地語音&#xff08;提前準備好的&#xff09; 播放出來 播放中效果 代碼 <div class"listConAI" click"handleOpenSpeech" ><imgsrc"../../../../assets/images/blueo…

web前端 孫俏:深度探索與實戰之路

web前端 孫俏&#xff1a;深度探索與實戰之路 在這個數字化、信息化的時代&#xff0c;web前端技術以其獨特的魅力&#xff0c;吸引著越來越多的開發者投身其中。今天&#xff0c;我們將跟隨孫俏的腳步&#xff0c;一同探索web前端的深度與廣度&#xff0c;揭開其神秘的面紗。…

中文文案寫作有哪些合適的AIGC工具?

這是計育韜老師第 8 次開展面向全國高校的新媒體技術公益巡講活動了。而在每場講座尾聲&#xff0c;互動答疑環節往往反映了高校師生當前最普遍的運營困境&#xff0c;特此計老師在現場即興答疑之外&#xff0c;會盡量選擇有較高價值的提問進行文字答疑梳理。 *本輪巡講主題除了…

【Vue】開啟嚴格模式及Vuex的單項數據流

文章目錄 一、引出問題二、開啟嚴格模式 一、引出問題 目標 明確 vuex 同樣遵循單向數據流&#xff0c;組件中不能直接修改倉庫的數據 這樣數據的流向才會更加清晰&#xff0c;將來對數據的修改&#xff0c;都在倉庫內部實現的&#xff0c;更易于維護 直接在組件中修改Vuex中…

Git:版本控制的藝術與GitLab實戰指南

在當今快速發展的軟件開發領域&#xff0c;高效、協同的代碼管理是項目成功的關鍵。Git&#xff0c;作為一款分布式版本控制系統&#xff0c;憑借其強大的功能和靈活性&#xff0c;成為了眾多開發者首選的版本控制工具。本文將帶您深入探索Git的核心概念、基礎操作&#xff0c;…

B3870 [GESP202309 四級] 變長編碼

[GESP202309 四級] 變長編碼 題目描述 小明剛剛學習了三種整數編碼方式&#xff1a;原碼、反碼、補碼&#xff0c;并了解到計算機存儲整數通常使用補碼。但他總是覺得&#xff0c;生活中很少用到 2 31 ? 1 2^{31}-1 231?1 這么大的數&#xff0c;生活中常用的 0 ~ 100 0…

Spring進階技巧:利用AOP提前介入的巧妙實踐

Spring框架中的面向切面編程&#xff08;AOP&#xff09;是一種強大的機制&#xff0c;它允許開發者在不修改原有代碼的情況下&#xff0c;對程序進行橫向切面的功能擴展。AOP提供了一種方式&#xff0c;可以在目標Bean的生命周期早期階段就實施切面邏輯&#xff0c;這為我們在…

Python 中如何使用 lambda 函數

在 Python 中&#xff0c;可以使用 lambda 函數來創建匿名函數。lambda 函數的語法是&#xff1a;lambda 參數: 表達式。以下是一些使用 lambda 函數的例子&#xff1a; 通過 lambda 函數來計算兩個數的和&#xff1a; add lambda x, y: x y print(add(2, 3)) # 輸出 5通過…

Oracle 日志挖掘

oracle 11g 日志挖掘測試 需要開啟補充日志 alter database add supplemental log data; SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;在用戶下執行一些刪除&#xff0c;插入等操作 SQL> create table zxy( …

LLM評測數據集

1. C-Eval 數據集源地址: C-Eval Official Repository 數據范圍: 該數據集包括學科類知識測試&#xff0c;涵蓋廣泛的學科知識&#xff0c;例如數學、物理、化學等。 數據集大小及數據形式: 數據集包含13,948道單選題&#xff0c;題目均為中文。 論文地址: C-Eval: A Multi-…