引言
數(shù)據(jù)庫(kù)保存著應(yīng)用程序日積夜累記錄下來(lái)的數(shù)據(jù)資產(chǎn)睁搭,安全級(jí)別特別高鹃骂,所以只能讓授權(quán)的用戶可以訪問潮模,其他用戶需一律拒絕。MySQL是一個(gè)多用戶數(shù)據(jù)庫(kù)碍岔,擁有功能強(qiáng)大的訪問控制系統(tǒng)浴讯,可以為不同的用戶指定不同的權(quán)限。 小編一直對(duì)MySQL的用戶及權(quán)限管理都是一知半解蔼啦,存有疑問榆纽,具體疑問如下:
1.MySQL如何認(rèn)證一個(gè)用戶?
小編認(rèn)為"用戶認(rèn)證"就是為了解決一個(gè)問題:你是誰(shuí)捏肢?奈籽。在國(guó)內(nèi),中國(guó)公民要證明他是誰(shuí)鸵赫,只要拿出身份證就可以衣屏,因?yàn)樯矸葑C上的照片,姓名奉瘤,家庭住址勾拉,性別煮甥,出生年月盗温,身份證號(hào)碼等信息藕赞,是中國(guó)政府為了說(shuō)明你就是中國(guó)大地上某個(gè)地方的某某某而制定的。那么在MySQL Server中卖局,一個(gè)用戶是如何認(rèn)證的斧蜕?
2.MySQL的權(quán)限分哪幾種及存儲(chǔ)在什么地方?
小編認(rèn)為"MySQL權(quán)限"是為了解決一個(gè)問題: 你能在MySQL Server內(nèi)干哪些事情砚偶?就好比圖書館一樣批销,只有辦了卡的人才允許進(jìn)入,不同的卡可以進(jìn)入不同的圖書館區(qū)域染坯,可以做不同的事情均芽,即擁有不一樣的權(quán)限,那么MySQL的權(quán)限有哪些单鹿?并且這些權(quán)限存儲(chǔ)在哪里掀宋?
3. MySQL是如何控制用戶訪問的?
繼續(xù)使用圖書館的栗子仲锄,當(dāng)你要進(jìn)圖書館的時(shí)候劲妙,需要刷卡或者與管理員溝通,如果無(wú)效儒喊,那么將會(huì)出現(xiàn)謝絕參閱的禮貌回復(fù)镣奋;假如你有權(quán)限進(jìn)入圖書館,但是你沒有借書的權(quán)利怀愧,那么在你借書的時(shí)候侨颈,會(huì)借書失敗。在MySQL Server中芯义, 一個(gè)用戶想要對(duì)MySQL Server進(jìn)行操作肛搬,MySQL Server是如何控制用戶行為的?
一毕贼、MySQL用戶認(rèn)證
MySQL的用戶認(rèn)證形式是: 用戶名+主機(jī)温赔。比如test@127.0.0.1和test@192.168.10.10是不一樣的用戶。就好比現(xiàn)實(shí)中的牛家村的張三和馬家村的張三是分別兩個(gè)人一樣鬼癣。MySQL中的權(quán)限分配都是分配到用戶+主機(jī)的實(shí)體上陶贼。MySQL的主機(jī)信息可以是本地(localhost),某個(gè)IP待秃,某個(gè)IP段拜秧,以及任何地方等,即用戶的地址可以限制到某個(gè)具體的IP章郁,或者某個(gè)IP范圍枉氮,或者任意地方志衍。MySQL用戶分為普通用戶和root用戶。root用戶是超級(jí)管理員聊替,擁有所有權(quán)限楼肪,普通用戶只擁有被授予的各種權(quán)限。
一惹悄、創(chuàng)建用戶
1春叫、create user '用戶名'@‘本機(jī)名’ indentified by ‘密碼’
2、grant all(權(quán)限) on *.*(表) '用戶名'@‘本機(jī)名’ indentified by '密碼'
二泣港、刪除用戶
1暂殖、drop user '用戶名'@‘本機(jī)名’,'用戶名'@‘本機(jī)名’,'用戶名'@‘本機(jī)名’
三、修改密碼
1当纱、root賬戶登錄(修改所有賬戶密碼)
set password for '用戶名'@‘本機(jī)名’ = password('新密碼')
2呛每、修改自身用戶密碼
set password = password(‘新密碼’);
3、mysqladmin -u 用戶名 -p password 新密碼(雙引號(hào)或不用引號(hào))+回車(輸入舊密碼)
4坡氯、不知道當(dāng)前密碼情況下修改當(dāng)前密碼
1)修改my.ini 配置文件(添加:skip-grant-tables)
2)關(guān)閉重啟數(shù)據(jù)庫(kù)晨横,net stop mysql ,net start mysql
3)登錄數(shù)據(jù)庫(kù) mysql -u 用戶名 -p password + 回車
4)修改密碼:set password = password('');
update '用戶名' set authentication_string = password('新密碼') where ‘用戶名’ = ‘用戶名’ and ‘host’ = ‘localhost’廉沮;
四颓遏、創(chuàng)建視圖
1、創(chuàng)建視圖
create view 視圖名 as(select * from........)
2滞时、查看視圖
select * from 視圖名
3叁幢、修改視圖
update 視圖名 set 字段名=‘’;
注:修改視圖時(shí)坪稽,只能對(duì)一個(gè)表中的映射字段就行修改曼玩,不能同時(shí)對(duì)兩個(gè)表進(jìn)行修改
二、MySQL的權(quán)限分類及存儲(chǔ)
1.MySQL用戶權(quán)限層級(jí)
- 全局層級(jí):全局權(quán)限適用于一個(gè)給定MySQL Server中的所有數(shù)據(jù)庫(kù)窒百,這些權(quán)限存儲(chǔ)在mysql.user表中黍判。
GRANT ALL ON *.* TO 'user'@'host';
# *.* 表示數(shù)據(jù)庫(kù)庫(kù)的所有庫(kù)和表,對(duì)應(yīng)權(quán)限存儲(chǔ)在mysql.user表中
- 數(shù)據(jù)庫(kù)層級(jí):數(shù)據(jù)庫(kù)權(quán)限適用于一個(gè)給定數(shù)據(jù)庫(kù)中的所有目標(biāo)篙梢,這些權(quán)限存儲(chǔ)在mysql.db表中顷帖。
GRANT ALL ON mydb.* TO 'user'@'host';
#mydb.* 表示mysql數(shù)據(jù)庫(kù)下的所有表,對(duì)應(yīng)權(quán)限存儲(chǔ)在mysql.db表中
- 表層級(jí):表權(quán)限適用于一個(gè)給定表中的所有列渤滞,這些權(quán)限存儲(chǔ)在mysql.tables_priv表中贬墩。
GRANT ALL ON mydb.mytable TO 'user'@'host';
#mydb.mytable 表示mysql數(shù)據(jù)庫(kù)下的mytable表,對(duì)應(yīng)權(quán)限存儲(chǔ)在mysql.tables_priv表
- 列層級(jí):列權(quán)限使用于一個(gè)給定表中的單一列妄呕,這些權(quán)限存儲(chǔ)在mysql.columns_priv表中陶舞。
GRANT ALL (col1, col2绪励, col3) ON mydb.mytable TO 'user'@'host';
#mydb.mytable 表示mysql數(shù)據(jù)庫(kù)下的mytable表肿孵, col1, col2, col3表示mytable表中的列名
- 子程序?qū)蛹?jí):CREATE ROUTINE唠粥、ALTER ROUTINE、EXECUTE和GRANT權(quán)限適用于已存儲(chǔ)的子程序停做。這些權(quán)限可以被授予為全局層級(jí)和數(shù)據(jù)庫(kù)層級(jí)晤愧。而且,除了CREATE ROUTINE外雅宾,這些權(quán)限可以被授予子程序?qū)蛹?jí)养涮,并存儲(chǔ)在mysql.procs_priv表中葵硕。
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'user'@'host'; #mydb.mytable 表示mysql數(shù)據(jù)庫(kù)下的mytable表眉抬,PROCEDUR表示存儲(chǔ)過程
2. MySQL權(quán)限簡(jiǎn)單分類
- 數(shù)據(jù)權(quán)限分為:庫(kù)、表和字段三種級(jí)別
- 管理權(quán)限主要是管理員要使用到的權(quán)限懈凹,包括:數(shù)據(jù)庫(kù)創(chuàng)建蜀变,臨時(shí)表創(chuàng)建、主從部署介评、進(jìn)程管理等
- 程序權(quán)限主要是觸發(fā)器库北、存儲(chǔ)過程、函數(shù)等權(quán)限们陆。
2. MySQL權(quán)限詳情
第一列表示可以在grant命令中制定的權(quán)限第二列對(duì)應(yīng)著幾張權(quán)限表(user,db,tables_priv, columns_priv, procs_priv)中的列第三列表示權(quán)限的作用范圍寒瓦,其中Global(Server administration)對(duì)應(yīng) mysql.user 表,Database 對(duì)應(yīng) mysql.db 表坪仇,Tables 對(duì)應(yīng) mysql.tables_priv 表杂腰,Columns 對(duì)應(yīng) mysql.columns_priv 表,Stored routines 對(duì)應(yīng) mysql.procs_priv 表椅文。
MYSQL的權(quán)限如何分布喂很,就是針對(duì)表可以設(shè)置什么權(quán)限,針對(duì)列可以設(shè)置什么權(quán)限等等皆刺,這個(gè)可以從官方文檔中的一個(gè)表來(lái)說(shuō)明:
權(quán)限分布可能設(shè)置的權(quán)限表權(quán)限Select, Insert, Update, Delete, Create, Drop, Grant, References, Index, Alter列權(quán)限Select, Insert, Update, References程序權(quán)限Execute, Alter Routine, Grant
三少辣、 MySQL訪問控制
MySQL訪問控制分為兩個(gè)階段:
- 用戶連接檢查階段
- 執(zhí)行SQL語(yǔ)句時(shí)檢查階段
1、用戶連接時(shí)的檢查
1)當(dāng)用戶連接時(shí)羡蛾,MySQL服務(wù)器首先從user表里匹配host, user, password漓帅,匹配不到則拒絕該連接2)接著檢查user表的max_connections和max_user_connections,如果超過上限則拒絕連接3)檢查user表的SSL安全連接痴怨,如果有配置SSL忙干,則需確認(rèn)用戶提供的證書是否合法只有上面3個(gè)檢查都通過后,服務(wù)器才建立連接腿箩,連接建立后豪直,當(dāng)用戶執(zhí)行SQL語(yǔ)句時(shí),需要做SQL語(yǔ)句執(zhí)行檢查珠移。
2弓乙、執(zhí)行SQL語(yǔ)句時(shí)的檢查
1)從user表里檢查max_questions和max_updates末融,如果超過上限則拒絕執(zhí)行SQL下面幾步是進(jìn)行權(quán)限檢查:2)首先檢查user表,看是否具有相應(yīng)的全局性權(quán)限暇韧,如果有勾习,則執(zhí)行,沒有則繼續(xù)下一步檢查3)接著到db表懈玻,看是否具有數(shù)據(jù)庫(kù)級(jí)別的權(quán)限巧婶,如果有,則執(zhí)行涂乌,沒有則繼續(xù)下一步檢查4)最后到tables_priv, columns_priv, procs_priv表里查看是否具有相應(yīng)對(duì)象的權(quán)限從以上的過程我們可以知道艺栈,MySQL檢查權(quán)限是一個(gè)比較復(fù)雜的過程,所以為了提高性能湾盒,MySQL的啟動(dòng)時(shí)就會(huì)把這5張權(quán)限表加載到內(nèi)存湿右。
四、權(quán)限表字段詳解
1.user表user表的權(quán)限是基于服務(wù)器范圍的所有權(quán)限罚勾,比如用戶擁有服務(wù)器中所有數(shù)據(jù)庫(kù)的select權(quán)限那么在user表中的Select_priv列為Y,如果用戶單單只擁有某個(gè)一數(shù)據(jù)庫(kù)的select權(quán)限那么user表中的Select_priv為N,會(huì)在DB表中記錄一條信息在DB表中的select_priv為Y毅人。
desc mysql.user;
2.db表如果授予一個(gè)用戶單獨(dú)某個(gè)數(shù)據(jù)庫(kù)的權(quán)限,就會(huì)在db表中記錄一條相關(guān)信息尖殃。
desc mysql.db;
3.tables_priv表
desc mysql.tables_priv;
上面的Column_priv比較奇怪丈莺,因?yàn)檎绽碚f(shuō)tables_priv只顯示表級(jí)別的權(quán)限,列級(jí)別的權(quán)限應(yīng)該在columns_priv里顯示才對(duì)送丰。后來(lái)查了資料才知道缔俄,原來(lái)這是為了提高權(quán)限檢查時(shí)的性能,試想一下蚪战,權(quán)限檢查時(shí)牵现,如果發(fā)現(xiàn)tables_priv.Column_priv為空,就不需要再檢查columns_priv表了邀桑,這種情況在現(xiàn)實(shí)中往往占大多數(shù)瞎疼。
4. columns_priv表
desc mysql.columns_priv;
5. procs_priv表
desc mysql.procs_priv;
五、用戶管理實(shí)踐
1.用戶創(chuàng)建
- 通過create user語(yǔ)句創(chuàng)建用戶
在執(zhí)行CREATE USER或CRANT語(yǔ)句后壁畸,MySQL服務(wù)器會(huì)修改相應(yīng)的用戶權(quán)限表贼急,添加或修改用戶及權(quán)限。
create user 'USERNAME'@'HOST' identified by 'PASSWORD';
HOST的形式:1. IP地址捏萍,如172.16.16.1太抓;2. 主機(jī)名,如localhost令杈;3. 網(wǎng)絡(luò)地址走敌,如172.16.0.04. 通配符,如%:匹配任意字符:匹配任意單個(gè)字符如172.16.16.(允許172.16.16.1-172.16.16.9)
eg:
mysql> CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
Query OK, 0 rows affected (0.00 sec)
- 通過grant語(yǔ)句創(chuàng)建新用戶
GRANT語(yǔ)句是添加新用戶并授權(quán)它們?cè)L問MySQL對(duì)象的首選方法逗噩,其語(yǔ)法格式為:
grant all on DB_NAME.TABLE_NAME to 'USERNAME'@'HOST' identified by 'PASSWORD';
HOST的表現(xiàn)形式和create user一樣
eg:
# 用戶 testUser對(duì)所有的數(shù)據(jù)有查詢和更新權(quán)限掉丽,并授于對(duì)所有數(shù)據(jù)表的SELECT和UPDATE權(quán)限
mysql> GRANT SELECT,UPDATE ON *.* TO 'testUser'@'localhost' IDENTIFIED BY 'testpwd';
Query OK, 0 rows affected (0.00 sec)
- 創(chuàng)建root用戶
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'root' WITH GRANT OPTION;
mysql> flush privileges;
2). 創(chuàng)建一個(gè)基本的增刪改查用戶
mysql> GRANT UPDATE, DELETE, INSERT, SELECT ON *.* TO 'test'@'%' identified by 'test' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
mysql> flush privileges;
# MAX_QUERIES_PER_HOUR跌榔,MAX_CONNECTIONS_PER_HOUR,MAX_UPDATES_PER_HOUR設(shè)置為0表示不限制
3). 創(chuàng)建數(shù)據(jù)庫(kù)基本的增刪改查用戶
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, SHOW VIEW, EXECUTE ON `db_name`.* TO 'test'@'%' identified by 'test';
mysql> flush privileges;
4). 授予數(shù)據(jù)庫(kù)名以db開頭的數(shù)據(jù)庫(kù)的權(quán)限
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, SHOW VIEW, EXECUTE ON `db%`.* TO 'perform'@'%';
mysql> flush privileges;
5). 創(chuàng)建備份用戶權(quán)限
mysql> GRANT SELECT,EVENT,SHOW DATABASES,LOCK TABLES,SUPER,REPLICATION CLIENT ON *.* TO 'backup'@'localhost' identified by 'backup';
mysql> flush privileges;
6). 備份恢復(fù)用戶權(quán)限
mysql> GRANT INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON *.* TO 'restore'@'localhost' identified by '123456';
mysql> flush privileges;
7). 復(fù)制用戶權(quán)限
mysql> GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%' IDENTIFIED BY '123456';
mysql> flush privileges;
2.用戶刪除
mysql> drop user 'USERNAME'@'HOST';
# 刪除MySQL默認(rèn)的無(wú)用賬戶;
mysql> drop user 'root'@'localhost.localdomain';
# 刪除MySQL默認(rèn)的無(wú)用賬戶;
mysql> drop user 'root'@'127.0.0.1';
3. 更改用戶名
mysql> rename user OLD_NAME to NEW_NAME;
4. 修改用戶密碼
- 通過mysqladmin工具
# 給root@localhost用戶登錄mysql設(shè)置密碼為"redhat";
$ mysqladmin -u root -h localhost password "redhat"
# 修改root@localhost用戶登錄mysql數(shù)據(jù)庫(kù)的密碼;
$ mysqladmin -u root -h localhost password "new passwd" -p "old passwd"
- 通過直接修改mysql.user表的用戶記錄
# MySQL 5.6
mysql> update mysql.user set password=PASSWORD('redhat') where user='root';
mysql> flush privileges;
# MySQL 5.7
mysql> update mysql.user set authentication_string=PASSWORD('redhat') where user='root';
mysql> flush privileges;
- set password語(yǔ)句
mysql> set password for 'root'@'localhost'=PASSWORD('redhat');
mysql> flush privileges;
- ALTER USER語(yǔ)句(MYSQL5.7版本)
mysql> use mysql
mysql> alter user root@'localhost' identified by '123456';
mysql> flush privileges;
六捶障、MySQL管理員密碼找回
1.修改配置文件僧须,跳過授權(quán)表在配置文件中[mysqld]字段添加skip-grant-tables指令
$ cat /etc/my.cnf
[mysqld]
skip-grant-tables
2. 重啟MySQL Server
service mysqld restart
3. 給root用戶登錄mysql設(shè)置密碼為helloWORD并以加密方式
mysql> use mysql;
# MySQL5.6
mysql> update user set password=PASSWORD('helloWORD') where user='root';
# MySQL5.7
mysql> update mysql.user set authentication_string=PASSWORD('helloWORD') where user='root';
mysql> flush privileges;
4.修改配置文件,注釋剛才添加的配置項(xiàng)
$ cat /etc/my.cnf
[mysqld]
#skip-grant-tables
5.重啟MySQL Server
service mysqld restart
七项炼、 MySQL 權(quán)限管理實(shí)踐
賬戶權(quán)限信息被存儲(chǔ)在MySQL數(shù)據(jù)庫(kù)的幾張權(quán)限表中担平,在MySQL啟動(dòng)時(shí),服務(wù)器將這些數(shù)據(jù)庫(kù)表中權(quán)限信息的內(nèi)容讀入內(nèi)存锭部。其中GRANT和REVOKE語(yǔ)句所涉及的常用權(quán)限大致如下這些:CREATE暂论、DROP、SELECT空免、INSERT空另、UPDATE盆耽、DELETE蹋砚、INDEX、ALTER摄杂、CREATE坝咐、ROUTINE、FILE等析恢,還有一個(gè)特殊的proxy權(quán)限墨坚,是用來(lái)賦予某個(gè)用戶具有給他人賦予權(quán)限的權(quán)限。1. grant 所有權(quán)限
mysql> grant all privileges on *.* to 'USERNAME'@'HOST';
mysql> flush privileges;
2. grant super權(quán)限在.上(super權(quán)限可以對(duì)全局變量更改)映挂;**
mysql> grant super on *.* to 'USERNAME'@'HOST';
mysql> flush privileges;
3. grant某個(gè)庫(kù)下所有表的所有權(quán)限
mysql> grant all privileges on DB_NAME.* to 'USERNAME'@'HOST';
mysql> flush privileges;
4. grant某個(gè)庫(kù)下所有表的select權(quán)限
mysql>grant select on DB_NAME.* to 'USERNAME'@'HOST';
mysql> flush privileges;
5. grant某個(gè)庫(kù)下某個(gè)表的insert權(quán)限
mysql> grant insert on DB_NAME.TABLE_NAME to 'USERNAME'@'HOST';
mysql> flush privileges;
6. grant某個(gè)庫(kù)下某個(gè)表的update權(quán)限
mysql>grant update on DB_NAME.TABLE_NAME to 'USERNAME'@'HOST';
mysql> flush privileges;
7. grant某個(gè)庫(kù)下某個(gè)表的某個(gè)字段update權(quán)限
mysql> grant update(COLUMN_NAME) on DB_NAME.TABLE_NAME to 'USERNAME'@'HOST';
mysql> flush privileges;
8.通過GRANT語(yǔ)句中的USAGE權(quán)限泽篮,可以創(chuàng)建賬戶而不授予任何權(quán)限
mysql> grant usage on *.* to 'USERNAME'@'HOST';
mysql> flush privileges;
9. grant創(chuàng)建、修改柑船、刪除MySQL數(shù)據(jù)表結(jié)構(gòu)權(quán)限
mysql> grant create on testdb.* to developer@'192.168.0.%';
mysql> grant alter on testdb.* to developer@'192.168.0.%';
mysql> grant drop on testdb.* to developer@'192.168.0.%';
mysql> flush privileges;
10. grant操作MySQL外鍵權(quán)限
mysql> grant references on testdb.* to developer@'192.168.0.%';
mysql> flush privileges;
11. grant操作MySQL臨時(shí)表權(quán)限
mysql> grant create temporary tables on testdb.* to developer@'192.168.0.%';
mysql> flush privileges;
12. grant操作MySQL索引權(quán)限
mysql> grant index on testdb.* to developer@'192.168.0.%';
mysql> flush privileges;
13.grant操作MySQL視圖帽撑、查看視圖源代碼權(quán)限
mysql> grant create view on testdb.* to developer@'192.168.0.%';
mysql> grant show view on testdb.* to developer@'192.168.0.%';
mysql> flush privileges;
14. grant操作MySQL存儲(chǔ)過程、存儲(chǔ)函數(shù)權(quán)限
mysql> grant create routine on testdb.* to developer@'192.168.0.%';
mysql> grant alter routine on testdb.* to developer@'192.168.0.%';
mysql> grant execute on testdb.* to developer@'192.168.0.%';
mysql> flush privileges;
15.PROXY特殊權(quán)限如果想讓某個(gè)用戶具有給他人賦予權(quán)限的能力鞍时,那么就需要proxy權(quán)限了亏拉。當(dāng)你給一個(gè)用戶賦予all權(quán)限之后,你查看mysql.user表會(huì)發(fā)現(xiàn)Grant_priv字段還是為N逆巍,表示其沒有給他人賦予權(quán)限的權(quán)限及塘。
我們可以查看一下系統(tǒng)默認(rèn)的超級(jí)管理員權(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)
可以看到其本身有PROXY權(quán)限,并且這個(gè)語(yǔ)句跟一般授權(quán)語(yǔ)句還不太一樣锐极。所以如果想讓一個(gè)遠(yuǎn)程用戶有給他人賦予權(quán)限的能力笙僚,就需要給此用戶PROXY權(quán)限,如下:
mysql> grant all on *.* to 'test'@'%' identified by 'helloWORD';
mysql> GRANT PROXY ON ''@'' TO 'test'@'%' WITH GRANT OPTION;
mysql> flush privileges;
16. 查看用戶的權(quán)限
Mysql> show grants for 'USERNAME'@'HOST';
17. 移除用戶權(quán)限
# 移除tom用戶對(duì)于db.xsb的權(quán)限;
Mysql> revoke all on db.xsb from 'tom'@'localhost';
# 刷新授權(quán)表;
Mysql> flush privileges;
使用REVOKE收回權(quán)限之后灵再,用戶帳戶的記錄將從db肋层、host庇勃、tables_priv、columns_priv表中刪除槽驶,但是用戶帳號(hào)依然在user表中保存责嚷。
八、MySQL 用戶和權(quán)限管理經(jīng)驗(yàn)
1. 用戶管理經(jīng)驗(yàn)
- 1)掂铐、盡量使用create user, grant等語(yǔ)句罕拂,而不要直接修改權(quán)限表。
雖然create user, grant等語(yǔ)句底層也是修改權(quán)限表全陨,和直接修改權(quán)限表的效果是一樣的爆班,但是,對(duì)于非高手來(lái)說(shuō)辱姨,采用封裝好的語(yǔ)句肯定不會(huì)出錯(cuò)柿菩,而如果直接修改權(quán)限表,難免會(huì)漏掉某些表雨涛。而且枢舶,修改完權(quán)限表之后,還需要執(zhí)行flush privileges重新加載到內(nèi)存替久,否則不會(huì)生效凉泄。
- 2). 把匿名用戶刪除掉。
匿名用戶沒有密碼蚯根,不但不安全后众,還會(huì)產(chǎn)生一些莫名其妙的問題,強(qiáng)烈建議刪除颅拦。
2. 權(quán)限管理經(jīng)驗(yàn)
- 1)蒂誉、只授予能滿足需要的最小權(quán)限,防止用戶干壞事距帅。比如用戶只是需要查詢右锨,那就只給select權(quán)限就可以了,不要給用戶賦予update锥债、insert或者delete權(quán)限陡蝇。
- 2)、創(chuàng)建用戶的時(shí)候限制用戶的登錄主機(jī)哮肚,一般是限制成指定IP或者內(nèi)網(wǎng)IP段登夫。
- 3)、初始化數(shù)據(jù)庫(kù)的時(shí)候刪除沒有密碼的用戶允趟。安裝完數(shù)據(jù)庫(kù)的時(shí)候會(huì)自動(dòng)創(chuàng)建一些用戶恼策,這些用戶默認(rèn)沒有密碼。
- 4)、為每個(gè)用戶設(shè)置滿足密碼復(fù)雜度的密碼涣楷。
- 5)分唾、定期清理不需要的用戶,回收權(quán)限或者刪除用戶狮斗。
九绽乔、參考文獻(xiàn)
MySQL之權(quán)限管理MySQL用戶和權(quán)限管理MySQL權(quán)限探索權(quán)限表MySQL 權(quán)限機(jī)制和權(quán)限存儲(chǔ)