MySQL用戶及權(quán)限

引言

數(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)限们陆。
image

2. MySQL權(quán)限詳情

image

第一列表示可以在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è)階段:

  1. 用戶連接檢查階段
  2. 執(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;
image

2.db表如果授予一個(gè)用戶單獨(dú)某個(gè)數(shù)據(jù)庫(kù)的權(quán)限,就會(huì)在db表中記錄一條相關(guān)信息尖殃。

desc mysql.db;
image

3.tables_priv表

desc mysql.tables_priv;
image

上面的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;
image

5. procs_priv表

desc mysql.procs_priv;
image

五、用戶管理實(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)
  1. 創(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ǔ)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市碳褒,隨后出現(xiàn)的幾起案子折砸,更是在濱河造成了極大的恐慌,老刑警劉巖沙峻,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睦授,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡摔寨,警方通過查閱死者的電腦和手機(jī)去枷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)是复,“玉大人删顶,你說(shuō)我怎么就攤上這事∮铀瘢” “怎么了翼闹?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蒋纬。 經(jīng)常有香客問我,道長(zhǎng)坚弱,這世上最難降的妖魔是什么蜀备? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮荒叶,結(jié)果婚禮上碾阁,老公的妹妹穿的比我還像新娘。我一直安慰自己些楣,他們只是感情好脂凶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愁茁,像睡著了一般蚕钦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鹅很,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天嘶居,我揣著相機(jī)與錄音,去河邊找鬼促煮。 笑死邮屁,一個(gè)胖子當(dāng)著我的面吹牛整袁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播佑吝,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坐昙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了芋忿?” 一聲冷哼從身側(cè)響起民珍,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盗飒,沒想到半個(gè)月后嚷量,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逆趣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年蝶溶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宣渗。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抖所,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痕囱,到底是詐尸還是另有隱情田轧,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布鞍恢,位于F島的核電站傻粘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏帮掉。R本人自食惡果不足惜弦悉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蟆炊。 院中可真熱鬧稽莉,春花似錦、人聲如沸涩搓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)昧甘。三九已至良拼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疾层,已是汗流浹背将饺。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人予弧。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓刮吧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親掖蛤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杀捻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1,MySQL權(quán)限體系 mysql 的權(quán)限體系大致分為5個(gè)層級(jí): 全局層級(jí): 全局權(quán)限適用于一個(gè)給定服務(wù)器中的所有...
    不排版閱讀 945評(píng)論 0 4
  • 1. MySQL根據(jù)對(duì)象級(jí)別劃分的權(quán)限類別: 常見的權(quán)限類別:庫(kù)級(jí)別蚓庭、表級(jí)別致讥、字段級(jí)別、管理類權(quán)限器赞、程序類權(quán)限 管...
    Net夜風(fēng)閱讀 5,073評(píng)論 0 1
  • 用了mysql好多年垢袱,很少關(guān)注mysql自帶庫(kù),自然也不知道這個(gè)庫(kù)里存放些什么港柜,在看《MySQL排錯(cuò)指南》時(shí)看到它...
    灼灼2015閱讀 1,877評(píng)論 1 3
  • 1.A simple master-to-slave replication is currently being...
    Kevin關(guān)大大閱讀 5,966評(píng)論 0 3
  • 什么是數(shù)據(jù)庫(kù)请契? 數(shù)據(jù)庫(kù)是存儲(chǔ)數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序。每個(gè)數(shù)據(jù)庫(kù)具有一個(gè)或多個(gè)不同的API夏醉,用于創(chuàng)建爽锥,訪問,管理...
    chen_000閱讀 4,035評(píng)論 0 19