MySQL 賦予用戶權限命令的簡單格式可歸納爲:mysql
1、grant 普通數據用戶,查詢、插入、更新、刪除 數據庫中全部表數據的權利。sql
或者,用一條 MySQL 命令來替代:數據庫
2、grant 數據庫開發人員,建立表、索引、視圖、存儲過程、函數。。。等權限。apache
grant 建立、修改、刪除 MySQL 數據表結構權限。服務器
grant 操做 MySQL 外鍵權限。ide
grant 操做 MySQL 臨時表權限。函數
grant 操做 MySQL 索引權限。code
grant 操做 MySQL 視圖、查看視圖源代碼 權限。對象
grant 操做 MySQL 存儲過程、函數 權限。blog
3、grant 普通 DBA 管理某個 MySQL 數據庫的權限。
其中,關鍵字 「privileges」 能夠省略。
4、grant 高級 DBA 管理 MySQL 中全部數據庫的權限。
5、MySQL grant 權限,分別能夠做用在多個層次上。
1. grant 做用在整個 MySQL 服務器上:
2. grant 做用在單個數據庫上:
3. grant 做用在單個數據表上:
這裏在給一個用戶受權多張表時,能夠屢次執行以上語句。例如:
4. grant 做用在表中的列上:
5. grant 做用在存儲過程、函數上:
6、查看 MySQL 用戶權限
查看當前用戶(本身)權限:
查看其餘 MySQL 用戶權限:
7、撤銷已經賦予給 MySQL 用戶權限的權限。
revoke 跟 grant 的語法差很少,只須要把關鍵字 「to」 換成 「from」 便可:
8、MySQL grant、revoke 用戶權限注意事項
1. grant, revoke 用戶權限後,該用戶只有從新鏈接 MySQL 數據庫,權限才能生效。
2. 若是想讓受權的用戶,也能夠將這些權限 grant 給其餘用戶,須要選項 「grant option「
這個特性通常用不到。實際中,數據庫權限最好由 DBA 來統一管理。
*************************************************************************************************
遇到 SELECT command denied to user '用戶名'@'主機名' for table '表名' 這種錯誤,解決方法是須要把吧後面的表名受權,便是要你受權核心數據庫也要。
我遇到的是SELECT command denied to user 'my'@'%' for table 'proc',是調用存儲過程的時候出現,原覺得只要把指定的數據庫受權就好了,什麼存儲過程、函數等都不用再管了,誰知道也要把數據庫mysql的proc表受權
*************************************************************************************************
mysql受權表共有5個表:user、db、host、tables_priv和columns_priv。
受權表的內容有以下用途:
user表
user表列出能夠鏈接服務器的用戶及其口令,而且它指定他們有哪一種全局(超級用戶)權限。在user表啓用的任何權限均是全局權限,並適用於全部數據庫。例如,若是你啓用了DELETE權限,在這裏列出的用戶能夠從任何表中刪除記錄,因此在你這樣作以前要認真考慮。
db表
db表列出數據庫,而用戶有權限訪問它們。在這裏指定的權限適用於一個數據庫中的全部表。
host表
host表與db表結合使用在一個較好層次上控制特定主機對數據庫的訪問權限,這可能比單獨使用db好些。這個表不受GRANT和REVOKE語句的影響,因此,你可能發覺你根本不是用它。
tables_priv表
tables_priv表指定表級權限,在這裏指定的一個權限適用於一個表的全部列。
columns_priv表columns_priv表指定列級權限。這裏指定的權限適用於一個表的特定列。