昨天分享了一些MySQL的權限, 但後來再檢查5.1版的手冊時, 找一些新的東西, 原來和3.1版多了不少新的權限進來, 今天我們就再討論MySQL的權限
由於我之前研究MySQL時版本才第3版而已, 不到幾年, 第5版出現了, 也有了很多不同的西出來, 例如: 建立帳號的指令, 在MySQL 5.1中已經有了不同的做法:
mysql> CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...
可以一次建立多個帳號, 實例是
mysql> CREATE USER simon IDENTIFIED BY 5678, john IDENTIFIED BY 1234;
同時建立了'simon'及'john'兩個帳號.
要能夠建立帳號, 必需要有'CREATE USER'全域權限(Global Privilege)或對系統資料庫'mysql'有'INSERT"的權限...一般來說, 'root'帳號擁有整個系統的最高、最完整的權限, 如果'root'想指另一個帳號也有創建帳號的權限, 可以用GRANT指令來完成這工作.
例如, 請一定要用帳號'root'來完成下面兩條指令的執行:
mysql> GRANT CREATE USER ON *.* TO simon@localhost;
或是
mysql> GRANT INSERT ON mysql.user to simon@localhost;
在這裏, 可以看到兩種不同的權限範圍的差異, 一個是全域權限, 即CREATE USER; 另一個是TABLE權限, 即INSERT. 另一個要注意的是'ON *.*', 只有對全域權才會這麼用, 其他範圍多半是用'ON 資料庫.資料表'的型式. GRANT指令的完整語法是:
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...
[REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
[WITH with_option [with_option] ...]
object_type:
TABLE
| FUNCTION
| PROCEDURE
priv_level:
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
with_option:
GRANT OPTION
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
ssl_option:
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
有興趣的人可以到MySQL官網找...可惜只有英文版...
不同於昨天的介紹, 現在的MySQL在權限方面已經有了更多的分類...
0. 全部權限
ALL [PRIVILEGES]: 授與資料庫的全部權限, 但無法'GRANT OPTION'讓被授權者享有移轉授權的能力
我們今天把權限做了比較詳細的說明, 日後我會在相關議題中再點點滴滴加強說明權限的細節, 明天開始將逐個說明各項資料庫物件的使用....咱們明天見...