MySQL中權限管理的詳圖介紹

權限管理

mysql權限系統通過下面兩個階段進行認證:

  • 對連接的用戶進行身份認證,合法的用戶通過認證,不合法的用戶拒絕連接。

  • 對通過認證的合法用戶授予相應的權限,用戶可以通過再這些權限范圍內對數據庫做相應的操作。
    在權限存取過程中,主要涉及到mysql數據庫下user表和db表。user表的數據結構如下:
    MySQL中權限管理的詳圖介紹
    db表數據結構如下:
    MySQL中權限管理的詳圖介紹
    表的說明:其中包含用戶列、權限列、安全列和資源控制列。用的最頻繁的是用戶列和權限列,權限分為普通權限和管理權限。普通權限用戶數據庫的操作如select_priv、insert_priv等。管理權限主要用來對數據庫進行管理的操作,比如process_priv、super_priv等。
    用戶進行連接的時候,權限表的存取過程:

  • 先從user表中的host、user和password這三個字段中判斷連接的ip、用戶名以及密碼是否存在表中,如果存在,則通過驗證,否則拒絕連接。

  • 通過身份驗證之后,按照以下權限表的順序得到數據庫權限:user->db->tables->priv->columns_priv。全局權限,覆蓋局部權限。比如一個用戶在user表中擁有選擇權限,那么他將對所有數據中的所有表所有的列都有選擇權限。
    MySQL中權限管理的詳圖介紹
    權限查找詳細描述:當用戶通過權限認證之后,進行權限分配時候,按照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中權限管理的詳圖介紹
創建之后,登錄如下:
MySQL中權限管理的詳圖介紹
MySQL加密方式: MYSQL323加密中生成的是16位字符串,而在MySQLSHA1中生存的是41位字符串,其中是不加入實際的密碼運算中,通過觀察在很多用戶中都攜帶了”“,在實際破解過程中去掉”*”,也就是說MySQLSHA1加密的密碼的實際位數是40位。
Host字段描述

  • Host值可以是主機名或者IP號,或者locahost代表本地主機。

  • 可以再host列值前面使用通配符”%”和”_”,”%”代表匹配任何主機,空的Host值等于”%”。如”%.myweb.com”,匹配所有mysql.com域的所有主機。案例如下:

Host User 解析
myweb.wang pps pps,從myweb.wang連接
% pps pps,從任何主機連接
% 任何用戶,從任何主機連接
122.164.35.127 pps pps,從122.164.35.127連接
122.164.35.% pps pps,從122.164.35.類型子網的任何主機連接

查看用戶權限

對于上面創建的test,我沒有進行任何授權操作,當我使用test用戶去操作數據庫時候,發現:
MySQL中權限管理的詳圖介紹
沒有數據庫操作權限,怎樣才能查看用戶擁有的權限呢?
查看權限
方法一:
show grants for test@127.0.0.1;
方法二:
查看user表中記錄的權限。
select * from mysql.user where user=’test’ and host=’127.0.0.1’ G;
MySQL中權限管理的詳圖介紹

授予權限

語法格式如下:
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表并沒有改變。如下:
MySQL中權限管理的詳圖介紹
此時,可以使用test用戶進行數據查詢操作,但是不能進行增、刪、改。于是授予其關于xxpt數據庫的所有權限。
grant all privileges on xxpt.* to test@127.0.0.1;
用戶test權限如下:
MySQL中權限管理的詳圖介紹
此時可以更新數據
MySQL中權限管理的詳圖介紹
管理權限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 test@127.0.0.1;

修改密碼

1.使用mysqladmin
2.使用set password for test@127.0.0.1 =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中權限

權限 ? ? ? ? ? ? ? ?

權限級別 ? ? ? ? ? ? ? ?

權限說明 ? ? ? ? ? ? ? ?

CREATE

數據庫、表或索引

創建數據庫、表或索引權限

DROP

數據庫或表

刪除數據庫或表權限

GRANT OPTION

數據庫、表或保存的程序

賦予權限選項

REFERENCES

數據庫或表

?

ALTER

更改表,比如添加字段、索引等

DELETE

刪除數據權限

INDEX

索引權限

INSERT

插入權限

SELECT

查詢權限

UPDATE

更新權限

CREATE VIEW

視圖

創建視圖權限

SHOW VIEW

視圖

查看視圖權限

ALTER ROUTINE

存儲過程

更改存儲過程權限

CREATE ROUTINE

存儲過程

創建存儲過程權限

EXECUTE

存儲過程

執行存儲過程權限

FILE

服務器主機上的文件訪問

文件訪問權限

CREATE TEMPORARY TABLES

服務器管理

創建臨時表權限

LOCK TABLES

服務器管理

鎖表權限

CREATE USER

服務器管理

創建用戶權限

PROCESS

服務器管理

查看進程權限

RELOAD

?

?

服務器管理

執行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的權限

REPLICATION CLIENT

服務器管理

復制權限

REPLICATION SLAVE

服務器管理

復制權限

SHOW DATABASES

服務器管理

查看數據庫權限

SHUTDOWN

服務器管理

關閉數據庫權限

SUPER

服務器管理

執行kill線程權限

?

MYSQL的權限如何分布,就是針對表可以設置什么權限,針對列可以設置什么權限等等,這個可以從官方文檔中的一個表來說明:

權限分布

可能的設置的權限

表權限

‘Select’, ‘Insert’, ‘Update’, ‘Delete’, ‘Create’, ‘Drop’, ‘Grant’, ‘References’, ‘Index’, ‘Alter’

列權限

‘Select’, ‘Insert’, ‘Update’, ‘References’

過程權限

‘Execute’, ‘Alter Routine’, ‘Grant’

?以上就是MySQL中權限管理的詳圖介紹的內容,更多相關內容請關注PHP中文網(www.php.cn)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享