mysql許可權系統通過下面兩個階段進行認證:
對連線的使用者進行身份認證,合法的使用者通過認證,不合法的使用者拒絕連線。
對通過認證的合法使用者授予相應的許可權,使用者可以通過再這些許可權範圍內對資料庫做相應的操作。
在許可權訪問過程中,主要涉及到mysql資料庫下user表和db表。user表的資料結構如下:
db表資料結構如下:
表的說明:其中包含使用者列、許可權列、安全列和資源控制列。用的最頻繁的是使用者列和許可權列,許可權分為普通許可權和管理許可權。普通許可權使用者資料庫的操作如select_priv、insert_priv等。管理許可權主要用來對資料庫進行管理的操作,比如process_priv、super_priv等。
使用者進行連線的時候,許可權表的訪問過程:
先從user表中的host、user和password這三個欄位中判斷連線的ip、使用者名稱以及密碼是否存在表中,如果存在,則通過驗證,否則拒絕連線。
通過身份驗證之後,按照以下許可權表的順序得到資料庫許可權:user->db->tables->priv->columns_priv。全域性許可權,覆蓋區域性許可權。比如乙個使用者在user表中擁有選擇許可權,那麼他將對所有資料中的所有表所有的列都有選擇許可權。
許可權查詢詳細描述:當使用者通過許可權認證之後,進行許可權分配時候,按照user->db->tables_priv->columns_priv的順序進行許可權分配,即先檢查許可權表user,如果user表中對應的許可權為y,此時使用者對應所有的資料庫許可權為y,將不再檢查db、tables_priv、columns_priv;如果為n,則到db表中進行查詢使用者對於具體資料庫許可權,如果得到db中的y許可權,則不在查詢,否則檢查tables_priv,看該資料庫對應的具體表許可權,如果為y,則不在查詢,否則檢查columns_priv表,檢視對應的具體列許可權。這一點對於我們授予使用者許可權很重要。建立使用者,可以使用grant語法建立或者直接操作user表。
方法一:
直接操作use表
insert into user(host,user,password) values(「127.0.0.1」,」test」,password(「51testit」));
方法二:
格式 create user 『username』@』host』 identified by 『password』;
eg:create user 『test』@』127.0.0.1』 identified by 『51testit』;
建立之後,登入如下:
mysql加密方式: mysql323加密中生成的是16位字串,而在mysqlsha1中生存的是41位字串,其中是不加入實際的密碼運算中,通過觀察在很多使用者中都攜帶了」「,在實際破解過程中去掉」*」,也就是說mysqlsha1加密的密碼的實際位數是40位。
host欄位描述
host值可以是主機名或者ip號,或者locahost代表本地主機。 可以再host列值前面使用萬用字元」%」和」_」,」%」代表匹配任何主機,空的host值等於」%」。如」%.myweb.com」,匹配所有mysql.com域的所有主機。案例如下:
host
user
解析
myweb.wang
ppspps,從myweb.wang連線
% pps
pps,從任何主機連線
% 」任何使用者,從任何主機連線
122.164.35.127
ppspps,從122.164.35.127連線
122.164.35.%
ppspps,從122.164.35.型別子網的任何主機連線
對於上面建立的test,我沒有進行任何授權操作,當我使用test使用者去運算元據庫時候,發現:
沒有資料庫操作許可權,怎樣才能檢視使用者擁有的許可權呢?
檢視許可權
方法一:
show grants for [email protected];
方法二:
檢視user表中記錄的許可權。
select * from mysql.user where user=』test』 and host=』127.0.0.1』 \g;
語法格式如下:
grant [privilege1|privilege2|all privileges] on dbname|.tablename 或 to user@hostname ;
當給test使用者授予xxpt選擇許可權時候:
grant select on xxpt.* to test.127.0.0.1;
db表發生了變化,新增加一條記錄。但是user表並沒有改變。如下:
此時,可以使用test使用者進行資料查詢操作,但是不能進行增、刪、改。於是授予其關於xxpt資料庫的所有許可權。
grant all privileges on xxpt.* to [email protected];
使用者test許可權如下:
此時可以更新資料
管理許可權sueper、process、file授予
grant sueper,process,file on . to 『test』@』127.0.0.1』;
語句中on後面只能是.
備註:usage 許可權用於登入,不能進行任何操作。
使用grant新增許可權,使用revoke進行許可權**。當然**許可權,也可以直接對user、db、tables_priv和columns_priv表進行操作。但是usage許可權是沒法收回的。
如**test對所有資料庫的讀寫許可權:
revoke select ,insert on . from [email protected];
1.使用mysqladmin
2.使用set password for [email protected] =password(『isayhello』);
3.通過grant usage
grant usage on . to 『test』@』127.0.0.1』 identified by 『isayhello』;
4.直接修改user表
update user set password=password(「newpassword」) where***;
MySQL許可權管理
本文主要講述的是mysql grant命令的例項演示,文中的mysql grant命令的實際操作主要是在mysql 5.0 及以上的相關版本上執行,下面就是對其具體操作步驟的描述,望你在瀏覽之後會有所收穫。mysql 賦予使用者許可權命令的簡單格式可概括為 grant 許可權 on 資料庫物件 to...
mysql 許可權管理
1.新增使用者 方法一 create user wangda localhost identified by password 000000 說明 建立乙個本地的使用者,使用者名為 wangda 密碼為 000000 如果密碼為空,則 identified by password 000000 這個...
mysql許可權管理
mysqladmin u root p password leftpassword 無密碼的話直接回車 任意主機登入host換成 create user username host identified by password privileges all 代表所有許可權 表示全部的資料庫 gran...