MySQL是一個多用戶管理的數據庫,可以為不同用戶分配不同的權限,分為root用戶和普通用戶,root用戶為超級管理員,擁有所有權限,而普通用戶擁有指定的權限。
MySQL是通過權限表來控制用戶對數據庫訪問的,權限表存放在mysql數據庫中,主要的權限表有以下幾個:user,db,host,table_priv,columns_priv和procs_priv,先帶你了解的是user表。
通常用戶信息、修改用戶的密碼、刪除用戶及分配權限等就是在mysql數據庫的user表中。
用戶列(用戶連接MySQL數據庫需要輸入的信息)
Host:主機名,雙主鍵之一,值為%時表示匹配所有主機。User:用戶名,雙主鍵之一。Password:密碼名。
Host | User | Password |
% | domain_check | *55B565DA3839E5955A68EA96EB735 |
localhost | domain_check | *55B565DA3839E5955A68EA96EB735 |
127.0.0.1 | domain_check | *55B565DA3839E5955A68EA96EB735 |
126.26.98.25 | domain_check | *55B565DA3839E5955A68EA96EB735 |
localhost | ||
::1 | root | *26C378D308851D5C717C13623EFD6 |
localhost | root | *26C378D308851D5C717C13623EFD6 |
127.0.0.1 | root | *26C378D308851D5C717C13623EFD6 |
(root,%),表示可以遠程登錄,並且是除服務器外的其他任何終端,%表示任意IP都可登錄。
(root,localhost), 表示可以本地登錄,即可以在服務器上登陸,localhost則只允許本地登錄。
(root,127.0.0.1 ),表示可以本機登陸,即可以在服務器上登陸
(root,sv01),表示主機名為sv1可以登陸,sv01具體指的哪台機器,可以在cat /etc/hostname查看
(root,::1) , 表示本機可以登陸, 看密碼都是相同嘛,具體::1代表意義,待查
權限列
權限列決定了用戶的權限,描述了用戶在全局范圍內允許對數據庫和數據庫表進行的操作,字段類型都是枚舉Enum,值只能是Y或N,Y表示有權限,N表示沒有權限。
權限字段名稱 | 備注說明 |
Select_priv | 確定用戶是否可以通過SELECT命令選擇數據 |
Insert_priv | 確定用戶是否可以通過INSERT命令插入數據 |
Delete_priv | 確定用戶是否可以通過DELETE命令刪除現有數據 |
Update_priv | 確定用戶是否可以通過UPDATE命令修改現有數據 |
Create_priv | 確定用戶是否可以創建新的數據庫和表 |
Drop_priv | 確定用戶是否可以刪除現有數據庫和表 |
Reload_priv | 確定用戶是否可以執行刷新和重新加載MySQL所用各種內部緩存的特定命令,包括日志、權限、主機、查詢和表重新加載權限表 |
Shutdown_priv | 確定用戶是否可以關閉MySQL服務器在將此權限提供給root賬戶之外的任何用戶時,都應當非常謹慎 |
Process_priv | 確定用戶是否可以通過SHOW PROCESSLIST命令查看其他用戶的進程 |
File_priv | 確定用戶是否可以執行SELECT INTO OUTFILE和LOAD DATA INFILE命令 |
安全列
安全字段名稱 | 備注說明 |
ssl_type | 支持ssl標准加密安全字段 |
ssl_cipher | 支持ssl標准加密安全字段 |
x509_issuer | 支持x509標准字段 |
x509_subject | 支持x509標准字段 |
password_expired | 密碼是否過期。Y:說明該用戶密碼已過期 N:沒有過期 |
plugin | 5.5.7開始,mysql引入plugins以進行用戶連接時的密碼驗證,plugin創建外部/代理用戶 |
authentication_string | 通過authentication_string可以控制兩者的映射關系,(PAM plugin等,PAM可以支持多個服務名) |
資源控制列
控制字段名稱 | 字段類型 | 是否為空 | 默認值 | 備注說明 |
max_questions | int(11)unsigned | NO | 0 | 每小時允許執行多少次查詢:0表示無限制 |
max_updates | int(11)unsigned | NO | 0 | 每小時可以執行多少次更新:0表示無限制 |
max_connections | int(11)unsigned | NO | 0 | 每小時可以建立的多少次連接:0表示無限制 |
max_user_connections | int(11)unsigned | NO | 0 | 單用戶可以同時具有的連接數:0表示無限制 |
常用命令
查詢所有用戶 mysql> select Host,User,Password from user;
查詢用戶權限:all表示所有權限,select表示只查權限,update表示只改權限,delete表示只刪權限等。 mysql> show grants for "user"@"host"; mysql> show grants for "root"@"localhost";
添加授權用戶(新創建的用戶,默認情況下是沒有任何權限的):使用root用戶連接到服務器 mysql> create user "用戶名"@"IP地址" identified by "密碼"; mysql> create user "haidon"@"%" identified by "123456"; mysql> create user "haidon"@"localhost" identified by "123456"; IP地址的表示方式: 1.% 表示用戶可以從任何地址連接到服務器 2.localhost 表示用戶只能從本地連接到服務器 3.指定一個ip表示用戶只能從此ip連接到服務器
分配用戶權限(給用戶授權) mysql> grant 權限列表 on 庫.表 to "用戶名"@"ip地址" with grant option; mysql> grant all privileges on *.* to "haidon"@"%" with grant option; mysql> grant all privileges on *.* to "haidon"@"%" identified by 'test' with grant option; mysql> grant all privileges on domain_check.tb_user to "haidon"@"localhost" with grant option; mysql> grant select on domain_check.tb_user to "haidon"@"localhost" with grant option; mysql> grant select,insert on domain_check.tb_user to "haidon"@"132.24.98.25" with grant option; 1.權限列表:select、update、delete、insert、alter、drop、create、...(show) 2.庫.表:*.*表示所有庫的所有表。with grant option表示它具有grant權限。密碼是test。 3.如果帶了 with grant option,那么用戶haidon可以將select ,update權限傳遞給其他用戶( 如xiaodon)。 4.如果沒帶 with grant option,那么用戶haidon不能給用戶xiaodon授權。 5.all后面加上privileges,具體到哪些權限時得看MySQL版本,5.7版本不加privileges,8.0版本加privileges。 6.mysql> insert into user values("%","haidon",password("test"),"Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"); mysql> flush privileges; 這兩句和上面第3句grant的效果是一樣的。 7.mysql> insert into user (host,user) values("132.24.98.25","haidon"); mysql> insert into db values("132.24.98.25","haidon","Y","Y","Y","Y","Y","Y","N","N","N","N") mysql> flush privileges; 這三句和上面第6句grant的效果是一樣的。
收回用戶權限 mysql> revoke all on *.* from "haidon"@"localhost"; mysql> revoke all on domain_check.tb_user from "haidon"@"localhost"; mysql> revoke select on *.* from "haidon"@"localhost";
刪除授權用戶 mysql> drop user "用戶名"@"ip地址" mysql> drop user "haidon"@"%" mysql> delete from user where user='haidon'; mysql> flush privileges;
https://blog.csdn.net/lthirdonel/article/details/79011033
https://www.cnblogs.com/yang--yang/p/7607736.html