亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL 用戶與權限管理

2024-07-24 13:06:22
字體:
來源:轉載
供稿:網友

MySQL權限系統的主要功能是證實連接到一臺給定主機的用戶,并且賦予該用戶在數據庫上的相關DML,DQL權限。MySQL存取控制包含2個階段,一是服務器檢查是否允許你連接;二是假定你能連接,服務器檢查你發出的每個請求??茨闶欠裼凶銐虻臋嘞迣嵤┧?。本文主要描述MySQL權限系統相關的用戶創建、授權、撤銷權限等等。

1、獲取有關權限管理的幫助

 

root@localhost[(none)]>helpAccountManagement

Formoreinformation,type'help',whereisoneofthefollowing

topics:

Youaskedforhelpabouthelpcategory:"AccountManagement"

CREATEUSER

DROPUSER

GRANT

RENAMEUSER

REVOKE

SETPASSWORD

2、創建mysql數據庫用戶

 

--創建用戶的語法

root@localhost[(none)]>helpcreateuser;

Name:'CREATEUSER'

Description:

Syntax:

CREATEUSERuser_specification[,user_specification]...

user_specification:

user

[

|IDENTIFIEDWITHauth_plugin[AS'auth_string']

IDENTIFIEDBY[PASSWORD]'password'

]

createuser命令會創建一個新帳戶,同時也可以為其指定密碼。該命令將添加一條記錄到user表。

該命令僅僅授予usage權限。需要再使用grant命令進行進一步授權。也可以使用grant命令直接來創建賬戶見后續的相關演示。

下面是mysql官方手冊對usage的解釋。

TheUSAGEprivilegespecifierstandsfor“noprivileges.”Itisusedatthegloballevelwith

GRANTtomodifyaccountattributessuchasresourcelimitsorSSLcharacteristicswithoutaffecting

existingaccountprivileges.

--當前演示環境

root@localhost[(none)]>showvariableslike'version';

+---------------+------------+

|Variable_name|Value|

+---------------+------------+

|version|5.5.39-log|

+---------------+------------+

--創建新用戶(未指定密碼)

root@localhost[(none)]>createuser'fred'@'localhost';

QueryOK,0rowsaffected(0.00sec)

--指定密碼創建新用戶,%表示任意,即frank可以從任意主機訪問數據庫

root@localhost[(none)]>createuser'frank'@'%'identifiedby'frank';

QueryOK,0rowsaffected(0.00sec)

--查看剛剛添加的賬戶

root@localhost[(none)]>selecthost,user,passwordfrommysql.userwhereuserlike'fr%';

+-----------+-------+-------------------------------------------+

|host|user|password|

+-----------+-------+-------------------------------------------+

|%|frank|*63DAA25989C7E01EB96570FA4DBE154711BEB361|

|localhost|fred||

+-----------+-------+-------------------------------------------+

3、使用grant授予權限

 

--grant命令語法

root@localhost[mysql]>helpgrant

Name:'GRANT'

Description:

Syntax:

GRANT

priv_type[(column_list)]

[,priv_type[(column_list)]]...

ON[object_type]priv_level

TOuser_specification[,user_specification]...

[REQUIRE{NONE|ssl_option[[AND]ssl_option]...}]

[WITHwith_option...]

GRANTPROXYONuser_specification

TOuser_specification[,user_specification]...

[WITHGRANTOPTION]

object_type:

TABLE

|FUNCTION

|PROCEDURE

priv_level:

*

|*.*

|db_name.*

|db_name.tbl_name

|tbl_name

|db_name.routine_name

user_specification:

user

[

|IDENTIFIEDWITHauth_plugin[AS'auth_string']

IDENTIFIEDBY[PASSWORD]'password'

]

如何授權

a、需要指定授予哪些權限

b、權限應用在那些對象上(全局,特定對象等)

c、授予給哪個帳戶

d、可以指定密碼(可選項,用此方式會自動創建用戶)

授權權限的范圍:

ON *.*

ONdb_name.*

ONdb_name.table_name

ONdb_name.table_name.column_name

ONdb_name.routine_name

--權限一覽表,我們直接查詢root賬戶所有的權限,如下

--mysql的權限相對于oracle而言,相對簡單,而且也沒有涉及到角色方面的定義與配置

root@localhost[(none)]>select*frommysql.userwhereuser='root'andhost='localhost'/G

***************************1.row***************************

Host:localhost

User:root

Password:

Select_priv:Y

Insert_priv:Y

Update_priv:Y

Delete_priv:Y

Create_priv:Y

Drop_priv:Y

Reload_priv:Y

Shutdown_priv:Y

Process_priv:Y

File_priv:Y

Grant_priv:Y

References_priv:Y

Index_priv:Y

Alter_priv:Y

Show_db_priv:Y

Super_priv:Y

Create_tmp_table_priv:Y

Lock_tables_priv:Y

Execute_priv:Y

Repl_slave_priv:Y

Repl_client_priv:Y

Create_view_priv:Y

Show_view_priv:Y

Create_routine_priv:Y

Alter_routine_priv:Y

Create_user_priv:Y

Event_priv:Y

Trigger_priv:Y

Create_tablespace_priv:Y

ssl_type:

ssl_cipher:

x509_issuer:

x509_subject:

max_questions:0

max_updates:0

max_connections:0

max_user_connections:0

plugin:

authentication_string:

1rowinset(0.00sec)

--說明,本文中描述的mysql提示符為user@hostname[(dbname)],不同的帳戶,不同的主機登錄會顯示不同。

--其次,不同的提示符下所代表的用戶身份及權限。

--查看當前的連接用戶

root@localhost[(none)]>selectcurrent_user();

+----------------+

|current_user()|

+----------------+

|root@localhost|

+----------------+

--查看當前帳戶的權限

root@localhost[(none)]>showgrants;--該賬戶用于最高權限,帶有WITHGRANTOPTION

+---------------------------------------------------------------------+

|Grantsforroot@localhost|

+---------------------------------------------------------------------+

|GRANTALLPRIVILEGESON*.*TO'root'@'localhost'WITHGRANTOPTION|

|GRANTPROXYON''@''TO'root'@'localhost'WITHGRANTOPTION|

+---------------------------------------------------------------------+

suse11b:~#mysql-ufred-p

Enterpassword:

fred@localhost[(none)]>showgrants;

+------------------------------------------+

|Grantsforfred@localhost|

+------------------------------------------+

|GRANTUSAGEON*.*TO'fred'@'localhost'|

+------------------------------------------+

--下面使用root賬戶給fred賦予權限allprivileges

root@localhost[(none)]>grantallprivilegeson*.*to'fred'@'localhost';

QueryOK,0rowsaffected(0.01sec)

root@localhost[(none)]>flushprivileges;

QueryOK,0rowsaffected(0.00sec)

fred@localhost[(none)]>showgrants;

+---------------------------------------------------+

|Grantsforfred@localhost|

+---------------------------------------------------+

|GRANTALLPRIVILEGESON*.*TO'fred'@'localhost'|

+---------------------------------------------------+

fred@localhost[(none)]>usetempdb

fred@localhost[tempdb]>createtabletb_isam(idint,valuevarchar(20))engine=myisam;

QueryOK,0rowsaffected(0.10sec)

fred@localhost[tempdb]>insertintotb_isamvalues(1,'jack'),(2,'robin');

QueryOK,2rowsaffected(0.00sec)

Records:2Duplicates:0Warnings:0

fred@localhost[tempdb]>commit;

--下面的授權收到了錯誤提示,不能授權

fred@localhost[tempdb]>grantselectontempdb.*to'frank'@'%';

ERROR1044(42000):Accessdeniedforuser'fred'@'localhost'todatabase'tempdb'

--下面從rootsession來給之前創建的frank授權

--授予frank在數據庫tempdb上所有對象的select權限

root@localhost[(none)]>grantselectontempdb.*to'frank'@'%';

QueryOK,0rowsaffected(0.00sec)

--更新cache中的權限

root@localhost[(none)]>flushprivileges;

QueryOK,0rowsaffected(0.00sec)

--從另外的主機使用frank賬戶登錄

suse11a:~#mysql-ufrank-p-h172.16.6.89

Enterpassword:

--此時frank,此時已經可以訪問了tempdb上的表tb_isam

frank@172.16.6.89[(none)]>select*fromtempdb.tb_isam;

+------+-------+

|id|value|

+------+-------+

|1|jack|

|2|robin|

+------+-------+

frank@172.16.6.89[(none)]>showgrants;

+------------------------------------------------------------------------------------------------------+

|Grantsforfrank@%|

+------------------------------------------------------------------------------------------------------+

|GRANTUSAGEON*.*TO'frank'@'%'IDENTIFIEDBYPASSWORD'*63DAA25989C7E01EB96570FA4DBE154711BEB361'|

|GRANTSELECTON`tempdb`.*TO'frank'@'%'--可以看到多出了select權限|

+------------------------------------------------------------------------------------------------------+

--下面是一個授予最大權限的例子,授予的同時會自動創建用戶,由于我們沒有設置密碼,所以password列查詢結果為空

root@localhost[(none)]>grantallprivilegeson*.*to'jack'@'localhost';

QueryOK,0rowsaffected(0.00sec)--第一個*號代表任意數據庫,第二個*號代表數據庫上的任意對象

root@localhost[(none)]>selectuser,host,Passwordfrommysql.userwhereuser='jack';

+------+-----------+----------+

|user|host|Password|

+------+-----------+----------+

|jack|localhost||

+------+-----------+----------+

suse11b:~#mysql-ujack-p-hlocalhost

Enterpassword:

jack@localhost[(none)]>showgrantsforcurrent_user;--該方式等同于showgrants,查看自身權限

+---------------------------------------------------+

|Grantsforjack@localhost|

+---------------------------------------------------+

|GRANTALLPRIVILEGESON*.*TO'jack'@'localhost'|

+---------------------------------------------------+

--在當前session下查看其它用戶的權限,注,當前session登陸的用戶也需要有權限才能查看其它用戶權限

jack@localhost[(none)]>showgrantsfor'frank'@'%';

+------------------------------------------------------------------------------------------------------+

|Grantsforfrank@%|

+------------------------------------------------------------------------------------------------------+

|GRANTUSAGEON*.*TO'frank'@'%'IDENTIFIEDBYPASSWORD'*63DAA25989C7E01EB96570FA4DBE154711BEB361'|

|GRANTSELECTON`tempdb`.*TO'frank'@'%'|

+------------------------------------------------------------------------------------------------------+

--下面演示基于對象列級別的授權

--首先revoke之前的select權限

root@localhost[(none)]>revokeselectontempdb.*from'frank'@'%';

QueryOK,0rowsaffected(0.00sec)

fred@localhost[tempdb]>createtabletb_userasselect*frommysql.user;

QueryOK,9rowsaffected(0.15sec)

Records:9Duplicates:0Warnings:0

fred@localhost[tempdb]>grantselect(user,host),update(host)ontempdb.tb_userto'frank'@'%';

ERROR1142(42000):GRANTcommanddeniedtouser'fred'@'localhost'fortable'tb_user'--授權失敗

--下面使用root來授權

root@localhost[(none)]>grantselect(user,host),update(host)ontempdb.tb_userto'frank'@'%';

QueryOK,0rowsaffected(0.00sec)

root@localhost[(none)]>flushprivileges;

QueryOK,0rowsaffected(0.00sec)

--下面檢查一下frank所擁有的權限

root@localhost[(none)]>showgrantsfor'frank';

+------------------------------------------------------------------------------------------------------+

|Grantsforfrank@%|

+------------------------------------------------------------------------------------------------------+

|GRANTUSAGEON*.*TO'frank'@'%'IDENTIFIEDBYPASSWORD'*63DAA25989C7E01EB96570FA4DBE154711BEB361'|

|GRANTSELECT(user,host),UPDATE(host)ON`tempdb`.`tb_user`TO'frank'@'%'|

+------------------------------------------------------------------------------------------------------+

--下面使用frank身份來驗證所授予的權限

frank@172.16.6.89[(none)]>desctempdb.tb_user;

+-------+----------+------+-----+---------+-------+

|Field|Type|Null|Key|Default|Extra|

+-------+----------+------+-----+---------+-------+

|Host|char(60)|NO||||

|User|char(16)|NO||||

+-------+----------+------+-----+---------+-------+

frank@172.16.6.89[(none)]>select*fromtempdb.tb_user;--訪問時不支持通配符,必須指定列名

ERROR1142(42000):SELECTcommanddeniedtouser'frank'@'suse11a.site'fortable'tb_user'

frank@172.16.6.89[(none)]>selecthost,userfromtempdb.tb_userwhereuser='frank';

+------+-------+

|host|user|

+------+-------+

|%|frank|

+------+-------+

--需要注意的是,如果你的對象創建在test相關數據庫下,權限限制可能會失效。

--下面這個查詢用于查看db的授權表

root@localhost[(none)]>selecthost,db,userfrommysql.db;

+------+---------+------+

|host|db|user|

+------+---------+------+

|%|test||

|%|test/_%||

+------+---------+------+

--根據前面的權限授予,列host可以被更新,而列user不行,如下面的2條SQL語句執行的結果

frank@172.16.6.89[(none)]>updatetempdb.tb_usersethost='localhost'whereuser='frank';

QueryOK,1rowaffected(0.12sec)

Rowsmatched:1Changed:1Warnings:0

frank@172.16.6.89[(none)]>updatetempdb.tb_usersetuser='jason'whereuser='jack';

ERROR1143(42000):UPDATEcommanddeniedtouser'frank'@'suse11a.site'forcolumn'user'intable'tb_user'

--關于WITHGRANTOPTION

root@localhost[(none)]>showgrants;--注意root下有WITHGRANTOPTION

+---------------------------------------------------------------------+

|Grantsforroot@localhost|

+---------------------------------------------------------------------+

|GRANTALLPRIVILEGESON*.*TO'root'@'localhost'WITHGRANTOPTION|

|GRANTPROXYON''@''TO'root'@'localhost'WITHGRANTOPTION|

+---------------------------------------------------------------------+

root@localhost[(none)]>showgrantsfor'jack'@'localhost';--注意jack下沒有WITHGRANTOPTION

+---------------------------------------------------+--這就是前面為什么用戶自身創建的對象而無法授權的問題

|Grantsforjack@localhost|

+---------------------------------------------------+

|GRANTALLPRIVILEGESON*.*TO'jack'@'localhost'|

+---------------------------------------------------+

4、撤銷權限

 

撤銷權限使用的是revoke關鍵字,撤銷與授權的權限方式基本類似,

其次有哪些權限可以授予,相應地就有哪些權限可以撤銷,原來的to子句呢則變成了from子句。

如下面的示例

mysql>revokeSELECT(user,host),UPDATE(host)ON`tempdb`.`tb_user`from'frank'@'%';

mysql>revokeallprivileges,grantoptionfrom'frank'@'%';

root@localhost[(none)]>revokeSELECT(user,host),UPDATE(host)ON`tempdb`.`tb_user`from'frank'@'%';

QueryOK,0rowsaffected(0.00sec)

--Author:Leshami

--Blog:http://blog.csdn.net/leshami

root@localhost[(none)]>revokeallprivileges,grantoptionfrom'frank'@'%';

QueryOK,0rowsaffected(0.01sec)

root@localhost[(none)]>flushprivileges;

QueryOK,0rowsaffected(0.00sec)

root@localhost[(none)]>showgrantsfor'frank';--查看revoke之后僅擁有最基本權限

+------------------------------------------------------------------------------------------------------+

|Grantsforfrank@%|

+------------------------------------------------------------------------------------------------------+

|GRANTUSAGEON*.*TO'frank'@'%'IDENTIFIEDBYPASSWORD'*63DAA25989C7E01EB96570FA4DBE154711BEB361'|

+------------------------------------------------------------------------------------------------------+

5、刪除及重命名賬戶

 

使用dropuser命令刪除用戶

--查看當前系統中已存在的用戶

root@localhost[(none)]>selectuser,host,Passwordfrommysql.user;

+-------+-----------+-------------------------------------------+

|user|host|Password|

+-------+-----------+-------------------------------------------+

|root|localhost||

|root|suse11b||

|root|127.0.0.1||

|root|::1||

||localhost||

||suse11b||

|fred|localhost||

|frank|%|*63DAA25989C7E01EB96570FA4DBE154711BEB361|

|jack|localhost||

+-------+-----------+-------------------------------------------+

--使用dropuser命令刪除用戶

root@localhost[(none)]>dropuser'frank'@'%';

QueryOK,0rowsaffected(0.00sec)

root@localhost[(none)]>dropuser'fred'@'localhost';

QueryOK,0rowsaffected(0.00sec)

root@localhost[(none)]>selectuser,host,Passwordfrommysql.userwhereuserlike'fr%';

Emptyset(0.00sec)

--如何重命名帳戶,使用renameuser命令

root@localhost[(none)]>renameuser'jack'@'localhost'to'jason'@'localhost';

QueryOK,0rowsaffected(0.00sec)

root@localhost[(none)]>selectuser,host,Passwordfrommysql.userwhereuserlike'j%';

+-------+-----------+----------+

|user|host|Password|

+-------+-----------+----------+

|jason|localhost||

+-------+-----------+----------+

--對于用戶的刪除也可以直接從mysql.user進行刪除相應的記錄,但不推薦直接操作mysql系統表

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品在线电影| 91精品国产91久久久久久最新| 国产精品一区二区久久国产| 久久精品最新地址| 国产精品成人aaaaa网站| 日韩性xxxx爱| 欧美电影在线播放| 国产精品三级久久久久久电影| 69视频在线免费观看| 亚洲在线视频福利| 91亚洲国产成人精品性色| 亚洲3p在线观看| 亚洲福利视频免费观看| www.日韩系列| 成人激情视频在线观看| 欧美福利在线观看| 日韩成人中文电影| 日本国产精品视频| 久久久久久久999精品视频| 国产精品一区二区三区成人| 欧美乱大交xxxxx另类电影| 精品福利视频导航| 美日韩精品免费观看视频| 亚洲综合精品一区二区| 亚洲精品欧美日韩| 日韩精品电影网| 日韩高清免费在线| 欧美成人一区二区三区电影| 亚洲欧洲在线免费| 亚洲综合中文字幕在线观看| 91九色国产视频| 91精品啪在线观看麻豆免费| 色av中文字幕一区| 亚洲成成品网站| 久久久亚洲精品视频| 97精品久久久中文字幕免费| 精品久久久久久久久久ntr影视| 免费99精品国产自在在线| 国产精品一二三在线| 亚洲国产成人久久| 亚洲伊人久久大香线蕉av| 日韩三级影视基地| 九色精品免费永久在线| 性欧美办公室18xxxxhd| 国内伊人久久久久久网站视频| 一道本无吗dⅴd在线播放一区| 日本高清不卡的在线| 国产精品18久久久久久首页狼| 国产噜噜噜噜久久久久久久久| xvideos亚洲| 国产精品专区一| 日韩欧美视频一区二区三区| 懂色av中文一区二区三区天美| 免费不卡在线观看av| 日韩电影免费在线观看中文字幕| 中文字幕av一区中文字幕天堂| 亚洲精品www久久久| 日韩欧美精品网站| 亚洲第一页中文字幕| 欧美激情小视频| 亚洲伊人成综合成人网| 精品久久久久久中文字幕一区奶水| 中文字幕日韩精品在线| 色yeye香蕉凹凸一区二区av| 亚洲精品视频在线观看视频| 国产在线视频91| 国产成人午夜视频网址| 中文字幕国内精品| 91av视频导航| 亚洲成成品网站| 日韩高清电影免费观看完整版| 亚洲国产成人精品久久| 日韩的一区二区| 欧美日产国产成人免费图片| 欧美成人在线网站| 国产日韩欧美综合| 日韩av一区二区在线观看| 波霸ol色综合久久| 国产成人福利夜色影视| 欧美日韩国产中字| 久久偷看各类女兵18女厕嘘嘘| 成人免费直播live| 亚洲电影免费观看高清完整版在线观看| 日韩网站免费观看高清| 欧美wwwxxxx| 成人免费视频a| 欧美最猛黑人xxxx黑人猛叫黄| 日韩精品在线电影| 日本高清久久天堂| 欧美极品美女视频网站在线观看免费| 在线视频亚洲欧美| 国产视频自拍一区| 成人羞羞国产免费| 欧美成人免费观看| 91精品国产亚洲| 亚洲www永久成人夜色| 九九九久久国产免费| 国产精品xxx视频| 国产精品吊钟奶在线| 亚洲国产精品va在线看黑人动漫| 中文日韩在线视频| 欧美大片va欧美在线播放| 日韩电影视频免费| 亚洲福利视频专区| 亚洲免费av电影| 国产精品成人一区| 亚洲欧美日本精品| 国产精品久久久久久五月尺| 丝袜美腿精品国产二区| 日韩中文字幕av| 亚洲精品一区二区三区不| 高清欧美性猛交xxxx黑人猛交| 这里只有精品视频| 亚洲第一中文字幕在线观看| 欧美大片欧美激情性色a∨久久| 国产噜噜噜噜噜久久久久久久久| 国产精品永久免费在线| 久久男人资源视频| 欧美黄色小视频| 最近日韩中文字幕中文| 久久综合电影一区| 日韩av中文字幕在线免费观看| www.久久色.com| 日韩av在线播放资源| 91成人精品网站| 亚洲视频视频在线| 亚洲精品久久久久国产| 97香蕉超级碰碰久久免费的优势| 久久精品国产亚洲7777| 久久久精品中文字幕| 国产免费一区二区三区在线能观看| 精品中文字幕视频| 国产日韩在线看片| 高清在线视频日韩欧美| 国产精品激情av电影在线观看| 九色成人免费视频| 91久久精品在线| 91精品久久久久久久久久久久久| 人人爽久久涩噜噜噜网站| 中文字幕日韩av| 中文字幕成人在线| 成人看片人aa| 色香阁99久久精品久久久| 亚洲va欧美va在线观看| 国内精品国产三级国产在线专| 中日韩美女免费视频网站在线观看| 欧美乱妇高清无乱码| 日韩av在线直播| 少妇高潮 亚洲精品| 亚洲精品日韩久久久| 亚洲国产毛片完整版| 国产成人一区三区| 中日韩美女免费视频网站在线观看| 久久999免费视频| 亚洲亚裔videos黑人hd| 日韩欧美在线看| 久久综合色影院| 亚洲视频在线免费观看| 亚洲自拍偷拍在线| 久久久久女教师免费一区| 欧美xxxwww| 成人黄色免费片| 久久99精品视频一区97| 2019国产精品自在线拍国产不卡|