日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql用户的权限分配

發布時間:2023/12/19 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql用户的权限分配 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

因今天在分配數據庫權限的時候,同事反映賬戶不能使用函數,遂搜集資料總結了一番關于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" 表示該用戶可以為其他用戶分配權限。?

?

一、不同角色的權限分配

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 命令來替代:

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 外鍵權限。

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

grant 操作 MySQL 臨時表權限。

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

grant 操作 MySQL 索引權限。

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 statusgrant?alter?routine?on?testdb.*?to?developer@'%'; ?--?now, you can drop a proceduregrant?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';

?

二、不同層次的權限分配

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';

?

三、查看數據庫權限

1)查看當前用戶(自己)權限

show grants;

2)查看其他 MySQL 用戶權限

show grants?for?dba@localhost;

?

四、撤銷權限

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

revoke 跟 grant 的語法差不多,只需要把關鍵字 “to” 換成 “from” 即可:

grant?all?on?*.*?to?dba@localhost;revoke?all?on?*.*?from?dba@localhost;

?

五、注意事項

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

1)grant, revoke 用戶權限后,該用戶只有重新連接 MySQL 數據庫,權限才能生效;

2)如果想讓授權的用戶,也可以將這些權限 grant 給其他用戶,需要選項 “grant option“;

grant?select?on?testdb.*?to?dba@localhost?with?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。

授權表的內容有如下用途:

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 用戶及權限管理 小結

轉載于:https://my.oschina.net/u/3314358/blog/1865648

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的mysql用户的权限分配的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。