用户管理
1.登录mysql
服务器
-
语法
mysql -h hostname -P port -u username -p
-
参数含义
-h hostname
:指定要连接的数据库服务器的主机名或 ip 地址。-P port
:指定要连接的数据库服务器的端口号,默认为 3306。-u username
:指定要使用的用户名。-p
:表示需要输入密码进行身份验证。
2.创建用户
-
语法
# 创建一个用户 create user 'username'@'hostname' indentified by 'password'; #同时创建多个用户 create user 'user1'@'host1' indentified by 'password1', 'user2'@'host2' indentified by 'password2';
-
各个部分的含义
username
:要创建的用户名。hostname
:指定用户可以从哪个主机连接到 MySQL 服务器。可以是具体的主机名或 IP 地址,也可以使用通配符%
表示任意主机。password
:用户的登录密码。
-
示例
# 使用默认的host create user jojo identified by '123456'; # 默认host是% # 使用指定的host create user 'dio'@'localhost' identified by '123456';
3.查看用户
-
查看所有用户
select user, host from mysql.user;
-
查看指定用户
select user, host from mysql.user where user = 'xxxx' \g;
-
查看当前登录用户
select user(); select current_user();
4.修改用户
-
修改当前用户密码
alter user user() identified by 'new_password'; # 或 set password = 'new_password';
-
修改其它用户密码
alter user 'username'@'hostname' indentified by 'new_password'; # 或 set password for 'username'@'hostname'='new_password';
5.修改用户名或主机名
-
修改用户名
rename user 'old_username'@'hostname' to 'new_username'@'hostname'; # 示例 rename user 'zhangsan' to 'lisi';
-
修改主机名
update mysql.user set host = 'new_hostname' where user = 'username' and host = 'old_hostname'; flush privileges;
6.删除用户
-
使用
DROP USER
语句删除用户:-
语法
drop user 'username'@'hostname'; # 示例 drop user 'john'@'localhost';
-
注意
- 使用 drop user 语句来删除用户时,必须拥有 drop user 权限。
- 删除用户后,相关的权限和用户数据也将被删除。
-
-
使用
DELETE FROM
语句从mysql.user
表中删除用户:-
语法
delete from mysql.user where user = 'username' and host = 'hostname'; flush privileges; #示例 delete from mysql.user where host='localhost' and user='zhangsan'; flush privileges;
-
注意
- 执行完
delete
命令后要使用flush
命令来使用户生效。 - 需要
DELETE USER
或DELETE
表权限。
- 执行完
-
权限管理
1.权限列表
-
可以通过
show privileges;
来查看前线列表 -
常用权限及介绍如下
ALL PRIVILEGES:拥有所有权限。 SELECT:允许选择(查询)表中的数据。 INSERT:允许向表中插入新数据。 UPDATE:允许修改表中已有的数据。 DELETE:允许从表中删除数据。 CREATE:允许创建新的数据库或表。 DROP:允许删除数据库或表。 ALTER:允许修改表结构。 GRANT OPTION:允许将权限授予其他用户或角色。 EXECUTE:允许执行存储过程或函数。 SHOW DATABASES:允许查看数据库列表。 SHOW VIEW:允许查看视图的定义。 FLUSH PRIVILEGES:刷新权限,使新授予的或更改的权限生效。
2.授予权限的原则
- 只授予能满足需要的最小权限,保证安全性。
- 创建用户的时候,限制用户的登录主机,一般是限制成指定 IP 或者内网 IP 段。
- 为每个用户设置满足密码复杂度的密码。
- 定期清理不需要的用户,回收权限、删除或锁定用户。
3.授予权限
-
在 MySQL 中,可以使用
GRANT
命令为用户或角色授予权限。 -
基本语法
grant privileges on database.table to 'username'@'hostname';
-
各部分含义
privileges
:表示要授予的具体权限,可以是一个或多个权限,多个权限之间用逗号分隔。database.table
:表示所授权的数据库和表名。可以使用*
通配符来表示所有数据库或表。'username'@'hostname'
:表示要授予权限的用户或角色和其主机。用户名和主机名可以使用通配符%
来表示所有主机。
-
示例
# 给 lisi 用户用本地命令行方式,授予 northwind 这个库下的所有表的插删改查的权限 grant select, insert, delete, update on northwind.* to 'lisi'@'localhost';
4.关于权限设置
- 我们在开发应用时,需要根据不同用户,在两个维度上进行权限设置。
- 指定用户可以接触到的数据范围:比如,可以看到哪些表的数据
- 指定用户对接触到的数据能访问到什么程度:比如,查看、增加、修改、删除
5.查看权限
-
查看当前用户权限
show grants; # 或者 show grants for current_user; # 或者 show grants for current_user();
-
查看某用户的权限
# 查看某用户的权限 show grants for 'username'@'hostname';
6.收回权限
-
在将用户账户从
user
表删除之前,应该收回相应用户的所有权限。 -
可以使用
REVOKE
命令来收回用户或角色的权限。 -
基本语法
revoke privileges on database.table from 'username'@'hostname';
-
示例
# 给 lisi 用户用本地命令行方式,收回 northwind 这个库下的所有表的插删改查的权限 revoke select, insert, delete, update on northwind.* to 'lisi'@'localhost' ;
今夜落花有诗意,怎奈昔日流水无情。 ——刺猬乐队《光阴·流年·夏恋》