溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL權限系統(tǒng)簡介

發(fā)布時間:2020-08-04 19:39:04 來源:ITPUB博客 閱讀:158 作者:panpong 欄目:MySQL數(shù)據(jù)庫

1)          權限的授予與回收

方法一:MySQL 的權限系統(tǒng)相關權限信息主要存儲在幾個被稱為grant tables 的系統(tǒng)表中,即: mysql.User,mysql.db,mysql.Host,mysql.table_priv 和mysql.column_priv。手工修改了權限相關的表之后,都需要執(zhí)行“FLUSH PRIVILEGES”命令重新加載MySQL的權限信息;

方法二:通過GRANT,REVOKE 或者DROP USER 命令來修改相關權限,則不需要手工執(zhí)行FLUSH PRIVILEGES 命令;因為通過GRANT,REVOKE 或者DROP USER 命令所做的權限修改在修改系統(tǒng)表的同時也會更新內(nèi)存結構中的權限信息。在MySQL5.0.2 或更高版本的時候,MySQL 還增加了CREATE USER 命令,以此創(chuàng)建無任何特別權限(僅擁有初始USAGE權限)的用戶,通過CREATE USER 命令創(chuàng)建新了新用戶之后,新用戶的信息也會自動更新到內(nèi)存結構中。所以,建議讀者一般情況下盡量使用GRANT,REVOKE,CREATE USER 以及DROP  USER 命令來進行用戶和權限的變更操作,盡量減少直接修改grant tables 來實現(xiàn)用戶和權限變更的操作。

2)          查看授予的權限

查看某個用戶目前擁有的權限,這可以通過兩個方式實現(xiàn):

首先是通過執(zhí)行“SHOW GRANTS FOR 'username'@'hostname'” 命令來獲取之前該用戶身上的所有授權。

另一種方法是查詢grant tables 里面的權限信息。

3)          權限級別

MySQL 中的權限分為五個級別,分別如下:

權限

Global

Database

Table

Column

Routine

INSERT

Y

Y

Y

Y

SELECT

Y

Y

Y

Y

UPDATE

Y

Y

Y

Y

ALTER

Y

Y

Y

CREATE

Y

Y

Y

DELETE

Y

Y

Y

DROP

Y

Y

Y

INDEX

Y

Y

Y

ALTER  ROUTINE

Y

Y

Y

EXECUTE

Y

Y

Y

ALL  [PRIVILEGES]

Y

Y

CREATE  ROUTINE

Y

Y

CREATE  TABLESPACE

Y

Y

CREATE  TEMPORARY TABLES

Y

Y

CREATE  VIEW

Y

Y

EVENT

Y

Y

GRANT  OPTION

Y

Y

LOCK  TABLES

Y

Y

PROXY

Y

Y

REFERENCES

Y

Y

SHOW  DATABASES

Y

Y

SHOW  VIEW

Y

Y

TRIGGER

Y

Y

CREATE  USER

Y

FILE

Y

PROCESS

Y

RELOAD

Y

REPLICATION  CLIENT

Y

REPLICATION  SLAVE

Y

SHUTDOWN

Y

SUPER

Y

USAGE

Y


(1)Global Level

要授予Global Level 的權限,則只需要在執(zhí)行GRANT 命令的時候,用“*.*”來指定適用范圍是Global 的即可,當有多個權限需要授予的時候,也并不需要多次重復執(zhí)行GRANT命令,只需要一次將所有需要的權限名稱通過逗號(“,”)分隔開即可,如下:

mysql> GRANT SELECT,UPDATE,DELETE,INSERT ON *.* TO 'def'@'localhost';


(2)Database Level

如果要授予Database Level 的權限,則可以有兩種實現(xiàn)方式:

1、在執(zhí)行GRANT 命令的時候,通過“database.*”來限定權限作用域為database 整個數(shù)據(jù)庫,如下:

root@localhost : mysql 06:06:26> GRANT ALTER ON test.* TO 'def'@'localhost';

2、先通過USE 命令選定需要授權的數(shù)據(jù)庫,然后通過“*”來限定作用域,這樣授權的作用域?qū)嶋H上就是當前選定的整個數(shù)據(jù)庫。

root@localhost : mysql 06:14:05> USE test;

root@localhost : test 06:13:10> GRANT DROP ON * TO 'def'@'localhost';

在授予權限的時候,如果有相同的權限需要授予多個用戶,我們也可以在授權語句中一次寫上多個用戶信息,通過逗號(,)分隔開就可以了,如下:

root@localhost : mysql 05:22:32> grant create on perf.* to'abc'@'localhost','def'@'localhost';

(3)Table Level

Table Level 的權限作用范圍是授權語句中所指定數(shù)據(jù)庫的指定表。如可以通過如下語句給test 數(shù)據(jù)庫的t1 表授權:

root@localhost : test 12:02:15> GRANT INDEX ON test.t1 TO

上面的授權語句在測試給test 數(shù)據(jù)庫的t1 表授予Table Level 的權限的同時,還測試了將權限授予含有通配符“%”的所有“.jianzhaoyang.com”主機。其中的USAGE 權限是每個用戶都有的最基本權限。

(4)Column Level

Column Level 的權限授權語句語法基本和Table Level 差不多,只是需要在權限名稱后面將需要授權的列名列表通過括號括起來,如下:

root@localhost : test 12:14:46> GRANT SELECT(id,value) ON test.t2 TO

注意:當某個用戶在向某個表插入(INSERT)數(shù)據(jù)的時候,如果該用戶在該表中某列上面沒有INSERT 權限,則該列的數(shù)據(jù)將以默認值填充。這一點和很多其他的數(shù)據(jù)庫都有一些區(qū)別,是MySQL 自己在SQL 上面所做的擴展。

(5)Routine Level

Routine Level 的權限主要只有EXECUTE 和ALTER ROUTINE 兩種,主要針對的對象是procedure 和function 這兩種對象,在授予Routine Level 權限的時候,需要指定數(shù)據(jù)庫和相關對象,如:

root@localhost : test 04:03:26> GRANT EXECUTE ON test.p1 to

 

除了上面幾類權限之外,還有一個非常特殊的權限GRANT,擁有GRANT 權限的用戶可以將自身所擁有的任何權限全部授予其他任何用戶,所以GRANT 權限是一個非常特殊也非常重要的權限。GRANT 權限的授予方式也和其他任何權限都不太一樣,通常都是通過在執(zhí)行GRANT 授權語句的時候在最后添加WITH GRANT OPTION 子句達到授予GRANT 權限的目的。此外,我們還可以通過GRANT ALL 語句授予某個Level 的所有可用權限給某個用戶,如:

root@localhost : test 04:15:48> grant all on test.t5 to 'abc';

root@localhost : test 04:27:39> grant all on perf.* to 'abc';

在以上五個Level 的權限中,Table、Column 和Routine 三者在授權中所依賴(或者引用)的對象必須是已經(jīng)存在的,而不像Database Level 的權限授予,可以在當前不存在該數(shù)據(jù)庫的時候就完成授權。

【參考】
【1】MySQL性能調(diào)優(yōu)與架構設計 PDF中文版全冊.pdf,http://www.linuxidc.com/

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI