1. 程式人生 > 實用技巧 >MySQL使用者與許可權

MySQL使用者與許可權



1.MySQL使用者和許可權管理

user表:包含使用者的帳號,全域性許可權

db表:資料庫級別的許可權定義

tables_priv表:表級別許可權

columns_priv表:列級別許可權

procs_priv表:儲存過程和儲存函式相關的許可權

proxies_priv表:代理使用者許可權



2.使用者帳號:

使用者名稱@主機構成

使用者名稱:16個字元以內

主機:

主機名:www.baidu.com| mysql

IP192.168.1.100

網路地址:192.168.1.0/255.255.255.0

萬用字元:% _

192.168.%.%

%.baidu.com

--skip-name-resolve:為了加速mysql伺服器的效能,而且訪問mysql的時候也不需要它通過主機名來認證,關閉一切基於主機名認證的方式來進行授權,提高使用者連線時候的速度



3.許可權級別:

全域性級別:SUPER,

庫級別:

表級別:

列級別:

儲存過程和儲存函式級別:



4.建立使用者

第一種:CREATE USER [email protected] IDENTIFIED BY 'password'

第二種:GRANT

第三種:INSERT INTO mysql.user

mysql>FLUSH PRIVILEGES;



4.1檢視某個使用者的授權資訊

SHOW GRANTS FOR '[email protected]';




5.為使用者新增student庫中“建立”的許可權

wKiom1VLfPPhsYwoAADd9PFMnIU868.jpg

wKiom1VLfPPCIHw5AADNNxFS6hM645.jpg



當建立資料庫的時候,顯示沒有許可權

wKioL1VLfo3zMTDkAAC2CtpOcMc607.jpg



6.為使用者新增建立sdb和建立sdb庫下任何表的許可權

wKiom1VLfUPAmEp2AAC0cyDKY20474.jpg

wKioL1VLfrey0lMrAAC3AV-U6zM975.jpg



7當我們為新建立的tb1表插入資料的時候,顯示沒有許可權

wKiom1VLfWOiCUBbAABOdRxx8eA013.jpg



8.為使用者新增sdb庫下插入資料的許可權

wKioL1VLfwyiKuhTAAChsPr6TOo766.jpg


當授權完成之後也重讀授權表(執行了FLUSH PRIVILEGES;)但是還是不能插入資料

wKiom1VLfa-BQfaKAABlbEOip4M949.jpg


當退出當前mysql再重新登入的時候發現可以插入資料了,所以INSERT許可權重新登入

wKiom1VLfb3C1jNuAABtGPQ2kjg266.jpg




9.為使用者同時新增UPDATEDELETE許可權,以及DELETE許可權

wKioL1VLf1yyj4W3AADTemBBZzA503.jpg


更新、刪除的時候顯示沒有許可權,和

INSERT許可權一樣,需要重新登入

wKiom1VLffuzlQ6OAACUG4ccLVs720.jpg




於是重新登入,發現沒有SELECT 許可權,因為要更新或者刪除某一條記錄,需要先查到之後才能進行刪除,所以需要SELECT許可權

wKioL1VLf7OTY3HMAAB-G3yWMI8351.jpg

wKiom1VLfj_ymZxDAAC7cy-sqZ4941.jpg

wKiom1VLfj-DLaqMAADOLtGLaEY830.jpg




10.撤銷某個使用者的某項許可權

wKioL1VLf97ypYvbAACrVRAyk8c228.jpg




11.撤銷使用者的UPDATE許可權,然後為使用者新增只能修改sdb庫下stb1表的age欄位的許可權

wKioL1VLgCDA4dzgAAFz95E8rNo760.jpg

wKiom1VLfq3Cm2DIAADPk5122Sw489.jpg

wKiom1VLfq3jCA9sAAC_HcXoTnE768.jpg




12.修改MySQL的全域性變數,killMySQL程序,需要有SUPER許可權

wKioL1VLgF6T5l32AABXc-0XwZI105.jpg

wKioL1VLgF6jmJcJAADCNgszHns878.jpg

wKiom1VLfuvBsrxVAABwn7NVF80192.jpg




13.刪除使用者、使用者重新命名

DROP USER [email protected]

RENAME USER old_name TO new_name;



14.忘記root密碼

14.1關閉MySQL服務

wKiom1VLfyGAQL4NAABC4pofHZk219.jpg



14.2編輯mysql指令碼,新增相關引數

編輯/etc/init.d/mysqld,找到下面內容,然後新增

--skip-grant-tables

--skip-networking

wKioL1VLgNDQwJbzAACNdfu9-vk902.jpg

wKioL1VLgNDh6dUVAACulxscLzw403.jpg




14.3啟動MySQL服務,並連線到MySQL

wKiom1VLf4qzgMWMAAE8yIwPLb4386.jpg



14.4修改密碼

當檢視使用修改授權表的方式去修改密碼的時候,MySQL顯示說不可以,因為當前啟動的MySQL服務已經跳過授權表了

wKioL1VLgSKhwKUaAABSbIJvKuM099.jpg



所以只能通過修改user表的方式來修改密碼了

wKiom1VLf9WAOg0jAABzk0RCSvA860.jpg



14.5修改完密碼以後,停止MySQL服務,刪除/etc/init.d/mysqld中剛才新增的內容

--skip-grants-table --skip-working然後重啟MySQL服務



15.許可權手冊

http://dev.mysql.com/doc/mysql-security-excerpt/5.5/en/privileges-provided.html

wKiom1VLgILi1IklAANltyJfWqY424.jpg

wKioL1VLgfaTy1ugAAJH1GZ2JnQ034.jpg



16.使用者授權的一些其它選項說明

wKioL1VLgj3Dy7uRAAEUwTt1DWQ346.jpg

一般情況下不需要使用object_type,當我們要指定特定的,表、儲存函式、儲存過程

的時候,就需要指定了


當需要為db_name庫中的儲存函式abc授權的時候,如果執行以下命令,是否可以正常

的給abc儲存函式授權呢?



GRANT EXECUTE ON db.abc TO [email protected]'%';

知道abc代表的是什麼嗎、?---》不知道----》所以我們需要指定授權的型別

所以要想給儲存函式abc授權,需要執行

GRANT EXECUTE ON FUNCTION db.abc TO [email protected]'%';





轉載於:https://blog.51cto.com/fanfusuzi/1644010