標籤:mysql許可權 mysql使用者
使用者:
MySQL的使用者和作業系統沒有關係
使用者公開的,密碼加密的 加密方式:password函數
使用者帳號:
使用者名稱@主機
使用者名稱:16字元以內
主機:
主機名稱:www.benet.com, mysql
IP: 192.168.1.1
網路地址:
192.168.1.0/255.255.255.0
萬用字元:%,_
192.168.%.%
%.benet.com
建立使用者的兩種方法:
1.使用命令建立。最基本許可權,一般建立完成之後會自動讀取許可權列表
文法:
CREATE USER [email protected] [IDENTIFIED BY ‘password‘]
例子:建立使用者為test,主機為萬用字元,密碼為test
mysql> CREATE USER [email protected]‘%‘ IDENTIFIED BY ‘test‘;
2.直接在MySQL.user表中插入使用者資訊
INSERT INTO mysql.user
插入資料不會重新讀取許可權,需要手動重新整理
mysql> FLUSH PRIVILEGES;
刪除使用者
DROP USER ‘username‘@‘localhost‘;
重新命名使用者
RENAME USER 舊使用者名稱 TO 新使用者名稱;
許可權
設定使用者權限(使用者不存在時,則建立使用者)
GRANT 許可權列表 ON 資料庫名.表名 TO 使用者名稱@來源地址 [ IDENTIFIED BY ‘密碼’ ]
查看使用者的許可權
SHOW GRANTS FOR 使用者名稱@網域名稱或IP
撤銷使用者的許可權
REVOKE 許可權列表 ON 資料庫名.表名 FROM 使用者名稱@網域名稱或IP
操作:
查看使用者權限
mysql> SHOW GRANTS FOR [email protected]‘%‘;
+-----------------------------------------------------------------------------------------------------+| Grants for [email protected]% |+-----------------------------------------------------------------------------------------------------+| GRANT USAGE ON *.* TO ‘test‘@‘%‘ IDENTIFIED BY PASSWORD ‘*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29‘ |+-----------------------------------------------------------------------------------------------------+
使用test使用者登入資料庫
查看資料庫只能看到一個資料庫
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
+-------------------+
建立一個資料庫,失敗
mysql> CREATE DATABASE aa;
ERROR 1044 (42000): Access denied for user ‘test‘@‘%‘ to database ‘aa‘
允許test使用者建立資料庫
mysql> GRANT CREATE ON testdb.* TO ‘test‘@‘%‘;
使用test使用者建立資料庫沒有報錯
mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.00 sec)
進入testdb資料庫建立表成功
mysql> USE testdb;
Database changed
mysql> CREATE TABLE testtb (ID INT UNSIGNED AUTO_INCREMENT NOT NULL, Name CHAR(20), PRIMARY KEY(ID));
Query OK, 0 rows affected (0.21 sec)
往testtb表中插入資料報錯
mysql> INSERT INTO testdb (Name) VALUES (‘zhangsan‘);
ERROR 1142 (42000): INSERT command denied to user ‘test‘@‘localhost‘ for table ‘testdb‘
授予test使用者往testdb.*中所有表插入資料的許可權
mysql> GRANT INSERT ON testdb.* TO ‘test‘@‘%‘;
test使用者重新串連資料庫,(必須重新串連資料庫)插入資料成功
mysql> INSERT INTO testtb (Name) VALUES (‘zhangsan‘);
Query OK, 1 row affected (0.05 sec)
允許test使用者添加欄位
mysql> GRANT ALTER ON testdb.* TO ‘test‘@‘%‘;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
使用test使用者給testtb表插入一個Age欄位
mysql> ALTER TABLE testtb ADD Age TINYINT UNSIGNED;
設定test使用者只能更改年齡欄位
mysql> SELECT * FROM testtb;
+----+----------+------+
| ID | Name | Age |
+----+----------+------+
| 1 | zhangsan | NULL |
+----+----------+------+
授權test可以更改年齡欄位
mysql> GRANT UPDATE(Age) ON testdb.testtb TO ‘test‘@‘%‘;
驗證test更改使用者年齡成功,更改姓名報錯
mysql> UPDATE testtb SET Age=30 WHERE ID=1;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> UPDATE testtb SET Name=lisi WHERE ID=1;
ERROR 1143 (42000): UPDATE command denied to user ‘test‘@‘localhost‘ for column ‘Name‘ in table ‘testtb‘
查看自己的許可權
欄位層級許可權單獨儲存
mysql> SHOW GRANTS FOR ‘test‘@‘%‘;
+-----------------------------------------------------------------------------------------------------+| Grants for [email protected]% |+-----------------------------------------------------------------------------------------------------+| GRANT USAGE ON *.* TO ‘test‘@‘%‘ IDENTIFIED BY PASSWORD ‘*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29‘ || GRANT SELECT, INSERT, CREATE, ALTER ON `testdb`.* TO ‘test‘@‘%‘ || GRANT UPDATE (Age) ON `testdb`.`testtb` TO ‘test‘@‘%‘ |+-----------------------------------------------------------------------------------------------------+
收回使用者的SELECT許可權
mysql> REVOKE SELECT ON testdb.* FROM ‘test‘@‘%‘;
本文出自 “梅花香自苦寒來” 部落格,請務必保留此出處http://wangjunkang.blog.51cto.com/8809812/1586089
Mysql使用者和許可權管理