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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql权限问题

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

1、mysql權限系統介紹?

mysql權限系統功能:實現對用戶的權限控制。 具體控制這些權限:
權限 權限級別 權限說明
CREATE 數據庫、表或索引 創建數據庫、表或索引權限
DROP 數據庫或表 刪除數據庫或表權限
ALTER 更改表,比如添加字段、索引等
DELETE 刪除數據權限
INDEX 索引權限
INSERT 插入權限
SELECT 查詢權限
UPDATE 更新權限
FILE 服務器主機上的文件訪問 文件訪問權限
CREATE USER 服務器管理 創建用戶權限
LOCK TABLES 服務器管理 鎖表權限
SHOW DATABASES 服務器管理 查看數據庫權限
SHUTDOWN 服務器管理 關閉數據庫權限
REPLICATION CLIENT 服務器管理 復制權限
RELOAD 服務器管理 執行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的權限
GRANT OPTION 數據庫、表或保存的程序 賦予權限選項?

2、權限系統實現原理

mysql的權限信息存儲在如下幾個被稱為grant tables的系統表中。
  • mysql.User
  • mysql.db
  • mysql.table_priv
  • mysql.column_priv
這些信息會被頻繁訪問,所以會加載到內存里。如果手動修改了上述的表,就需要調用FLUSH PRIVILEGES來重新加載內存。 通過GRANT,REVOKE, CREATE USER, DROP USER來修改權限的話,就會自動更新內存里的權限信息,無需調用FLUSH PRIVILEGES

3、主要依靠這幾張表中存儲的權限信息。?

表名 代表的權限級別
mysql.User global level
mysql.db database level
mysql.table_priv table level
mysql.column_priv column level?
查詢權限的時候,也是從global -> db -> table ....level從大到小的順序查詢的。 也就是說,如果mysql.User表中有匹配到row,就會使用該行數據進行權限判斷,不會再繼續往后查找是否還有匹配的信息了。 如果查詢到多行,則會使用host信息最接近的,其余的都不會使用。

4、授予或者取消用戶的權限

1、global level權限

其作用域是所有數據庫中的所有對象。要授予global level權限,只需在執行GRANT命令時,用“*.*”指定適用范圍是Global即可GRANT SELECT,UPDATE,DELETE,INSERT ON *.* TO 'username'@'localhost' @后面的是用戶的來訪主機

2、database level

其作用域是整個數據庫中所有的對象。database level相對于global level少了以下幾個權限。CREATE USER、FILE、PROCESS、RELOAD、REPLICATION CLIENT、REPLICATION SLAVE、SHOW DATABASES、SHUTDOWN、SUPER和USAGE。要授予database level權限,只需通過"database.*"即可 GRANT ALTER ON test.* TO 'username'@'localhost';獲取用戶在某個來訪主機下的訪問權限: SHOW GRANTS FOR username@localhost也可以先通過USE一個數據庫,把作用域限定在該數據庫下,然后直接"*"即可。 USE test; GRANT ALTER ON * TO 'username'@'localhost';給多個用戶授權,用,分隔即可。 grant create on perf.* to 'abc'@'localhost','def'@'localhost';username@host表示授予的用戶以及允許該用戶登錄的IP地址。其中Host有以下幾種類型: localhost:只允許該用戶在本地登錄,不能遠程登錄。 %:允許在除本機之外的任何一臺機器遠程登錄。 192.168.52.32:具體的IP表示只允許該用戶從特定IP登錄。

3、table level

授予table level權限,通過"database.table"即可。 僅有ALTER,CREATE,DELETE,DROP,INDEX,SELECT,INSERT,UPDATE八種權限。grant INDEX ON `test`.`t1` TO 'abc'@'%.xxx.com'; 把INDEX權限,在t1表的權限,授予abc用戶。該用戶的來訪主機必須是.xxx.com后綴的。

4、column level

方法如下: grant select(id,value) ON test.t2 TO 'abc'@'localhost';

5、routine level

只有EXECUTE,ALTER ROUTINE兩種,針對procedure(存儲過程)和function(函數) 如:grant EXECUTE ON test.p1 to 'abc'@'localhost'; 注意: GRANT權限很特殊,擁有GRANT權限的用戶,可以將自身擁有的任何權限都授予其他用戶。 可以通過GRANT ALL語句,把某個level的所有可用權限授予某個用戶。 grant all on test.t5 to 'abc'; grant all on perf.* to 'abc'; show grants for 'abc'; 注意:即使內存里的權限信息更新了。 global level的權限也不會對已經連接上的session生效,而是對新建的連接生效。 db level的權限,只有在use db命令執行后才會生效 table、column的權限,有需使用權限的query請求時就會生效。

5、查看用戶權限

查看當前用戶自己的權限: show grants; 查看其他 MySQL 用戶權限: show grants for?dba@localhost;

6、撤銷用戶權限

使用revoke 命令來注銷用戶的權限,具體語法: 要撤銷所有權限,需使用以下語法。此語法用于取消對于已命名的用戶的所有全局層級、數據庫層級、表層級和列層級的權限。 REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] … 指定具體的權限: REVOKE SELECT FROM username@localhost 注意: 使用GRANT或REVOKE,操作者必須擁有GRANT OPTION權限. 2 使用REVOKE撤銷全部權限, 操作者必須擁有mysql數據庫的全局CREATE USER權限或UPDATE權限。

轉載于:https://www.cnblogs.com/charon2/p/11314804.html

總結

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

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