MySQL 用戶管理

權限表

user 表

user表是MySQL中一個重要的權限表,記錄允許連接服務器的賬號信息,
user表有42個字段主要分爲四類:

用戶列

有 host,user, password 字段,連接時只有這三個值都匹配才能連接,修改密碼其實就是修改password字段的值

權限列

類型爲枚舉:值爲 Y 或 N
可以使用 grant 或 update 改變user表的字段來修改權限

安全列

其中兩個是 和 ssl相關
用戶可以使用 show variables like “have_openssl” 查看服務是否支持ssl功能

在這裏插入圖片描述

資源控制類

max_questions----> 用戶每小時允許的查詢操作次數
max_updates—被允許更新次數
max_connections—每小時連接次數
max_user_connections----用戶同時建立的連接數量

db表 host表

db:存儲了用戶對db的操作權限
host:記錄某個主機對DB的操作權限
兩者相結合

注意:好像MySQL5.7版本後是沒有host表

tables_priv && columns_priv 表

tables_priv 用來對標設置操作權限
columns_priv 用來對錶的某一列設置權限

對錶的權限包括:select update delete insert drop alter create grant references 等

proces_priv 表

對------ 存儲過程,存儲函數設置操作權限
proc_priv 表示擁有的權限 包括 ----- execute、alter routine、grant

賬戶管理

登錄退出MySQL服務器

參數
- h 主機名或ip,默認是localhost
- u 用戶名
- p 密碼
- P 端口號
- 數據庫名,在命令最後指定

新建用戶

兩種方式:1.使用 create user 或 grant語句 2.操作MySQL的授權表
但是一般我們都使用第一種方式
注意:新建的用戶沒有任何權限

# 第一種方式
# identified 用來設置用戶密碼
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';

# 第一種方式 使用 grant 所有數據庫都有select  && update 權限
GRANT SELECT,UPDATE  ON *.* TO 'testUser'@'localhost' IDENTIFIED BY 'testpwd';  


# 第二種方式 修改user表
INSERT INTO user (Host,User,Password) VALUES('localhost','customer1',PASSWORD('customer1'));

刪除用戶

# 刪除用戶本地登錄權限
drop user "user_name"@"localhost"

# 刪除用戶
delete from user where host=‘hostname’ and user='username'

root修改自己密碼

1.修改MySQL數據庫中的user表
UPDATE mysql.user set Password=password(“rootpwd2”)
WHERE User=“root” and Host=“localhost”;

2.使用MySQLadmin
mysqladmin -u username -p password “newpwd”

更改權限後,使用 flush privileges
3.使用 set password 設置密碼
set password=password(“rootpwd”)

root用戶修改 普通用戶密碼

  1. 使用set 語句
  • set password for “user”@“host” = password(“somepwd”)
  • 如果是普通用戶修改則可以省略for
  • set password = password(“somepwd”)
  1. 使用update語句修改用戶密碼
    update mysql.user set password=password(“userpwd”) where user=“username” and host=“hostname”
  2. 使用grant 修改密碼
grant usage on *.* to 'username'@'password' identified by "userpassword"
  1. 一個普通用戶修改自己密碼
  • set password = password(“userpwd”)

忘記root密碼解決辦法

  1. 使用 --skip-grant-tables 選項,MySQL服務啓動時將不會加載權限判斷

mysqld --skip-grant-tables

  1. 直接mysql -u root 就好了

musql -u root
此時應該直接連上MySQL了

  1. 登錄成功設置root密碼

update mysql.user set password=password(“userpwd”)

  1. 加載權限

flush privileges

權限管理

MySQL 的各種權限

賬號的權限都存儲在,user、db、host、tables_priv、columns_priv、proces_priv

授權

  1. 全局層級

grant all on . 和 revoke all on . 授予或撤銷全局權限

  1. 數據庫層級
  2. 表級別
  3. 列級別
    示例演示
    使用 grant 創建一個新用戶 grantuser 密碼爲 grantpwd

grant select,insert on . to ‘grantuser’@‘localhost’ identified by ‘grantpwd’ with grant option

with 後面可以跟的參數
grant option :被授權的用戶,可以講這些權限賦予別的用戶

收回權限
取消用戶的update權限

revoke update on . from ‘testuser’@‘localhost’;

查看用戶的權限信息
show grants for ‘user’@‘host’

select privileges from user where user=“username” ,host=“hostname”;

訪問控制

連接覈實階段

當用戶連接MySQL時,MySQL會去user表中驗證 host user password ,這三個字段是否匹配上,若果匹配上則允許登錄,否則拒絕訪問

請求覈實階段

階段2:
1.建立連接後,這個連接上的每個請求服務器都會檢查用戶要執行的操作,判斷用戶是否有足夠的權限來執行,權限來自表,庫級 db、用戶級 user、表級別 tables_priv 、列級別 columns_priv。 2.確認權限時,先檢查user表如果被授權,則檢查db表如果被授權,則繼續檢查,tables_priv和columns_priv 表,如果所有權限檢查過了則執行,否則error

發佈了50 篇原創文章 · 獲贊 9 · 訪問量 3438
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章