塗抹MySQL--第5章 MySQL資料庫中的許可權體系 - 5.2許可權授予與回收(2)
5.2.2 授予許可權
使用者管理的核心就是許可權分配,MySQL資料庫中授予許可權有專用命令GRANT,它不僅能夠授予許可權,甚至還能建立使用者(前面小節中演示過)。嚴謹些描述,它能在建立使用者的同時授予許可權,看起來授權操作倒像是順帶的功能一樣。
GRANT命令的語法看起來可是相當複雜的吶:
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user [IDENTIFIED BY [PASSWORD] 'password'] ...
[REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
[WITH with_option ...]
除了priv_type,其它幾個加粗的幾個子項詳細語法如下:
l object_type:
TABLE
| FUNCTION
| PROCEDURE
l priv_level:
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
l ssl_option:
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
l with_option:
GRANT OPTION
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
貌似漏掉了priv_type選項,放心我沒忘,最重要的priv_type需要放在最顯著的地方解說,它看起來最簡單,但可選項也最多,用於指定可授予(或收回)的許可權型別,對此官方文件中,針對可授予的許可權,專門列了個表羅列的很清晰:
許可權型別 |
簡要說明 |
ALL [PRIVILEGES] |
授予除 GRANT OPTION 外的所有許可權 |
ALTER |
允許執行ALTER TABLE操作 |
ALTER ROUTINE |
允許修改或刪除儲存過程和函式 |
CREATE |
允許建立資料庫和建立表物件 |
CREATE ROUTINE |
允許建立儲存過程和函式 |
CREATE TABLESPACE |
允許建立/修改或刪除表空間及日誌檔案組 |
CREATE TEMPORARY TABLES |
允許執行CREATE TEMPORARY TABLE語句建立臨時表 |
CREATE USER |
允許執行CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES語句 |
CREATE VIEW |
允許建立/修改檢視 |
DELETE |
允許執行DELETE語句 |
DROP |
允許刪除資料庫/表或檢視 |
EVENT |
允許使用Event物件 |
EXECUTE |
允許使用者執行儲存程式 |
FILE |
允許使用者讀寫檔案 |
GRANT OPTION |
允許將授予的許可權再由該使用者授予其它使用者 |
INDEX |
允許建立/刪除索引 |
INSERT |
允許執行INSERT語句 |
LOCK TABLES |
允許對擁有SELECT許可權的表物件執行LOCK TABLES |
PROCESS |
允許使用者執行SHOW PROCESSLIST命令檢視當前所有連線 |
PROXY |
允許使用PROXY |
REFERENCES |
尚未應用 |
RELOAD |
允許執行FLUSH操作 |
REPLICATION CLIENT |
允許使用者連線複製環境中的Master/Slave |
REPLICATION SLAVE |
允許複製環境的slave端從master端讀取資料 |
SELECT |
允許執行SELECT語句 |
SHOW DATABASES |
允許執行SHOW DATABASES語句顯示所有資料庫 |
SHOW VIEW |
允許執行SHOW CREATE VIEW檢視檢視定義 |
SHUTDOWN |
允許透過mysqladmin命令關閉資料庫 |
SUPER |
允許執行管理操作,比如CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL等語句 |
TRIGGER |
允許建立或刪除觸發器 |
UPDATE |
允許執行UPDATE操作 |
USAGE |
意指沒有許可權(no privileges) |
表5-2 MySQL使用者許可權
這個表羅列了所有可授予給使用者的許可權,不管針對什麼使用者,授予哪個物件,什麼粒度的許可權,都是從上面列表中的關鍵字中選擇。
以上幾段加一塊基本上就是grant語句的語法,看起來呢是複雜了一點點,不過不懂也沒關係,再說就算懂了也不一定記的住,就算記住了也不一定真能理解它在說什麼,就像現在人人都知道要先感謝國家,你懂的,人人都明白那不過就是說說(不過海外各種二代及二代親戚們說這話時應該是真心的),關鍵時刻得動真格的,得會用才行,三思爭取後面多弄幾個例子,讓大傢伙都搞明白這個事兒。
下面先舉個最簡單的例子幫助大家理解,我們要授予jss_grant@'192.168.30.203'使用者查詢mysql.user表的許可權,執行語句如下:
(system@localhost) [(none)]> grant select on mysql.user to jss_grant@'192.168.30.203';
Query OK, 0 rows affected (0.00 sec)
其中"select"對應的就是priv_type中的許可權,"mysql.user"對應priv_level中的db_name.tbl_name,這是一個最簡單的示例,當然啦,不使用grant語句,而透過insert,update方式修改字典表也是靠譜的!
話說MySQL資料庫中有些許可權的設計也很有意思,值得說道幾句。
首先是關於CREATE /DROP這類許可權,這是個很有意思的設定,拿CREATE許可權來說,如果一個使用者擁有了建庫的許可權,那麼它也一定能建立表(但不能建立檢視),此處的粒度設計沒有那麼細,MySQL資料庫並沒有將建庫和建表設計成兩種許可權,而是合二為一。DROP許可權也是類似的設計,不過與CREATE許可權有所不同的是,DROP許可權也能刪除檢視物件。其實其它資料庫中也有類似的設定,比如對於Oracle資料庫環境,某個使用者擁有建立物件的許可權的話,那麼它就一定擁有刪除這個物件的許可權。在Oracle看來,能建立就應該能刪除,這兩者是一體的,無法單獨剝離。就我個人看來,Oracle的設定明顯更為老道,而且符合邏輯,MySQL在這方面的設計還是顯的規劃有些不夠清晰。
其次關於ALL [PRIVILEGES]和GRANT OPTION兩種許可權,這是兩種比較特殊的許可權,甚至在授予或收回這兩類許可權時都不能與其它許可權同時操作,並且這兩個許可權並不像它們名字顯示的那樣是"全部"的許可權,後面的示例中會演示這一點。
最後關於USAGE許可權,按照上表的描述中所示,這個許可權的功能就是"沒有許可權",但其實它不是完全沒有許可權,至少它還有一項許可權,就是"登入許可權",對於使用CREATE USER語句建立的使用者,該使用者預設就會擁有USAGE許可權,但是,又的確像描述中所說的那樣,這個使用者除了能夠登入資料庫,別的什麼也做不了,因此就像是"沒有許可權"。
另外,還得再簡要說一下with_option的幾個選項:
l GRANT OPTION:允許使用者再將該許可權授予其它使用者;
l MAX_QUERIES_PER_HOUR:允許使用者每小時執行的查詢語句數量;
l MAX_UPDATES_PER_HOUR:允許使用者每小時執行的更新語句數量;
l MAX_CONNECTIONS_PER_HOUR:允許使用者每小時連線的次數;
l MAX_USER_CONNECTIONS:允許使用者同時連線伺服器的數量;
這塊的內容一看就是給使用者設限制使的,我個人認為意義不大,不是說沒有這類需求,而是這些選項的粒度仍然不夠細緻,不易碰到適合的應用場景,不過簡單瞭解一下也是有必要的,萬一哪天對某使用者看著不爽,Dbaer心裡應該明白,還是有法子限制該使用者能夠使用的資源的。
其它部分就先不多說了,何況這個事兒也不能說的太細,主要是太細的東西三思也不懂,不懂裝懂這個事兒俺臉皮雖然已經很厚,但做這類事兒的時候表情總是不夠自然,不過請童鞋們放心,俺一定會繼續努力,爭取早日複製貼上那誰的成功,用俺的真誠蒙到別人,蒙到所有的人~~~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1712841/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 塗抹MySQL--第5章 MySQL資料庫中的許可權體系 - 5.2許可權授予與回收(3)MySql資料庫
- 塗抹MySQL--第5章 MySQL資料庫中的許可權體系 - 5.2許可權授予與回收(1)MySql資料庫
- 塗抹MySQL--第5章 MySQL資料庫中的許可權體系 - 5.3許可權級別(2)MySql資料庫
- 塗抹MySQL--第5章 MySQL資料庫中的許可權體系 - 5.3許可權級別(1)MySql資料庫
- 塗抹MySQL--第5章 MySQL資料庫中的許可權體系 - 5.3許可權級別(3)MySql資料庫
- 塗抹MySQL--第5章 MySQL資料庫中的許可權體系 - 5.1談談許可權處理邏輯MySql資料庫
- 塗抹MySQL--第5章 MySQL資料庫中的許可權體系 - 5.4帳戶安全管理MySql資料庫
- 許可權授予、回收命令
- MySQL資料庫許可權體系入門(5)---管理資料庫許可權MySql資料庫
- unlimited tablespace許可權的授予和回收MIT
- MySQL資料庫許可權體系入門(4)---管理全域性許可權MySql資料庫
- MySQL資料庫許可權體系入門(3)---管理使用者許可權MySql資料庫
- [資料庫]MYSQL之授予/查驗binlog許可權資料庫MySql
- 【LIUNX】目錄或檔案許可權,許可權授予
- 許可權系統:一文搞懂功能許可權、資料許可權
- 【MySql】許可權不足導致的無法連線到資料庫以及許可權的授予和撤銷MySql資料庫
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- MySQL資料庫許可權體系入門(6)---管理表、列及程式相關許可權MySql資料庫
- 物件許可權的回收物件
- chomd檔案許可權授予
- Mysql資料庫許可權問題MySql資料庫
- MySQL資料庫許可權體系入門(2)---建立使用者MySql資料庫
- MySQL許可權體系--PPT分享~MySql
- MySQL許可權系統MySql
- mysql許可權MySql
- MySQL 許可權MySql
- 擁有GRANT ANY OBJECT PRIVILEGE許可權時的許可權回收Object
- 資料庫的許可權管理資料庫
- MySQL資料庫許可權體系入門(1)---工作原理MySql資料庫
- 【許可權管理】Oracle中檢視、回收使用者許可權Oracle
- 【MySql】mysql的許可權體系介紹MySql
- 【MySql】mysql 的許可權體系介紹MySql
- 資料許可權
- 【詳解】GrantedAuthority(已授予的許可權)
- oracle受權與回收許可權grant和revokeOracle
- MySQL資料庫Root許可權MOF方法提權研究MySql資料庫
- 資料庫安全之許可權與角色資料庫
- DB2許可權與授權DB2