mysql設定指定ip訪問,使用者許可權相關操作
基礎語法
GRANT priv_type ON database.table TO user[IDENTIFIED BY [PASSWORD] 'password'] [,user [IDENTIFIED BY [PASSWORD] 'password']...]
priv_type代表允許操作的許可權。
database.table代表資料庫名.表名
- 注意*代表所有,如database.*代表該資料庫的所有表,*.*代表所有資料庫的所有表
user由使用者名稱(User)和主機名(Host)構成,中間用@隔開,最好加上單引號,不加也可以執行通過。
password代表設定的密碼
例子
授權所有資料庫的所有表的所有許可權給ip為任意值使用者名稱為test密碼為pwd的使用者
GRANT ALL ON *.* TO 'test'@'%' IDENTIFIED BY 'pwd';
授權mydb資料庫的所有表的增刪改查許可權給ip為1.1.1.1使用者名稱為test密碼為pwd的使用者
GRANT SELECT,INSERT,UPDATE,DELETE ON mydb.* TO 'test'@'1.1.1.1' IDENTIFIED BY 'pwd';
授權mydb資料庫的stu表的修改許可權給ip為1.1.1.1使用者名稱為test密碼為pwd的使用者
GRANT UPDATE(name,age) ON mydb.stu TO 'test'@'1.1.1.1' IDENTIFIED BY 'pwd';
Mysql許可權層級相關表
user表:全域性層級
儲存使用者記錄的表。關鍵欄位有Host、User、Password。
建立對所有表有SELECT操作許可權的使用者
GRANT SELECT ON *.* TO [email protected]'1.1.1.1' IDENTIFIED BY 'pwd';
db表:資料庫層級
儲存該使用者對一個數據庫所有的操作許可權。關鍵欄位有Host、User、Db。
授予所有許可權
GRANT ALL ON mydb.* TO [email protected]'1.1.1.1' IDENTIFIED BY 'pwd';
tables_priv表:表層級
記錄了對一個表的單獨授權記錄.關鍵欄位有Host、User、Db、Table_name、Table_priv、Column_priv。
當授權all在某張表的時候,Table_priv會有如下授權記錄:
- Select,Insert,Update,Delete,Create,Drop,References,Index,Alter,Create View,Show view,Trigger。
單獨授權表的某一列,會記錄在此表的Column_priv裡
GRANT UPDATE(age) ON mydb.user TO [email protected]'1.1.1.1';
GRANT SELECT(birthday) ON mydb.user TO [email protected]'1.1.1.1';
此時會在另一張表columns_priv表中留下單獨授權記錄
columns_priv表:列層級
- 記錄對錶的某一列的授權記錄。關鍵欄位Host、User、Db、Table_name、Column_name。
procs_priv表:子程式層級
- 可以對儲存過程和儲存函式進行許可權設定。關鍵欄位Host、User、proc_priv
使用者相關操作
建立使用者
CREATE USER方式
必須要擁有CREATE USER許可權。
CREATE USER user[IDENTIFIED BY [PASSWORD] 'password'],
[user[IDENTIFIED BY [PASSWORD] 'password']]...CREATE USER 'name'@'%' IDENTIFIED BY 'pwd';
INSERT方式
必須擁有mysql.user表的INSERT許可權。另外,ssl_cipher、x509_issuer、x509_subject等必須要設定值
INSERT INTO mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) VALUES('%','name',PASSWORD('pwd'),'','','')
GRANT方式
需要擁有GRANT許可權。
GRANT priv_type ON database.table
TO user[IDENTIFIED BY [PASSWORD] 'password']
[,user [IDENTIFIED BY [PASSWORD] 'password']...]GRANT ALL ON mydb.* TO [email protected]'1.1.1.1' IDENTIFIED BY 'pwd';
刪除使用者
DROP USER方式
需要擁有DROP USER許可權。
DROP USER user[,user]…
- user是需要刪除的使用者,由使用者名稱(User)和主機名(Host)構成。
DROP USER [email protected]'1.1.1.1'
DELETE方式
DELETE FROM mydb.user WHERE Host = '% AND User = 'admin';
修改使用者
修改使用者名稱稱
RENAME USER name TO newname
修改使用者密碼
mysqladmin方式
mysqladmin -u username -p password "new_password";
修改user表
UPDATE user SET Password = PASSWORD('pwd') WHERE USER = 'name';
SET語句方式
修改自己使用者
SET PASSWORD = PASSWORD("pwd");
修改其他使用者
SET PASSWORD FOR 'name'@'%'=PASSWORD("pwd")
GRANT方式
GRANT SELECT ON *.* TO 'name'@'%' IDENTIFIED BY 'pwd'
忘記密碼
mysqld_saft方式
停止mysql:
service mysqld stop;
安全模式啟動:
mysqld_safe –skip-grant-tables &
無密碼回車鍵登入:`mysql -uroot –p
重置密碼:
use mysql; update user set password=password("") where user=’root’ and host=’localhost’; flush privileges;
正常啟動:
service mysql restart
再使用mysqladmin:
mysqladmin password '123456';
使用普通賬號來找回密碼
有一個修改test庫的使用者:grant all on mydb.* to [email protected]’%’ identified by ‘test’;
複製user表文件到test庫下並且賦予mysql使用者訪問許可權:
cp /home/data/mysql/data/mysql/user.* /home/data/mysql/data/test/;
chown mysql.mysql /home/data/mysql/data/test/user.*
mysql -utest -ptest登入修改root密碼
將test庫的user表文件覆蓋 mysql庫的user表文件
cp /home/data/mysql/data/mysql/user.* /tmp/;
mv /home/data/mysql/data/test/user.* /home/data/mysql/data/mysql/ ;
chown mysql.mysql /home/data/mysql/data/mysql/user.*;
查詢mysql程序號,並且傳送SIGHUP訊號,重新載入許可權表。
pgrep -n mysql;
kill -SIGHUP 11111;
無密碼登入,再使用mysqladmin重新設定密碼。
收回使用者許可權
檢視許可權
SHOW GRANTS;
SHOW GRANTS FOR [email protected]'%';
SELECT * FROM mysql.user WHERE USER='name' AND HOST='%';
revoke收回許可權
REVOKE priv_type[(column_list)]
ON database.table
FROM user[,user]
REVOKE EXECUTE ON mydb.* FROM [email protected]'%';
附錄常見概念
PRIVILEGES分類許可權
資料庫/資料表/資料列許可權
Alter: 修改已存在的資料表(例如增加/刪除列)和索引。
Create: 建立新的資料庫或資料表。
Delete: 刪除表的記錄。
Drop: 刪除資料表或資料庫。
-INDEX: 建立或刪除索引。
Insert: 增加表的記錄。
Select: 顯示/搜尋表的記錄。
Update: 修改表中已存在的記錄。
全域性管理MySQL使用者許可權:
file: 在MySQL伺服器上讀寫檔案。
PROCESS: 顯示或殺死屬於其它使用者的服務執行緒。
RELOAD: 過載訪問控制表,重新整理日誌等。
SHUTDOWN: 關閉MySQL服務。
特別的許可權:
ALL: 允許做任何事(和root一樣)。
USAGE: 只允許登入–其它什麼也不允許做。
user表中host列的值的意義
%:匹配所有主機
localhost:localhost不會被解析成IP地址,直接通過UNIXsocket連線
127.0.0.1:會通過TCP/IP協議連線,並且只能在本機訪問;
::1:相容支援ipv6的,表示同ipv4的127.0.0.1