1. 程式人生 > >mysql設定指定ip訪問,使用者許可權相關操作

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。

  • 授予所有許可權

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']...]

刪除使用者

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]

附錄常見概念

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