這是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 ] ...
GRANT和REVOKE語法允許系統管理員增加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.db和mysql.host資料表中。GRANT ALL ON db_name .*和REVOKE ALL ON db_name .*只授予和撤銷資料庫權限。
· 資料表等級
資料表權限適用於一個給定資料表中的所有欄位。這些權限存儲在mysql.talbes_priv資料表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤銷資料表權限。
· 欄位等級
欄位權限適用於一個給定資料表中的單一欄位。這些權限存儲在mysql.columns_priv資料表中。當使用REVOKE時,您必須指定與被授權欄位相同的欄位。
· 子程序等級
CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT權限適用於已存儲的子程序。這些權限可以被授予為全域等級和資料庫等級。而且,除了CREATE ROUTINE外,這些權限可以被授予為子程序等級,並存儲在mysql.procs_priv資料表中。
當後續目標是一個資料表、一個已存儲的函數或一個已存儲的過程時,object_type子句應被指定為TABLE、FUNCTION或PROCEDURE。當從舊版本的MySQL升級時,要使用本子句,您必須升級您的授權資料表。請參見2.10.2節,“升級授權表”。
要使用GRANT或REVOKE,您必須擁有GRANT OPTION權限,並且您必須用於您正在授予或撤銷的權限。
要撤銷所有權限,需使用以下語法。此語法用於取消對於已命名的用戶的所有全域等級、資料庫等級、資料表等級和欄位等級的權限。
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user ] ...
要使用本REVOKE語法,您必須擁有mysql資料庫的全域CREATE USER權限或UPDATE權限。
對於GRANT和REVOKE語句,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 USER和REVOKE ALL PRIVILEGES。 |
CREATE VIEW | 允許使用CREATE VIEW |
DELETE | 允許使用DELETE |
DROP | 允許使用DROP TABLE |
EXECUTE | 允許用戶執行已存儲的子程序 |
FILE | 允許使用SELECT…INTO OUTFILE和LOAD DATA INFILE |
INDEX | 允許使用CREATE INDEX和DROP 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 LOGS和SET GLOBAL語句,mysqladmin debug命令;允許您連接(一次),即使已達到max_connections。 |
UPDATE | 允許使用UPDATE |
USAGE | “無權限”的同義詞 |
GRANT OPTION | 允許授予權限 |
另外如果人客覺得有點複雜,倒是可以先讀讀深入淺出SQL的第十二章 安全性 保護你的資產這一章,這一章會說明CREATE USER、GRANT、REVOKE、WITH GRANT OPTION、ROLE、WITH ADMIN OPTION等語法,很便利~
2 則留言