MySQL GRANT及REVOKE語法

2013-03-14_085405

這是MySQL 5實力養成暨評量裡的3-85.下列哪些項目屬於GRANT指令可以設定的權限值?

答案:(A)CREATE (B)DROP (C) INSERT (D)DELETE

讀者可以參考MySQL 5.6 Reference Manual :: 13 SQL Statement Syntax :: 13.7 Database Administration Statements :: 13.7.1 Account Management Statements :: 13.7.1.4 GRANT Syntax

或簡體中文手冊 MySQL 5.1參考手冊 :: 13. SQL語句語法::13.5. 數據庫管理語句::13.5.1. 賬戶管理語句::13.5.1.3. GRANT和REVOKE語法這裡,ㄚ琪轉譯成繁體中文略述於下:

GRANT priv_type [( column_list )] [, priv_type [( column_list )]] ...
    ON [ object_type ] { tbl_name | * | *.* | db_name .*}
    TO user [IDENTIFIED BY [PASSWORD] ' password ']
        [, user [IDENTIFIED BY [PASSWORD] ' password ']] ...
    [REQUIRE
        NONE |
        [{SSL| X509}]
        [CIPHER ' cipher ' [AND]]
        [ISSUER ' issuer ' [AND]]
        [SUBJECT ' subject ']]
    [WITH with_option [ with_option ] ...]

object_type =
    TABLE
  | FUNCTION
  | PROCEDURE

with_option =
    GRANT OPTION
  | MAX_QUERIES_PER_HOUR count 
  | MAX_UPDATES_PER_HOUR count 
  | MAX_CONNECTIONS_PER_HOUR count 
  | MAX_USER_CONNECTIONS count
REVOKE priv_type [( column_list )] [, priv_type [( column_list )]] ...
    ON [ object_type ] { tbl_name | * | *.* | db_name .*}
    FROM user [, user ] ...

REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user ] ...

GRANTREVOKE語法允許系統管理員增加MySQL用戶帳戶,授予權限和撤銷權限。

MySQL帳戶資訊存儲在mysql資料庫的資料表中。第5章:數據庫管理中對本資料庫和訪問控制系統進行了詳盡的討論。要了解更多詳細信息,您應該查詢此章。

如果授權表擁有含有mixed-case資料庫或資料表名稱的權限記錄,並且lower_case_table_names系統變數已設置,則不能使用REVOKE撤銷權限,必須直接操縱授權表。(當lower_case_table_names已設置時,GRANT將不會創建此類記錄,但是此類記錄可能已經在設置變數之前被創建了。)

授予的權限可以分為多個層級:

·          全域等級

全域權限適用於一個給定伺服器中的所有資料庫。這些權限存儲在mysql.user資料表中。GRANT ALL ON *.*REVOKE ALL ON *.*只授予和撤銷全域權限。

·          資料庫等級

資料庫權限適用於一個給定資料庫中的所有目標。這些權限存儲在mysql.dbmysql.host資料表中。GRANT ALL ON db_name .*REVOKE ALL ON db_name .*只授予和撤銷資料庫權限。

·          資料表等級

資料表權限適用於一個給定資料表中的所有欄位。這些權限存儲在mysql.talbes_priv資料表中。GRANT ALL ON db_name.tbl_nameREVOKE ALL ON db_name.tbl_name只授予和撤銷資料表權限。

·          欄位等級

欄位權限適用於一個給定資料表中的單一欄位。這些權限存儲在mysql.columns_priv資料表中。當使用REVOKE時,您必須指定與被授權欄位相同的欄位。

·          子程序等級

CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT權限適用於已存儲的子程序這些權限可以被授予為全域等級和資料庫等級。而且,除了CREATE ROUTINE外,這些權限可以被授予為子程序等級,並存儲在mysql.procs_priv資料表中。

當後續目標是一個資料表、一個已存儲的函數或一個已存儲的過程時,object_type子句應被指定為TABLEFUNCTIONPROCEDURE當從舊版本的MySQL升級時,要使用本子句,您必須升級您的授權資料表。請參見2.10.2節,“升級授權表”

要使用GRANTREVOKE,您必須擁有GRANT OPTION權限,並且您必須用於您正在授予或撤銷的權限。

要撤銷所有權限,需使用以下語法。此語法用於取消對於已命名的用戶的所有全域等級、資料庫等級、資料表等級和欄位等級的權限。

REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user ] ...

要使用本REVOKE語法,您必須擁有mysql資料庫的全域CREATE USER權限或UPDATE權限。

對於GRANTREVOKE語句,priv_type可以被指定為以下任何一種:

權限 意義
ALL [PRIVILEGES] 設置除GRANT OPTION之外的所有簡單權限
ALTER 允許使用ALTER TABLE
ALTER ROUTINE 更改或取消已存儲的子程序
CREATE 允許使用CREATE TABLE
CREATE ROUTINE 創建已存儲的子程序
CREATE TEMPORARY TABLES 允許使用CREATE TEMPORARY TABLE
CREATE USER 允許使用CREATE USER, DROP USER, RENAME USERREVOKE ALL PRIVILEGES
CREATE VIEW 允許使用CREATE VIEW
DELETE 允許使用DELETE
DROP 允許使用DROP TABLE
EXECUTE 允許用戶執行已存儲的子程序
FILE 允許使用SELECT…INTO OUTFILELOAD DATA INFILE
INDEX 允許使用CREATE INDEXDROP INDEX
INSERT 允許使用INSERT
LOCK TABLES 允許對您擁有SELECT權限的表使用LOCK TABLES
PROCESS 允許使用SHOW FULL PROCESSLIST
REFERENCES 未被實施
RELOAD 允許使用FLUSH
REPLICATION CLIENT 允許用戶詢問從屬伺服器或主伺服器的地址
REPLICATION SLAVE 用於複製從屬伺服器(從主服務器中讀取二進制日誌事件)
SELECT 允許使用SELECT
SHOW DATABASES SHOW DATABASES顯示所有資料庫
SHOW VIEW 允許使用SHOW CREATE VIEW
SHUTDOWN 允許使用mysqladmin shutdown
SUPER 允許使用CHANGE MASTER, KILL, PURGE MASTER LOGSSET GLOBAL語句,mysqladmin debug命令;允許您連接(一次),即使已達到max_connections
UPDATE 允許使用UPDATE
USAGE “無權限”的同義詞
GRANT OPTION 允許授予權限 

另外如果人客覺得有點複雜,倒是可以先讀讀深入淺出SQL的第十二章 安全性 保護你的資產這一章,這一章會說明CREATE USER、GRANT、REVOKE、WITH GRANT OPTION、ROLE、WITH ADMIN OPTION等語法,很便利~

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *