表名 | user |
db |
---|---|---|
范圍列 | Host |
Host |
User |
Db |
|
User |
||
權(quán)限列 | Select_priv |
Select_priv |
Insert_priv |
Insert_priv |
|
Update_priv |
Update_priv |
|
Delete_priv |
Delete_priv |
|
Index_priv |
Index_priv |
|
Alter_priv |
Alter_priv |
|
Create_priv |
Create_priv |
|
Drop_priv |
Drop_priv |
|
Grant_priv |
Grant_priv |
|
Create_view_priv |
Create_view_priv |
|
Show_view_priv |
Show_view_priv |
|
Create_routine_priv |
Create_routine_priv |
|
Alter_routine_priv |
Alter_routine_priv |
|
Execute_priv |
Execute_priv |
|
Trigger_priv |
Trigger_priv |
|
Event_priv |
Event_priv |
|
Create_tmp_table_priv |
Create_tmp_table_priv |
|
Lock_tables_priv |
Lock_tables_priv |
|
References_priv |
References_priv |
|
Reload_priv |
||
Shutdown_priv |
||
Process_priv |
||
File_priv |
||
Show_db_priv |
||
Super_priv |
||
Repl_slave_priv |
||
Repl_client_priv |
||
Create_user_priv |
||
Create_tablespace_priv |
||
安全專欄 | ssl_type |
|
ssl_cipher |
||
x509_issuer |
||
x509_subject |
||
plugin |
||
authentication_string |
||
password_expired |
||
password_last_changed |
||
password_lifetime |
||
account_locked |
||
資源控制列 | max_questions |
|
max_updates |
||
max_connections |
||
max_user_connections |
User權(quán)限表結(jié)構(gòu)中的特殊字段:
此數(shù)值自動(dòng)更新
Account_locked代表此用戶被鎖住,無法使用
在mysql 5.7 以前在user表有password 這個(gè)字段。
2.1.2 Tables_priv和columns_priv權(quán)限表結(jié)構(gòu)
表名 | tables_priv |
columns_priv |
---|---|---|
范圍列 | Host |
Host |
Db |
Db |
|
User |
User |
|
Table_name |
Table_name |
|
Column_name |
||
權(quán)限列 | Table_priv |
Column_priv |
Column_priv |
||
其他列 | Timestamp |
Timestamp |
Grantor |
Tables_priv和columns_priv權(quán)限值
Table Name | Column Name | Possible Set Elements |
---|---|---|
tables_priv |
Table_priv |
'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter', 'Create View', 'Show view', 'Trigger' |
tables_priv |
Column_priv |
'Select', 'Insert', 'Update', 'References' |
columns_priv |
Column_priv |
'Select', 'Insert', 'Update', 'References' |
procs_priv |
Proc_priv |
'Execute', 'Alter Routine', 'Grant' |
2.1.3 procs_priv權(quán)限表結(jié)構(gòu)
Table Name | procs_priv |
---|---|
Scope columns | Host |
Db |
|
User |
|
Routine_name |
|
Routine_type |
|
Privilege columns | Proc_priv |
Other columns | Timestamp |
Grantor |
系統(tǒng)權(quán)限表字段長度限制表
Column Name | Maximum Permitted Characters |
---|---|
Host , Proxied_host |
60 |
User , Proxied_user |
32 |
Password |
41 |
Db |
64 |
Table_name |
64 |
Column_name |
64 |
Routine_name |
64 |
權(quán)限認(rèn)證中的大小寫敏感問題
2.2.1 查看用戶權(quán)限信息
查看MYSQL有哪些用戶
mysql> select user,host from mysql.user;
查看已經(jīng)授權(quán)給用戶的權(quán)限信息
例如root
mysql> show grants for root@'localhost';
查看用戶的其他非授權(quán)信息
mysql> show create user root@'localhost';
2.2.2 用戶組成
MySQL的授權(quán)用戶由兩部分組成:用戶名和登錄主機(jī)名
包含特殊字符則是必須的
%和_
兩個(gè)匹配字符,比如'%'代表所有主機(jī), '%.mysql.com'代表來自mysql.com這個(gè)域名下的所有主機(jī), ‘192.168.1.%'代表所有來自192.168.1網(wǎng)段的主機(jī)
User值 | Host 值 | 允許的連接 |
---|---|---|
'fred' | 'h1.example.net' | fred,連接 h1.example.net |
'' | 'h1.example.net' | 任何用戶,從中連接 h1.example.net |
'fred' | '%' | fred,從任何主機(jī)連接 |
'' | '%' | 任何用戶,從任何主機(jī)連接 |
'fred' | '%.example.net' | fred,從example.net域中的任何主機(jī)連接 |
'fred' | 'x.example.%' | fred,從連接 x.example.net,x.example.com, x.example.edu,等; 這可能沒用 |
'fred' | '198.51.100.177' | fred,從主機(jī)與IP地址連接 198.51.100.177 |
'fred' | '198.51.100.%' | fred,從198.51.100C類子網(wǎng)中的任何主機(jī)連接 |
'fred' | '198.51.100.0/255.255.255.0' | 與前面的示例相同 |
2.2.3 修改用戶權(quán)限
執(zhí)行Grant,revoke,set password,rename user命令修改權(quán)限之后, MySQL會自動(dòng)將修改后的權(quán)限信息同步加載到系統(tǒng)內(nèi)存中
如果執(zhí)行insert/update/delete操作上述的系統(tǒng)權(quán)限表之后,則必須再執(zhí)行刷新權(quán)限命令才能同步到系統(tǒng)內(nèi)存中,刷新權(quán)限命令包括:flush privileges
/mysqladmin flush-privileges / mysqladmin reload
如果是修改tables和columns級別的權(quán)限,則客戶端的下次操作新權(quán)限就會生效
如果是修改database級別的權(quán)限,則新權(quán)限在客戶端執(zhí)行use database命令后生效
如果是修改global級別的權(quán)限,則需要重新創(chuàng)建連接新權(quán)限才能生效
如果是修改global級別的權(quán)限,則需要重新創(chuàng)建連接新權(quán)限才能生效 (例如修改密碼)
2.2.4 創(chuàng)建 mysql 用戶
有兩種方式創(chuàng)建MySQL授權(quán)用戶
執(zhí)行create user/grant命令
(推薦方式)# 創(chuàng)建finley 這只是創(chuàng)建用戶并沒有權(quán)限 mysql> CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass'; # 把finley 變成管理員用戶 mysql> GRANT ALL PRIVILEGES ON *.* TO 'finley'@'localhost' WITH GRANT OPTION; #創(chuàng)建用戶并賦予RELOAD,PROCESS權(quán)限 ,在所有的庫和表上 mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost' identified by '123456'; # 創(chuàng)建keme用戶,在test庫,temp表, 上的id列只有select 權(quán)限 mysql> grant select(id) on test.temp to keme@'localhost' identified by '123456';
2.2.4 回收 mysql 權(quán)限
通過revoke命令收回用戶權(quán)限,回收的時(shí)候看一下這個(gè)用戶有哪些權(quán)限然后回收
我對admin 用戶做測試
mysql> show grants for admin@'localhost'; mysql> select user,host from mysql.user; mysql> revoke PROCESS ON *.* FROM admin@'localhost';
2.2.5 刪除 mysql 用戶
通過執(zhí)行drop user
命令刪除MySQL用戶
還可以通過系統(tǒng)權(quán)限表刪除(不建議)
mysql> drop user admin@'localhost';
2.2.6 設(shè)置MySQL用戶資源限制
通過設(shè)置全局變量max_user_connections可以限制所有用戶在同一時(shí)間連接MySQL實(shí)例的數(shù)量,但此參數(shù)無法對每個(gè)用戶區(qū)別對待,所以MySQL提供了對每個(gè)用戶的資源限制管理
MAX_QUERIES_PER_HOUR:一個(gè)用戶在一個(gè)小時(shí)內(nèi)可以執(zhí)行查詢的次數(shù)(基本包含所有語句)
MAX_UPDATES_PER_HOUR:一個(gè)用戶在一個(gè)小時(shí)內(nèi)可以執(zhí)行修改的次數(shù)(僅包含修改數(shù)據(jù)庫或表的語句)
MAX_CONNECTIONS_PER_HOUR:一個(gè)用戶在一個(gè)小時(shí)內(nèi)可以連接MySQL的時(shí)間
MAX_USER_CONNECTIONS:一個(gè)用戶可以在同一時(shí)間連接MySQL實(shí)例的數(shù)量
從5.0.3版本開始,對用戶‘user'@‘%.example.com'的資源限制是指所有通過example.com域名主機(jī)連接user用戶的連接,而不是分別指從host1.example.com和host2.example.com主機(jī)過來的連接
2.2.7 修改 mysql 用戶密碼
修改用戶密碼的方式包括:
mysql> ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; mysql> SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('mypass'); mysql> GRANT USAGE ON *.* TO 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; shell> mysqladmin -u user_name -h host_name password "new_password"
創(chuàng)建用戶時(shí)指定密碼
mysql> CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
修改當(dāng)前會話本身用戶密碼的方式包括:
mysql> ALTER USER USER() IDENTIFIED BY 'mypass'; mysql> SET PASSWORD = PASSWORD('mypass');
2.2.8 設(shè)置MySQL用戶密碼過期策略
設(shè)置系統(tǒng)參數(shù)default_password_lifetime作用于所有的用戶賬戶
如果為每個(gè)用戶設(shè)置了密碼過期策略,則會覆蓋上述系統(tǒng)參數(shù)
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY; ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER; 密碼不過期 ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE DEFAULT; 默認(rèn)過期策略
手動(dòng)強(qiáng)制某個(gè)用戶密碼過期
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
2.2.9 mysql 用戶 lock
通過執(zhí)行create user/alter user命令中帶account lock/unlock子句設(shè)置用戶的lock狀態(tài)
Create user語句默認(rèn)的用戶是unlock狀態(tài)
# 創(chuàng)建的時(shí)候給用戶鎖定 mysql> create user abc2@localhost identified by 'mysql' account lock;
Alter user語句默認(rèn)不會修改用戶的lock/unlock狀態(tài)
# 修改用戶為unlock mysql> alter user abc2@'localhost' account unlock;
當(dāng)客戶端使用lock狀態(tài)的用戶登錄MySQL時(shí),會收到如此報(bào)錯(cuò)
Access denied for user ‘user_name'@'host_name'.
Account is locked.
官方文檔:https://dev.mysql.com/doc/refman/5.7/en/privilege-system.html
到此這篇關(guān)于Mysql 用戶權(quán)限管理實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Mysql 用戶權(quán)限管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:迪慶 南充 龍巖 西寧 麗水 自貢 徐州 無錫
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Mysql 用戶權(quán)限管理實(shí)現(xiàn)》,本文關(guān)鍵詞 Mysql,用戶,權(quán)限,管理,實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。上一篇:MySQL 查詢速度慢的原因