這是MySQL 5實力養成暨評量裡的6-20.『請參閱附圖作答
以下哪些權限不應授權給非管理者權限的使用者,這些權限可讓有權限的使用者可以看到目前正在執行的程序,或者可以修改伺服器的設定,或者可以將資料庫的內容匯出到檔案,開放這些權限,有可能造成資料庫資料被竊取會竄改的危險?』
答案:(A)PROCESS(B)SUPER(C)FILE
在手冊MySQL 5.7 Reference Manual :: 6 Security :: 6.2 The MySQL Access Privilege System :: 6.2.1 Privileges Provided by MySQL
或是簡體手冊
MySQL 5.1参考手册 :: 5. 数据库管理::5.7. MySQL访问权限系统::5.7.3. MySQL提供的权限
轉譯繁體中文如下:
帳號權限訊息被儲存在mysql資料庫的user、db、host、tables_priv、columns_priv和procs_priv資料表中。在MySQL啟動時並在5.7.7節,「權限更改何時生效」所說的情況時,伺服器將這些資料庫資料表內容讀入記憶體內。
GRANT和REVOKE語句所用的涉及權限的名稱顯示在下資料表,還有在授權資料表中每個權限的資料表列名稱和每個權限有關的上下文。關於每個權限的含意相關的詳細訊息參見MySQL GRANT及REVOKE語法。
權限 | 列 | 上下文 |
CREATE | Create_priv | 資料庫、資料表或索引 |
DROP | Drop_priv | 資料庫或資料表 |
GRANT OPTION | Grant_priv | 資料庫、資料表或保存的程式 |
REFERENCES | References_priv | 資料庫或資料表 |
ALTER | Alter_priv | 資料表 |
DELETE | Delete_priv | 資料表 |
INDEX | Index_priv | 資料表 |
INSERT | Insert_priv | 資料表 |
SELECT | Select_priv | 資料表 |
UPDATE | Update_priv | 資料表 |
CREATE VIEW | Create_view_priv | 視圖 |
SHOW VIEW | Show_view_priv | 視圖 |
ALTER ROUTINE | Alter_routine_priv | 預儲的程式 |
CREATE ROUTINE | Create_routine_priv | 預儲的程式 |
EXECUTE | Execute_priv | 預儲的程式 |
FILE | File_priv | 伺服器主機上的檔案存取 |
CREATE TEMPORARY TABLES | Create_tmp_table_priv | 伺服器管理 |
LOCK TABLES | Lock_tables_priv | 伺服器管理 |
CREATE USER | Create_user_priv | 伺服器管理 |
PROCESS | Process_priv | 伺服器管理 |
RELOAD | Reload_priv | 伺服器管理 |
REPLICATION CLIENT | Repl_client_priv | 伺服器管理 |
REPLICATION SLAVE | Repl_slave_priv | 伺服器管理 |
SHOW DATABASES | Show_db_priv | 伺服器管理 |
SHUTDOWN | Shutdown_priv | 伺服器管理 |
SUPER | Super_priv | 伺服器管理 |
當從早期的沒有CREATE VIEW、SHOW VIEW、CREATE ROUTINE、ALTER ROUTINE和EXECUTE權限的版本的MySQL中升級時,要想使用這些權限,您必須使用MySQL分發提供的mysql_fix_privilege_tables指令升級 授權資料表。參見2.10.2節,「升級授權資料表」。
如果啟用了二進制記錄,要想建立或修改保存的程式,您還需要SUPER權限,詳細描述見20.4節,「儲存子程式和觸發程式的二進制日誌功能」。
通過CREATE和DROP權限,您可以建立新資料庫和資料表,或刪除(移掉)已有資料庫和資料表。如果您將mysql資料庫中的DROP權限授予某用戶,用戶可以刪掉MySQL訪問權限保存的資料庫。
SELECT、INSERT、UPDATE和DELETE權限允許您在一個資料庫現有的資料表上實施操作。
SELECT語句只有在他們真正從一個資料表中檢索行時才需要SELECT權限。一些SELECT語句不存取資料表,甚至沒有任何到伺服器上的資料庫裡的存取任何東西的授權。例如,您可使用mysql客戶端作為一個簡單的計算器來評估未引用資料表的資料表達式:
mysql> SELECT 1+1;
mysql> SELECT PI()*2;
INDEX權限允許您建立或刪除索引。INDEX適用已有資料表。如果您具有某個資料表的CREATE權限,您可以在CREATE TABLE語句中包括索引定義。
通過ALTER權限,您可以使用ALTER TABLE來更改資料表的結構和重新命名資料表。
需要CREATE ROUTINE權限來建立預儲的程式(函式和程序),ALTER ROUTINE權限來更改和刪除預儲的程式,EXECUTE來執行預儲的程式。
GRANT權限允許您把您自己擁有的那些權限授給其他的用戶。可以用於資料庫、資料表和保存的程式。
FILE權限給予您用LOAD DATA INFILE和SELECT … INTO OUTFILE語句讀和寫伺服器上的檔案,任何被授予FILE權限的用戶都能讀或寫MySQL伺服器能讀或寫的任何檔案。(說明用戶可以讀任何資料庫目錄下的檔案,因為伺服器可以存取這些檔案)。 FILE權限允許用戶在MySQL伺服器具有寫權限的目錄下建立新檔案。不能覆蓋已有檔案。
其餘的權限用於管理性操作,它使用mysqladmin程式或SQL語句實施。下資料表顯示每個管理性權限允許您執行的mysqladmin命令:
權限 | 權限擁有者允許執行的命令 |
RELOAD | flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload |
SHUTDOWN | shutdown |
PROCESS | processlist |
SUPER | kill |
reload命令告訴伺服器將授權資料表重新讀入記憶體內。flush-privileges是reload的同義詞,refresh命令清空所有資料表並打開並關閉記錄檔案,其它flush-xxx命令執行類似refresh的功能,但是範圍更有限,並且在某些情況下可能更好用。例如,如果您只是想清空記錄檔案,flush-logs比refresh是更好的選擇。
shutdown命令關掉伺服器。只能從mysqladmin發出命令。沒有相應的SQL語句。
processlist命令顯示在伺服器內執行的線程的訊息(即其它帳號相關的客戶端執行的語句)。kill命令殺死伺服器線程。您總是能顯示或殺死您自己的線程,但是您需要PROCESS權限來顯示或殺死其他用戶和SUPER權限啟動的線程。參見13.5.5.3節,「KILL語法」。
擁有SHOW DATABASES權限便允許帳號使用SHOW DATABASE語句來查看資料庫名。沒有該權限的帳號只能看到他們具有部分權限的資料庫, 如果資料庫用–skip-show-database選項啟動,則根本不能使用這些語句。請注意全局權限指資料庫的權限。
總的說來,只授予權限給需要他們的那些用戶是好主意,但是您應該在授予FILE和管理權限時試驗特定的警告:
- FILE權限可以被濫用於將伺服器主機上MySQL能讀取的任何檔案讀入到資料庫資料表中。包括任何人可讀的檔案和伺服器數據目錄中的檔案。可以使用SELECT訪問資料庫資料表,然後將其內容傳輸到客戶端上。
- GRANT權限允許用戶將他們的權限給其他用戶。有不同的權限並有GRANT權限的2個用戶可以合併權限。
- ALTER權限可以用於通過重新命名資料表來推翻權限系統。
- SHUTDOWN權限通過終止伺服器可以被濫用完全拒絕為其他用戶服務。
- PROCESS權限能被用來察看當前執行的查詢的明文文本,包括設定或改變密碼的查詢。
- SUPER權限能用來終止其它用戶或更改伺服器的操作方式。
- 授給mysql資料庫本身的權限能用來改變密碼和其他訪問權限訊息。密碼被加密儲存,所以惡意的用戶不能簡單地讀取他們以知道明文密碼。然而,具有user資料表Password列寫訪問權限的用戶可以更改帳號的密碼,並可以用該帳號連接MySQL伺服器。
有一些事情您不能用MySQL權限系統做到:
- 您不能明顯地指定某個給定的用戶應該被拒絕訪問。即,您不能明顯地匹配用戶然後拒絕連接。
- 您不能指定用戶有權建立立或刪除資料庫中的資料表,但不能建立或刪除資料庫本身。