mysql用戶的權限分配

因今天在分配數據庫權限的時候,同事反映帳戶不能使用函數,遂蒐集資料總結了一番關於mysql用戶的權限分配。html

MySQL 賦予用戶權限命令的簡單格式可歸納爲:mysql

grant 權限 on 數據庫對象 to 用戶

權限列表:
ALTER: 修改表和索引。
CREATE: 建立數據庫和表。
DELETE: 刪除表中已有的記錄。
DROP: 拋棄(刪除)數據庫和表。
INDEX: 建立或拋棄索引。
INSERT: 向表中插入新行。
REFERENCE: 未用。
SELECT: 檢索表中的記錄。
UPDATE: 修改現存表記錄。
FILE: 讀或寫服務器上的文件。
PROCESS: 查看服務器中執行的線程信息或殺死線程。
RELOAD: 重載受權表或清空日誌、主機緩存或表緩存。
SHUTDOWN: 關閉服務器。
ALL: 全部權限,ALL PRIVILEGES同義詞。
USAGE: 特殊的 "無權限" 權限。
用 戶帳戶包括 "username" 和 "host" 兩部分,後者表示該用戶被容許從何地接入。tom@'%' 表示任何地址,默承認以省略。還能夠是 "tom@192.168.1.%"、"tom@%.abc.com" 等。數據庫格式爲 db@table,能夠是 "test.*" 或 "*.*",前者表示 test 數據庫的全部表,後者表示全部數據庫的全部表。
子句 "WITH GRANT OPTION" 表示該用戶能夠爲其餘用戶分配權限。 sql

 

1、不一樣角色的權限分配

1)普通數據用戶

查詢、插入、更新、刪除 數據庫中全部表數據的權利。數據庫

grant select on testdb.* to common_user@'%';

grant insert on testdb.* to common_user@'%';

grant update on testdb.* to common_user@'%';

grant delete on testdb.* to common_user@'%';

或者,用一條 MySQL 命令來替代:apache

grant select, insert, update, delete on testdb.* to common_user@'%'

2)數據庫開發人員

建立表、索引、視圖、存儲過程、函數。。。等權限。緩存

grant 建立、修改、刪除 MySQL 數據表結構權限。服務器

grant create on testdb.* to developer@'%';

grant alter on testdb.* to developer@'%';

grant drop on testdb.* to developer@'%';

grant 操做 MySQL 外鍵權限。ide

grant references on testdb.* to developer@'%';

grant 操做 MySQL 臨時表權限。函數

grant create temporary tables on testdb.* to developer@'%';

grant 操做 MySQL 索引權限。spa

grant index on testdb.* to developer@'%';

grant 操做 MySQL 視圖、查看視圖源代碼 權限。

grant create view on testdb.* to developer@'%';

grant show view on testdb.* to developer@'%';

grant 操做 MySQL 存儲過程、函數 權限。

grant create routine on testdb.* to developer@'%';     -- now, can show procedure status

grant alter routine on testdb.* to developer@'%';      -- now, you can drop a procedure

grant execute on testdb.* to developer@'%';

3)普通 DBA

管理某個 MySQL 數據庫的權限。

grant all privileges on testdb to dba@'localhost';

其中,關鍵字 「privileges」 能夠省略。

4)高級 DBA

管理 MySQL 中全部數據庫的權限。

grant all on *.* to dba@'localhost';

 

2、不一樣層次的權限分配

MySQL grant 權限,分別能夠做用在多個層次上。

1)做用在整個數據庫上

grant select on *.* to dba@localhost;                   -- dba 能夠查詢 MySQL 中全部數據庫中的表。

grant all on *.* to dba@localhost;                      -- dba 能夠管理 MySQL 中的全部數據庫

2. 做用在單個數據庫上

grant select on testdb.* to dba@localhost;              -- dba 能夠查詢 testdb 中的表。

3. 做用在單個數據表上

grant select, insert, update, delete on testdb.orders to dba@localhost;

這裏在給一個用戶受權多張表時,能夠屢次執行以上語句。例如:

grant select(user_id,username) on smp.users to mo_user@'%' identified by '123345';

grant select on smp.mo_sms to mo_user@'%' identified by '123345';

4)做用在表中的列上

grant select(id, se, rank) on testdb.apache_log to dba@localhost;

5)做用在存儲過程、函數上

grant execute on procedure testdb.pr_add to 'dba'@'localhost';

grant execute on function testdb.fn_add to 'dba'@'localhost';

 

3、查看數據庫權限

1)查看當前用戶(本身)權限

show grants;

2)查看其餘 MySQL 用戶權限

show grants for dba@localhost;

 

4、撤銷權限

撤銷已經賦予給 MySQL 用戶權限的權限。

revoke 跟 grant 的語法差很少,只須要把關鍵字 「to」 換成 「from」 便可:

grant all on *.* to dba@localhost;

revoke all on *.* from dba@localhost;

 

5、注意事項

grant、revoke 用戶權限分幾點注意事項

1)grant, revoke 用戶權限後,該用戶只有從新鏈接 MySQL 數據庫,權限才能生效;

2)若是想讓受權的用戶,也能夠將這些權限 grant 給其餘用戶,須要選項 「grant option「;

grant select on testdb.* to dba@localhost with grant option;

這個特性通常用不到。若是想要了解更多關於受權給其餘用戶的權限,可參照權限控制問題。實際中,數據庫權限最好由 DBA 來統一管理。

 

6、錯誤處理

遇到 SELECT command denied to user '用戶名'@'主機名' for table '表名' 這種錯誤

解決方法是須要把後面的表名受權,便是要你受權核心數據庫也要。

我遇到的是SELECT command denied to user 'my'@'%' for table 'proc',是調用存儲過程的時候出現,原覺得只要把指定的數據庫受權就好了,什麼存儲過程、函數等都不用再管了,誰知道也要把數據庫mysql的proc表受權

 

7、數據庫受權表

mysql受權表共有5個:user、db、host、tables_priv和columns_priv。

受權表的內容有以下用途:

1)user表

user表列出能夠鏈接服務器的用戶及其口令,而且它指定他們有哪一種全局(超級用戶)權限。在user表啓用的任何權限均是全局權限,並適用於全部數據庫。例如,若是你啓用了DELETE權限,在這裏列出的用戶能夠從任何表中刪除記錄,因此在你這樣作以前要認真考慮。

 

2)db表

db表列出數據庫,而用戶有權限訪問它們。在這裏指定的權限適用於一個數據庫中的全部表。

 

3)host表

host表與db表結合使用在一個較好層次上控制特定主機對數據庫的訪問權限,這可能比單獨使用db好些。這個表不受GRANT和REVOKE語句的影響,因此,你可能發覺你根本不是用它。

 

4)tables_priv表

tables_priv表指定表級權限,在這裏指定的一個權限適用於一個表的全部列。

 

5)columns_priv表

columns_priv表指定列級權限。這裏指定的權限適用於一個表的特定列。

 

 

 

 

參考資料

1. mysql數據庫有幾張受權表

2. mysql 函數執行權限

3. mysql 用戶及權限管理 小結

相關文章
相關標籤/搜索