top
Loading...
5.7.3.MySQL提供的權限
5.7.3. MySQL提供的權限

賬戶權限信息被存儲在mysql數據庫的userdbhosttables_privcolumns_privprocs_priv表中。在MySQL啟動時并在5.7.7節,“權限更改何時生效”所說的情況時,服務器將這些數據庫表內容讀入內存。

GRANTREVOKE語句所用的涉及權限的名稱顯示在下表,還有在授權表中每個權限的表列名稱和每個權限有關的上下文。關于每個權限的含義相關的詳細信息參見13.5.1.3節,“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 VIEWSHOW VIEWCREATE ROUTINEALTER ROUTINEEXECUTE權限的版本的MySQL中升級時,要想使用這些權限,你必須使用MySQL分發提供的mysql_fix_privilege_tables腳本升級 授權表。參見2.10.2節,“升級授權表”。

如果啟用了二進制記錄,要想創建或修改保存的程序,你還需要SUPER權限,詳細描述見20.4節,“存儲子程序和觸發程序的二進制日志功能”。

通過CREATEDROP權限,你可以創建新數據庫和表,或刪除(移掉)已有數據庫和表。如果你將mysql數據庫中的DROP權限授予某用戶,用戶可以刪掉MySQL訪問權限保存的數據庫。

SELECTINSERTUPDATEDELETE權限允許你在一個數據庫現有的表上實施操作。

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 INFILESELECT ... 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-privilegesreload的同義詞,refresh命令清空所有表并打開并關閉記錄文件,其它flush-xxx命令執行類似refresh的功能,但是范圍更有限,并且在某些情況下可能更好用。例如,如果你只是想清空記錄文件,flush-logsrefresh是更好的選擇。

shutdown命令關掉服務器。只能從mysqladmin發出命令。沒有相應的SQL語句。

processlist命令顯示在服務器內執行的線程的信息(即其它賬戶相關的客戶端執行的語句)。kill命令殺死服務器線程。你總是能顯示或殺死你自己的線程,但是你需要PROCESS權限來顯示或殺死其他用戶和SUPER權限啟動的線程。參見13.5.5.3節,“KILL語法”。

擁有CREATE TEMPORARY TABLES權限便可以使用CREATE TABLE語句中的關鍵字TEMPORARY

擁有LOCK TABLES權限便可以直接使用LOCK TABLES語句來鎖定你擁有SELECT權限的表。包括使用寫鎖定,可以防止他人讀鎖定的表。

擁有REPLICATION CLIENT權限便可以使用SHOW MASTER STATUSSHOW SLAVE STATUS

REPLICATION SLAVE權限應授予從服務器所使用的將當前服務器連接為主服務器的賬戶。沒有這個權限,從服務器不能發出對主服務器上的數據庫所發出的更新請求。

擁有SHOW DATABASES權限便允許賬戶使用SHOW DATABASE語句來查看數據庫名。沒有該權限的賬戶只能看到他們具有部分權限的數據庫, 如果數據庫用--skip-show-database選項啟動,則根本不能使用這些語句。請注意全局權限指數據庫的權限。

總的說來,只授予權限給需要他們的那些用戶是好主意,但是你應該在授予FILE和管理權限時試驗特定的警告:

  • FILE權限可以被濫用于將服務器主機上MySQL能讀取的任何文件讀入到數據庫表中。包括任何人可讀的文件和服務器數據目錄中的文件。可以使用SELECT訪問數據庫表,然后將其內容傳輸到客戶端上。
  • GRANT權限允許用戶將他們的權限給其他用戶。有不同的權限并有GRANT權限的2個用戶可以合并權限。
  • ALTER權限可以用于通過重新命名表來推翻權限系統。
  • SHUTDOWN權限通過終止服務器可以被濫用完全拒絕為其他用戶服務。
  • PROCESS權限能被用來察看當前執行的查詢的明文文本,包括設定或改變密碼的查詢。
  • SUPER權限能用來終止其它用戶或更改服務器的操作方式。
  • 授給mysql數據庫本身的權限能用來改變密碼和其他訪問權限信息。密碼被加密存儲,所以惡意的用戶不能簡單地讀取他們以知道明文密碼。然而,具有userPassword列寫訪問權限的用戶可以更改賬戶的密碼,并可以用該賬戶連接MySQL服務器。

有一些事情你不能用MySQL權限系統做到:

  • 你不能明顯地指定某個給定的用戶應該被拒絕訪問。即,你不能明顯地匹配用戶然后拒絕連接。
  • 你不能指定用戶有權創建立或刪除數據庫中的表,但不能創建或刪除數據庫本身。
作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html
北斗有巢氏 有巢氏北斗