top
Loading...
5.8.4.限制賬戶資源
5.8.4. 限制賬戶資源

限制MySQL服務器資源使用的一個方法是將max_user_connections系統變量設置為非零值。但是,該方法嚴格限于全局,不允許管理具體賬戶。并且,它只限制使用單一賬戶同時連接的數量,而不是客戶端連接后的操作。許多MySQL管理員對兩種類型的控制均感興趣,特別是Internet服務提供者。

MySQL 5.1,你可以為具體賬戶限制下面的服務器資源:

·         賬戶每小時可以發出的查詢數

·         賬戶每小時可以發出的更新數

·         賬戶每小時可以連接服務器的次數

客戶端可以執行的語句根據查詢限制來記數。只有修改數據庫或表的語句根據更新限制來記數。

還可以限制每個賬戶的同時連接服務器的連接數。

本文中的賬戶為user表中的單個記錄。根據UserHost列值唯一識別每個賬戶。

做為使用該特性的先決條件,mysql數據庫的user表必須包含資源相關的列。資源限制保存在max_questionsmax_updatesmax_connectionsmax_user_connections列內。如果user表沒有這些列,必須對它進行升級;參見2.10.2節,“升級授權表”。

要想用GRANT語句設置資源限制,使WITH子句來命名每個要限制的資源和根據每小時記數的限制值。例如,要想只以限制方式創建可以訪問customer數據庫的新賬戶,執行該語句:

mysql> GRANT ALL ON customer.* TO 'francis'@'localhost'
    ->     IDENTIFIED BY 'frank'
    ->     WITH MAX_QUERIES_PER_HOUR 20
    ->          MAX_UPDATES_PER_HOUR 10
    ->          MAX_CONNECTIONS_PER_HOUR 5
    ->          MAX_USER_CONNECTIONS 2;

限制類型不需要全部在WITH子句中命名,但已經命名的可以按任何順序。每個每小時限制值均應為整數,代表每小時的記數。如果GRANT語句沒有WITH子句,則每個限制值設置為 默認值零(即沒有限制)。對于MAX_USER_CONNECTIONS,限制為整數,表示賬戶一次可以同時連接的最大連接數。如果限制設置為 默認值零,則根據MAX_USER_CONNECTIONS系統變量確定該賬戶可以同時連接的數量。

要想設置或更改已有賬戶的限制,在全局級別使用GRANT USAGE語句(*.*)。下面的語句可以將francis的查詢限制更改為100

mysql> GRANT USAGE ON *.* TO 'francis'@'localhost'
    ->     WITH MAX_QUERIES_PER_HOUR 100;

該語句沒有改變賬戶的已有權限,只修改了指定的限制值。

要想取消已有限制,將該值設置為零。例如,要想取消francis每小時可以連接的次數的限制,使用該語句:

mysql> GRANT USAGE ON *.* TO 'francis'@'localhost'
    ->     WITH MAX_CONNECTIONS_PER_HOUR 0;

當賬戶使用資源時如果有非零限制,則對資源使用進行記數。

服務器運行時,它統計每個賬戶使用資源的次數。如果賬戶在最后一個小時的連接次數達到限制,該賬戶的進一步的連接被拒絕。類似地,如果賬戶達到查詢或更新次數的限制,進一步的查詢或更新被拒絕。在這種情況下,會給出相關錯誤消息。

根據每個賬戶進行資源計算,而不是根據每個客戶端。例如,如果你的賬戶的查詢限制為50,你不能通過兩個客戶端同時連接服務器將限制增加到100。兩個連接的查詢被計算到一起。

可以為所有賬戶從全局重設當前的每小時資源使用記數,或單獨重設給定的賬戶:

·         要想將所有賬戶當前的記數重設為零,可以執行FLUSH USER_RESOURCES語句。還可以通過重載授權表來重設記數(例如,使用FLUSH PRIVILEGES語句或mysqladmin reload命令)

·         將具體賬戶的限制重新授予任何值,可以將它設置為零。要想實現,按照前面所述使用GRANT USAGE,并將限制值指定為該賬戶當前的限制值。

計數器重設不影響MAX_USER_CONNECTIONS限制。

當服務器啟動時所有記數從零開始。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html
北斗有巢氏 有巢氏北斗