久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Mysql 用戶權(quán)限管理實(shí)現(xiàn)

瀏覽:87日期:2023-10-02 14:18:23
1. MySQL 權(quán)限介紹

mysql中存在4個(gè)控制權(quán)限的表,分別為user表,db表,tables_priv表,columns_priv表,我當(dāng)前的版本mysql 5.7.22 。

mysql權(quán)限表的驗(yàn)證過(guò)程為:

先從user表中的Host,User,Password這3個(gè)字段中判斷連接的ip、用戶名、密碼是否存在,存在則通過(guò)驗(yàn)證。 通過(guò)身份認(rèn)證后,進(jìn)行權(quán)限分配,按照user,db,tables_priv,columns_priv的順序進(jìn)行驗(yàn)證。即先檢查全局權(quán)限表user,如果user中對(duì)應(yīng)的權(quán)限為Y,則此用戶對(duì)所有數(shù)據(jù)庫(kù)的權(quán)限都為Y,將不再檢查db, tables_priv,columns_priv;如果為N,則到db表中檢查此用戶對(duì)應(yīng)的具體數(shù)據(jù)庫(kù),并得到db中為Y的權(quán)限;如果db中為N,則檢查tables_priv中此數(shù)據(jù)庫(kù)對(duì)應(yīng)的具體表,取得表中的權(quán)限Y,以此類(lèi)推。1.1 MySQL 權(quán)限級(jí)別

分為:全局性的管理權(quán)限: 作用于整個(gè)MySQL實(shí)例級(jí)別數(shù)據(jù)庫(kù)級(jí)別的權(quán)限: 作用于某個(gè)指定的數(shù)據(jù)庫(kù)上或者所有的數(shù)據(jù)庫(kù)上數(shù)據(jù)庫(kù)對(duì)象級(jí)別的權(quán)限:作用于指定的數(shù)據(jù)庫(kù)對(duì)象上(表、視圖等)或者所有的數(shù)據(jù)庫(kù)對(duì)象上

權(quán)限存儲(chǔ)在mysql庫(kù)的user, db, tables_priv, columns_priv, and procs_priv這幾個(gè)系統(tǒng)表中,待MySQL實(shí)例啟動(dòng)后就加載到內(nèi)存中

查看mysql 有哪些用戶:

mysql> select user,host from mysql.user;

來(lái)看root 用戶在權(quán)限系統(tǒng)表中的數(shù)據(jù):

mysql> use mysql;mysql> select * from user where user=’root’ and host=’localhost’G; #所有權(quán)限都是Y ,就是什么權(quán)限都有mysql> select * from db where user=’root’ and host=’localhost’G; # 沒(méi)有此條記錄mysql> select * from tables_priv where user=’root’ and host=’localhost’; # 沒(méi)有此條記錄 mysql> select * from columns_priv where user=’root’ and host=’localhost’; # 沒(méi)有此條記錄 mysql> select * from procs_priv where user=’root’ and host=’localhost’; # 沒(méi)有此條記錄

上面說(shuō)過(guò):權(quán)限的驗(yàn)證過(guò)程

查看root@’localhost’用戶的權(quán)限

mysql> show grants for root@localhost;+---------------------------------------------------------------------+| Grants for root@localhost |+---------------------------------------------------------------------+| GRANT ALL PRIVILEGES ON *.* TO ’root’@’localhost’ WITH GRANT OPTION || GRANT PROXY ON ’’@’’ TO ’root’@’localhost’ WITH GRANT OPTION|+---------------------------------------------------------------------+2 rows in set (0.00 sec)2. MySQL 權(quán)限詳解

All/All Privileges權(quán)限代表全局或者全數(shù)據(jù)庫(kù)對(duì)象級(jí)別的所有權(quán)限

Alter權(quán)限代表允許修改表結(jié)構(gòu)的權(quán)限,但必須要求有create和insert權(quán)限配合。如果是rename表名,則要求有alter和drop原表, create和insert新表的權(quán)限

Alter routine權(quán)限代表允許修改或者刪除存儲(chǔ)過(guò)程、函數(shù)的權(quán)限

Create權(quán)限代表允許創(chuàng)建新的數(shù)據(jù)庫(kù)和表的權(quán)限

Create routine權(quán)限代表允許創(chuàng)建存儲(chǔ)過(guò)程、函數(shù)的權(quán)限

Create tablespace權(quán)限代表允許創(chuàng)建、修改、刪除表空間和日志組的權(quán)限

Create temporary tables權(quán)限代表允許創(chuàng)建臨時(shí)表的權(quán)限

Create user權(quán)限代表允許創(chuàng)建、修改、刪除、重命名user的權(quán)限

Create view權(quán)限代表允許創(chuàng)建視圖的權(quán)限

Delete權(quán)限代表允許刪除行數(shù)據(jù)的權(quán)限

Drop權(quán)限代表允許刪除數(shù)據(jù)庫(kù)、表、視圖的權(quán)限,包括truncate table命令

Event權(quán)限代表允許查詢,創(chuàng)建,修改,刪除MySQL事件

Execute權(quán)限代表允許執(zhí)行存儲(chǔ)過(guò)程和函數(shù)的權(quán)限

File權(quán)限代表允許在MySQL可以訪問(wèn)的目錄進(jìn)行讀寫(xiě)磁盤(pán)文件操作,可使用的命令包括load data infile,select … into outfile,load file()函數(shù)

Grant option權(quán)限代表是否允許此用戶授權(quán)或者收回給其他用戶你給予的權(quán)限,重新付給管理員的時(shí)候需要加上這個(gè)權(quán)限

Index權(quán)限代表是否允許創(chuàng)建和刪除索引

Insert權(quán)限代表是否允許在表里插入數(shù)據(jù),同時(shí)在執(zhí)行analyze table,optimize table,repair table語(yǔ)句的時(shí)候也需要insert權(quán)限

Lock權(quán)限代表允許對(duì)擁有select權(quán)限的表進(jìn)行鎖定,以防止其他鏈接對(duì)此表的讀或?qū)?/p>

Process權(quán)限代表允許查看MySQL中的進(jìn)程信息,比如執(zhí)行show processlist, mysqladmin processlist, show engine等命令

Reference權(quán)限是在5.7.6版本之后引入,代表是否允許創(chuàng)建外鍵

Reload權(quán)限代表允許執(zhí)行flush命令,指明重新加載權(quán)限表到系統(tǒng)內(nèi)存中,refresh命令代表關(guān)閉和重新開(kāi)啟日志文件并刷新所有的表

Replication client權(quán)限代表允許執(zhí)行show master status,show slave status,show binary logs命令

Replication slave權(quán)限代表允許slave主機(jī)通過(guò)此用戶連接master以便建立主從復(fù)制關(guān)系

Select權(quán)限代表允許從表中查看數(shù)據(jù),某些不查詢表數(shù)據(jù)的select執(zhí)行則不需要此權(quán)限,如Select 1+1, Select PI()+2;而且select權(quán)限在執(zhí)行update/delete語(yǔ)句中含有where條件的情況下也是需要的

Show databases權(quán)限代表通過(guò)執(zhí)行show databases命令查看所有的數(shù)據(jù)庫(kù)名

Show view權(quán)限代表通過(guò)執(zhí)行show create view命令查看視圖創(chuàng)建的語(yǔ)句

Shutdown權(quán)限代表允許關(guān)閉數(shù)據(jù)庫(kù)實(shí)例,執(zhí)行語(yǔ)句包括mysqladmin shutdown

Super權(quán)限代表允許執(zhí)行一系列數(shù)據(jù)庫(kù)管理命令,包括kill強(qiáng)制關(guān)閉某個(gè)連接命令, change master to創(chuàng)建復(fù)制關(guān)系命令,以及create/alter/drop server等命令

Trigger權(quán)限代表允許創(chuàng)建,刪除,執(zhí)行,顯示觸發(fā)器的權(quán)限

Update權(quán)限代表允許修改表中的數(shù)據(jù)的權(quán)限

Usage權(quán)限是創(chuàng)建一個(gè)用戶之后的默認(rèn)權(quán)限,其本身代表連接登錄權(quán)限

2.1 系統(tǒng)權(quán)限表

User表:存放用戶賬戶信息以及全局級(jí)別(所有數(shù)據(jù)庫(kù))權(quán)限,決定了來(lái)自哪些主機(jī)的哪些用戶可以訪問(wèn)數(shù)據(jù)庫(kù)實(shí)例,如果有全局權(quán)限則意味著對(duì)所有數(shù)據(jù)庫(kù)都有此權(quán)限D(zhuǎn)b表:存放數(shù)據(jù)庫(kù)級(jí)別的權(quán)限,決定了來(lái)自哪些主機(jī)的哪些用戶可以訪問(wèn)此數(shù)據(jù)庫(kù)Tables_priv表:存放表級(jí)別的權(quán)限,決定了來(lái)自哪些主機(jī)的哪些用戶可以訪問(wèn)數(shù)據(jù)庫(kù)的這個(gè)表Columns_priv表:存放列級(jí)別的權(quán)限,決定了來(lái)自哪些主機(jī)的哪些用戶可以訪問(wèn)數(shù)據(jù)庫(kù)表的這個(gè)字段Procs_priv表:存放存儲(chǔ)過(guò)程和函數(shù)級(jí)別的權(quán)限

最重要的還是user表

2.1.1 User和 db 權(quán)限表的結(jié)構(gòu)

表名 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 安全專(zhuān)欄 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)中的特殊字段:

Plugin,authentication_string字段存放用戶認(rèn)證信息 Password_expired設(shè)置成’Y’則表明允許DBA將此用戶的密碼設(shè)置成過(guò)期而且過(guò)期后要求用戶的使用者重置密碼(alter user/set password重置密碼) Password_last_changed作為一個(gè)時(shí)間戳字段代表密碼上次修改時(shí)間,執(zhí)行create user/alter user/set password/grant等命令創(chuàng)建用戶或修改用戶密碼時(shí)此數(shù)值自動(dòng)更新 Password_lifetime代表從password_last_changed時(shí)間開(kāi)始此密碼過(guò)期的天數(shù) Account_locked代表此用戶被鎖住,無(wú)法使用

在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

Routine_type是枚舉類(lèi)型,代表是存儲(chǔ)過(guò)程還是函數(shù) Timestamp和grantor兩個(gè)字段暫時(shí)沒(méi)用

系統(tǒng)權(quán)限表字段長(zhǎng)度限制表

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)證中的大小寫(xiě)敏感問(wèn)題

字段user,password,authencation_string,db,table_name大小寫(xiě)敏感 字段host,column_name,routine_name大小寫(xiě)不敏感2.2 用戶權(quá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’;

Mysql 用戶權(quán)限管理實(shí)現(xiàn)

2.2.2 用戶組成

MySQL的授權(quán)用戶由兩部分組成:用戶名和登錄主機(jī)名

表達(dá)用戶的語(yǔ)法為’user_name’@’host_name’ 單引號(hào)不是必須,但如果其中包含特殊字符則是必須的 ”@‘localhost’代表匿名登錄的用戶 Host_name可以使主機(jī)名或者ipv4/ipv6的地址。 Localhost代表本機(jī), 127.0.0.1代表ipv4本機(jī)地址, ::1代表ipv6的本機(jī)地址 Host_name字段允許使用%和_兩個(gè)匹配字符,比如’%’代表所有主機(jī), ’%.mysql.com’代表

來(lái)自mysql.com這個(gè)域名下的所有主機(jī), ‘192.168.1.%’代表所有來(lái)自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,等; 這可能沒(méi)用 ’fred’ ’198.51.100.177’ fred,從主機(jī)與IP地址連接 198.51.100.177 ’fred’ ’198.51.100.%’ fred,從198.51.100C類(lèi)子網(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會(huì)自動(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級(jí)別的權(quán)限,則客戶端的下次操作新權(quán)限就會(huì)生效

如果是修改database級(jí)別的權(quán)限,則新權(quán)限在客戶端執(zhí)行use database命令后生效

如果是修改global級(jí)別的權(quán)限,則需要重新創(chuàng)建連接新權(quán)限才能生效

如果是修改global級(jí)別的權(quán)限,則需要重新創(chuàng)建連接新權(quán)限才能生效 (例如修改密碼)

2.2.4 創(chuàng)建 mysql 用戶

有兩種方式創(chuàng)建MySQL授權(quán)用戶

執(zhí)行create user/grant命令(推薦方式) 通過(guò)insert語(yǔ)句直接操作MySQL系統(tǒng)權(quán)限表

# 創(chuàng)建finley 這只是創(chuàng)建用戶并沒(méi)有權(quán)限mysql> CREATE USER ’finley’@’localhost’ IDENTIFIED BY ’some_pass’;# 把finley 變成管理員用戶mysql> GRANT ALL PRIVILEGES ON *.* TO ’finley’@’localhost’ WITHGRANT OPTION;#創(chuàng)建用戶并賦予RELOAD,PROCESS權(quán)限 ,在所有的庫(kù)和表上mysql> GRANT RELOAD,PROCESS ON *.* TO ’admin’@’localhost’ identified by ’123456’; # 創(chuàng)建keme用戶,在test庫(kù),temp表, 上的id列只有select 權(quán)限mysql> grant select(id) on test.temp to keme@’localhost’ identified by ’123456’;

2.2.4 回收 mysql 權(quán)限

通過(guò)revoke命令收回用戶權(quán)限,回收的時(shí)候看一下這個(gè)用戶有哪些權(quán)限然后回收我對(duì)admin 用戶做測(cè)試

mysql> show grants for admin@’localhost’;mysql> select user,host from mysql.user;mysql> revoke PROCESS ON *.* FROM admin@’localhost’;

Mysql 用戶權(quán)限管理實(shí)現(xiàn)

2.2.5 刪除 mysql 用戶

通過(guò)執(zhí)行drop user命令刪除MySQL用戶還可以通過(guò)系統(tǒng)權(quán)限表刪除(不建議)

mysql> drop user admin@’localhost’;

2.2.6 設(shè)置MySQL用戶資源限制

通過(guò)設(shè)置全局變量max_user_connections可以限制所有用戶在同一時(shí)間連接MySQL實(shí)例的數(shù)量,但此參數(shù)無(wú)法對(duì)每個(gè)用戶區(qū)別對(duì)待,所以MySQL提供了對(duì)每個(gè)用戶的資源限制管理

MAX_QUERIES_PER_HOUR:一個(gè)用戶在一個(gè)小時(shí)內(nèi)可以執(zhí)行查詢的次數(shù)(基本包含所有語(yǔ)句)

MAX_UPDATES_PER_HOUR:一個(gè)用戶在一個(gè)小時(shí)內(nèi)可以執(zhí)行修改的次數(shù)(僅包含修改數(shù)據(jù)庫(kù)或表的語(yǔ)句)

MAX_CONNECTIONS_PER_HOUR:一個(gè)用戶在一個(gè)小時(shí)內(nèi)可以連接MySQL的時(shí)間

MAX_USER_CONNECTIONS:一個(gè)用戶可以在同一時(shí)間連接MySQL實(shí)例的數(shù)量

從5.0.3版本開(kāi)始,對(duì)用戶‘user’@‘%.example.com’的資源限制是指所有通過(guò)example.com域名主機(jī)連接user用戶的連接,而不是分別指從host1.example.com和host2.example.com主機(jī)過(guò)來(lái)的連接

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)前會(huì)話本身用戶密碼的方式包括:

mysql> ALTER USER USER() IDENTIFIED BY ’mypass’;mysql> SET PASSWORD = PASSWORD(’mypass’);

2.2.8 設(shè)置MySQL用戶密碼過(guò)期策略

設(shè)置系統(tǒng)參數(shù)default_password_lifetime作用于所有的用戶賬戶

default_password_lifetime=180 設(shè)置180天過(guò)期 default_password_lifetime=0 設(shè)置密碼不過(guò)期

如果為每個(gè)用戶設(shè)置了密碼過(guò)期策略,則會(huì)覆蓋上述系統(tǒng)參數(shù)

ALTER USER ’jeffrey’@’localhost’ PASSWORD EXPIRE INTERVAL 90 DAY;ALTER USER ’jeffrey’@’localhost’ PASSWORD EXPIRE NEVER; 密碼不過(guò)期ALTER USER ’jeffrey’@’localhost’ PASSWORD EXPIRE DEFAULT; 默認(rèn)過(guò)期策略

手動(dòng)強(qiáng)制某個(gè)用戶密碼過(guò)期

ALTER USER ’jeffrey’@’localhost’ PASSWORD EXPIRE;

2.2.9 mysql 用戶 lock

通過(guò)執(zhí)行create user/alter user命令中帶account lock/unlock子句設(shè)置用戶的lock狀態(tài)

Create user語(yǔ)句默認(rèn)的用戶是unlock狀態(tài)

# 創(chuàng)建的時(shí)候給用戶鎖定mysql> create user abc2@localhost identified by ’mysql’ account lock;

Alter user語(yǔ)句默認(rèn)不會(huì)修改用戶的lock/unlock狀態(tài)

# 修改用戶為unlockmysql> alter user abc2@’localhost’ account unlock;

當(dāng)客戶端使用lock狀態(tài)的用戶登錄MySQL時(shí),會(huì)收到如此報(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)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
主站蜘蛛池模板: 南陵县| 浦北县| 庄河市| 泸溪县| 洛南县| 涿鹿县| 崇礼县| 贵德县| 杂多县| 广德县| 铜梁县| 洛宁县| 江永县| 滦平县| 金门县| 浮梁县| 嘉义市| 铜鼓县| 松原市| 巧家县| 清远市| 甘孜| 商河县| 始兴县| 涪陵区| 宁海县| 化州市| 延安市| 竹溪县| 长寿区| 清水县| 五河县| 高碑店市| 永康市| 平江县| 铜鼓县| 务川| 巴南区| 张家川| 塔城市| 射洪县|