MySQL之用戶管理
創建用戶
create user username@host; 5.7.17 不允許 create user username@host identified by 'password'; @'%' @ip @'network'
說明:用戶的信息保存在mysql數據庫中的user表中,驗證用戶是否創建成功如下:
select user,host,password from mysql.user;
用戶權限
權限分類
USAGE 無權限,只有登錄數據庫,只可以使用test或test_*數據庫 ALL 所有權限 select/update/delete/super/slave/reload 指定的權限 with grant option 允許把自己的權限授予其它用戶或者從其他用戶收回自己的權限
作用范圍
*.* 全庫、全表(mysql.user) mysql.* mysql庫下所有表(某庫中的所有表)(mysql.db) mysql.user mysql庫中user表(單表)(mysql.table_priv) mysql.user.host mysql庫中user表的host列(mysql.columns_priv)
主機登錄權限
user@localhost 表示user只能在本地通過socket登錄服務器 user@192.168.0.1 表示user用戶只能在192.168.0.1登錄數據庫服務器 user@192.168.0.0/255.555.255.0 指定某個子網的主機可以登錄數據庫 user@% 表示user用戶能在所有的機器上登錄數據庫服務器
用戶授權
show grants; 查看用戶權限 grant 權限 on 庫.表 to 用戶@主機 grant 權限(列1,列2,...) on 庫.表 to 用戶@主機 mysql> grant select on db01.* to 'jack'@'10.1.1.0/255.255.255.0'; mysql> flush privileges; mysql> grant update(name,math) on db01.t2 to 'jack'@'10.1.1.0/255.255.255.0'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; mysql> grant all on *.* to 'zhang'@'10.1.1.254' identified by '123' mysql> flush privileges;
注意:從MySQL 5.7.6開始,不贊成使用grant修改密碼。使用 ALTER USER來代替。 ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; ALTER USER USER() IDENTIFIED BY 'mypass'; 如果當前連接是匿名用戶可以用該語句修改密碼
權限的保存位置
mysql.user 所有mysql用戶的賬號和密碼,以及對用戶對全庫全表權限(*.*) mysql.db 非mysql庫的授權都保存在此(db.*) mysql.table_priv 某庫某表的授權(db.table) mysql.columns_priv 某庫某表某列的授權(db.table.col1) mysql.procs_priv 某庫存儲過程的授權
回收權限:revoke
mysql> revoke update,select on mysql.user from stu6@localhost; --撤消指定的權限 mysql> revoke all privileges,grant option from stu4@'%'; --撤消所有的權限
刪除用戶
mysql> drop user user01@'localhost'; 刪除用戶 mysql> select user from mysql.user where user='user01'; 驗證用戶是否刪除成功 mysql> drop user user; 默認刪除該用戶從任意主機登陸 mysql> rename user u01@'instructor.example.com' to u001@'localhost'; 重命名用戶名 mysql> show grants; 查看用戶權限 mysql> show grants for user02@'%'; 查看指定用戶的權限 mysql> drop user ''@'rhel6.example.com'; 刪除一個匿名用戶 mysql> delete from mysql.user where user=''; 刪除mysql中的匿名用戶 mysql> delete from mysql.user where user='root' and host='::1'; mysql> flush privileges; 注意:如果tcp/ip登錄,服務器端口不是默認3306,則需要加端口號 問題:可不可以給一個新的用戶授權? 更改user02在所有機器上都能登錄數據庫. mysql> update mysql.user set host='%' where user='user02'; mysql> flush privileges;
