共计 2173 个字符,预计需要花费 6 分钟才能阅读完成。
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; |
正文完
星哥玩云-微信公众号
