iT邦幫忙

DAY 5
5

只談MySQL系列 第 5

只談MySQL (第五天) 再談權限...

昨天分享了一些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'讓被授權者享有移轉授權的能力

  1. 全域權限:
    CREATE USER: 啟動創建帳號權限, 同時也啟動DROP USER, RENAME USER和REVOKE ALL PRIVILEGES等權限
    FILE: 讓帳號擁有讀寫伺服器檔案系統的權限
    PROCESS: 讓帳號能夠看到所有執行緒, 可以執行SHOW PROCESSLIST指令
    RELOAD: 可使用FLUSH指令的權限
    REPLICATION CLIENT: 授權可詢問做Replication的MASETR/SLAVE Server在那裏
    REPLICATION SLAVE: 授權可詢問MASTER Serverl的Binary Log Events
    SHOW DATABASES: 授權使用'SHOW DATABASE'指令
    SHUTDOWN: 可使用'mysqladmin'指令關閉資料庫系統程式
    SUPER: 可使用'CHANGE MASTER TO', 'KILL', 'PURGE BINARY LOGS', 'SET GLOBAL'等指令, 和'mysqladmin'中的'debug'命令集, 而且有能加突破max_connections參的限制不受連線數目的影響
  2. 資料庫權限, 需要在系統資料庫中授權
    CREATE: 可建立資料庫
    DROP: 可刪除資料庫
    EVENT: 授權使用排程功能
    GRANT OPTION: 授權帳號可對其他帳號進行同等權限的授權或除權工作
  3. 資料表權限
    ALTER: 可使用'ALTER TABLE'指令
    CREATE VIEW: 可建立或變更View
    CREATE: 建立Table, 在非系統資料庫中的權限僅及於TABLE
    CREATE TEMPORARY TABLES: 使用'CREATE TEMPORARY TABLE'指令的權限
    DELETE:可用'DELETE'指令
    DROP:可用'DROP'刪除TABLE、VIEW等物件, 這也是在非系統資料庫中的授權
    GRANT OPTION: 授權帳號可對其他帳號進行同等權限的授權或除權工作
    INDEX: 可以建立或刪除INDEX物件
    INSERT: 可用'INSERT'指令
    LOCK TABLES: 可鎖定TABLE的權限, 是在'SELECT'指令中加上'LOCK TABLES'參數
    SELECT: 可用'SELECT'指令
    SHOW VIEW: 可用'SHOW CREATE VIEW'指令的權限
    TRIGGER: 可使用建立與刪除TRIGGER物件的指令
    UPDATE: 可使用'UPDATE'指令
    USAGE: 同義於no privileges”, 完全不授權
  4. 執行程式權限
    ALTER ROUTINE: 可修改或刪除Sored procedure或Function的權限
    CREATE ROUTINE: 創建Sored procedure或Function的權限
    EXECUTE:執行Sored procedure或Function的權限
    GRANT OPTION: 授權帳號可對其他帳號進行同等權限的授權或除權工作
    而REVOKE指令的完全語法是:
    REVOKE
    priv_type [(column_list)]
    [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    FROM user [, user] ...
    請參考GRANT....

我們今天把權限做了比較詳細的說明, 日後我會在相關議題中再點點滴滴加強說明權限的細節, 明天開始將逐個說明各項資料庫物件的使用....咱們明天見...


上一篇
只談MySQL (第四天) 帳號與權限
下一篇
只談MySQL (第六天) 資料表
系列文
只談MySQL30

尚未有邦友留言

立即登入留言