MySQL用戶管理 - 實踐
1.用戶信息
MySQL中的用戶,都存儲在數據庫的user表中。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
|//...... |
| mysql |
+--------------------+
10 rows in set (0.00 sec)
mysql> show tables;
+------------------------------------------------------+
| Tables_in_mysql |
+------------------------------------------------------+
|//...... |
| user |
+------------------------------------------------------+
38 rows in set (0.00 sec)
查看user表內容
mysql> select * from user\G;
//自行進行查看
mysql> select USER, HOST, authentication_string from user;
+------------------+-----------+------------------------------------------------------------------------+
| USER | HOST | authentication_string |
+------------------+-----------+------------------------------------------------------------------------+
| mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.session | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.sys | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| root | localhost | *E092E64E0BD5C6924B0E56A4F4D155051CF2FD |
+------------------+-----------+------------------------------------------------------------------------+
4 rows in set (0.00 sec)
host字段:表示用戶可以從哪一個主機登錄,localhost表示只能本機登錄
user:用戶名
authentication_string:用戶通過password函數加密后的值
_priv:用戶擁有的權限
MySQL允許創建多個用戶,這些用戶都為普通用戶,root可以創建賬號,創建賬號需要設置用戶名,從那里登錄,密碼。然后就會把這些信息作為數據插入到user表中。
創建用戶
create user '用戶名'@'登陸主機/ip' identified by '密碼';
創建本地用戶
-- 創建只允許本地登錄的用戶
CREATE USER 'localuser'@'localhost' IDENTIFIED BY 'password';-- 創建允許本地socket和TCP/IP連接的用戶
CREATE USER 'localuser'@'127.0.0.1' IDENTIFIED BY 'password';本地是mysql機器內連接
權限刷新
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
登錄創建的賬號
u后面是用戶名,p就是要密碼

這個賬號不能遠程登錄,host的值是localhost,只能本地登錄,在MySQL上登錄,不能跨網絡登錄。
刪除用戶
第一種
不安全,可能留下權限殘留
delete from user where USER='zymm'
第二種
自動清理相關權限
-- 刪除所有主機上的 lfz 用戶
DROP USER IF EXISTS 'zymm'@'localhost', 'zymm'@'%';
創建遠程登錄的賬號
使用 % 符號代表可以從任意主機進行登入
mysql> create user 'zymm'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> select USER, HOST, authentication_string from user;
+------------------+-----------+------------------------------------------------------------------------+
| USER | HOST | authentication_string |
+------------------+-----------+------------------------------------------------------------------------+
| zymm | % | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.session | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.sys | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| root | localhost | *E092E64E0BD5C6924B0E56A4F4D155051DFCF2FD |
+------------------+-----------+------------------------------------------------------------------------+
5 rows in set (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
window系統裝了mysql就可以在命令提示符里打開mysql。
修改用戶密碼
用戶自己修改密碼
set password = password('新的密碼');
root修改密碼
set password for '用戶名'@'主機名' = password('新的密碼');
數據庫權限
權限 | 例 | 上下文 |
|---|---|---|
CREATE | Create_priv | 數據庫、表或索引 |
DROP | Drop_priv | 數據庫或表 |
GRANT OPTION | Grant_priv | 數據庫、表或存儲的程序 |
REFERENCES | References_priv | 數據庫或表 |
ALTER | Alter_priv | 表 |
DELETE | Delete_priv | 表 |
INDEX | Index_priv | 表 |
INSERT | Insert_priv | 表 |
SELECT | Select_priv | 表 |
UPDATE | Update_priv | 表 |
CREATE VIEW | Create_view_priv | 視圖 |
SHOW VIEW | Show_view_priv | 視圖 |
ALTER ROUTINE | Alter_routine_priv | 保存的程序 |
CREATE ROUTINE | Create_routine_priv | 保存的程序 |
EXECUTE | Execute_priv | 保存的程序 |
FILE | File_priv | 服務器主機上的文件訪問 |
CREATE TEMPORARY TABLES | Create_tmp_table_priv | 服務器管理 |
LOCK TABLES | Lock_tables_priv | 服務器管理 |
CREATE USER | Create_user_priv | 服務器管理 |
PROCESS | Process_priv | 服務器管理 |
RELOAD | Reload_priv | 服務器管理 |
REPLICATION CLIENT | Repl_client_priv | 服務器管理 |
REPLICATION SLAVE | Repl_slave_priv | 服務器管理 |
SHOW DATABASES | Show_db_priv | 服務器管理 |
SHUTDOWN | Shutdown_priv | 服務器管理 |
SUPER | Super_priv | 服務器管理 |
授權操作
grant 權限列表 on 庫.對象名 to '用戶名'@'登陸位置' [identified by '密碼'];
示例
-- 授予所有數據庫的所有權限(類似root)
GRANT ALL PRIVILEGES ON *.* TO 'superuser'@'localhost' IDENTIFIED BY 'password';-- 授予所有權限并允許遠程連接
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'Admin@123';
回收權限
revoke 權限列表 on 庫.對象名 from '用戶名'@'登陸位置';
示例
all和all privileges是一個意思,后者規范
-- 回收某個用戶的所有數據庫權限
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'olduser'@'localhost';-- 回收特定數據庫的所有權限
REVOKE ALL PRIVILEGES ON `mydb`.* FROM 'dbuser'@'%';

浙公網安備 33010602011771號