目录
一、用户管理
1.用户介绍 :
MySQL中的用户都存储在系统数据库mysql中的user表中,如下图所示 :
编辑
user表中,几个比较重要的字段——
①Host : 允许“登录”的位置(IP);localhost表示该用户只允许本机登录;但也可以指定IP地址,eg : 192.168.1.100,192.168.1.%;
②User : 用户名;
③Authentication_string : 加密后的密码,mysql8.0默认是通过caching_sha2_password()函数来加密的。
Q : 为什么需要进行用户管理?
A : 当我们做项目开发时,可以根据不同的开发人员,赋予他不同的MySQL操作权限;因此,MySQL数据库的管理员root用户,会根据需要创建不同的用户,并分别赋予相应的权限,供不同人员来使用。
2.操作指令 :
1° 创建用户(同时指定密码)——
CREATE USER '用户名' @ '允许登录的位置' IDENTIFIED BY 'pwd_expr';
2° 删除用户 ——
DROP USER '用户名' @ '允许登录的位置';
3° 修改密码 —— (MySQL8.0)
ALTER USER '用户名' @ '允许登录的位置' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'pwd_expr';
PS :
①MySQL下,认为用户的完整信息由用户名和登陆位置组成。
②不同的数据库用户,登录到DBMS后,根据相应的权限,可以操作的数据库和数据对象(表,视图,触发器)都不一样。
③在创建用户时,若未指定Host,则为%,表示所有IP都有连接权限;同理,在删除用户时,若Host != %,必须在用户信息中明确指定用户的Host值。
3.代码演示 :
①创建一个新的用户Ice,密码假设为12345,如下所示 :
CREATE USER 'Ice'@'localhost' IDENTIFIED BY '12345';
编辑
②尝试登录Ice用户,如下 :
编辑
登录成功后,会发现Ice用户可操作的数据库很少,如下图所示 :
编辑
③尝试更改Ice用户的密码,如下 :
ALTER USER 'ice'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY '54321';
更改密码后,已建立的Ice用户与MySQL的连接将无法重新连接,如下 :
编辑
这时,在“编辑连接”中更改当前的登录密码可以重新连接。如下 :
编辑
编辑
④尝试删除Ice用户。
删除前,可以在mysql.user表中看到Ice用户存在,如下图所示 :
编辑
使用DROP USER 指令删除Ice用户 :
DROP USER 'Ice'@'localhost' ;
删除成功后,Ice用户在user表中不存在。
编辑
二、权限管理
1.MySQL常见权限汇总 :
- ALL [PRIVILEGES] : 设置除GRANT OPTION之外的所有简单权限
- ALTER : 允许使用ALTER TABLE
- ALTER ROUTINE : 更改或取消已存储的子程序
- CREATE : 允许使用CREATE TABLE
- CREATE ROUTINE : 创建已存储的子程序
- CREATE TENPORARY TABLES : 允许使用CREATE TEMPORARY TABLE
- CREATE USER : 允许使用CREATE USER,DROP USER,RENAME USER和REVOKE ALL PRIVILEGES。
- CREATE VIEW : 允许使用CREATE VIEW
- DELETE : 允许使用DELETE
- DROP : 允许使用DROP TABLE
- EXECUTE : 允许用户运行已存储的子程序
- FILE : 允许使用SELECT..INTO OUTFILE和LOAD DATA INFILE
- INDEX : 允许使用CREATE INDEX和DROP INDEX
- INSERT : 允许使用INSERT
- LOCK TABLES : 允许对您拥有SELECT权限的表使用LOCK TABLES
- PROCESS : 允许使用SHOW FULL PROCESSLIST
- REFERENCES : 未被实施
- RELOAD : 允许使用FLUSH
- REPLICATION CLIENT : 允许用户询问从属服务器或主服务器的地址
- REPLICATION SLAVE : 用于复制型从属服务器(从主服务器中读取二进制日志事件)
- SELECT : 允许使用SELECT
- SHOW DATABASES : SHOW DATABASES显示所有数据库
- SHOW VIEW : 允许使用SHOW CREATE VIEW
- SHUTDOWN : 允许使用mysqladmin shutdown
- SUPER : 允许使用CHANGE MASTER,KILL,PURGE MASTER LOGS和SET GLOBAL语句,mysqladmin debug命令;允许您连接(一次),即使已达到max_connectionso
- UPDATE : 允许使用UPDATE
- USAGE : “无权限”的同义词
- GRANT OPTION : 允许授予权限
2.相关指令 :
1° 授予权限
GRANT purview_list ON 库.对象名 TO '用户名'@'登录位置' [IDENTIFIED BY 'pwd_expr'];
注意事项——①权限列表中的多个权限使用逗号分隔开,eg :
eg1 : GRANT SELECT, DELETE, CREATE ON ...;
eg2 : GRANT ALL ON...; //表示授予该用户在该对象上的全部权限。
②*.*代表本系统中的所有数据库的所有数据对象(表,视图,存储过程);库.*表示某个指定数据库中的所有数据对象(表,视图,存储过程)。
③IDENTIFIED BY 可写可不写。若写出,用户存在则修改该用户的密码;用户不存在则创建该用户。
2° 回收权限
REVOKE purview_list ON 库.对象名 FROM '用户'@'登录位置';
PS :
若权限指令没有生效,可以使用FLUSH PRIVILEGES; 指令来刷新(一般来说都会立即生效,尤其对于高版本的MySQL)。
3.代码演示 :
要求如下——
①创建用户five@localhost;
②在root用户下为five用户授予一定权限;
③在five用户下测试被授予的权限是否生效;
④测试five用户未被授予的权限是否生效;
⑤回收five用户的权限并删除five用户。
演示如下——
①创建five用户 :
CREATE USER 'five'@'localhost' IDENTIFIED BY '666'; SELECT * FROM mysql.user;
编辑
②在root用户下为five用户分配权限 :
假定我们可以使five用户对select_ex数据库中的emp表进行访问,授予five用户查询,修改,和删除数据的权限。如下图所示 :
编辑
GRANT SELECT,UPDATE,INSERT ON select_ex.emp TO 'five'@'localhost';
③登录five用户,查看权限是否生效 :
编辑
可以看到,five用户视角下,已经显示有select_ex数据库以及emp表。
继续,测试被授权的指令能否使用 :
INSERT INTO emp VALUES (6666,'NewBee','Manage',1,'2002-011-11',99999.00,99999.00,10); UPDATE emp SET ecareer = 'Boss'; SELECT * FROM emp;
编辑
④测试five用户能否删除表中的数据 :
DELETE FROM emp WHERE eno = 6666;
显然无法成功 :
编辑
可以继续在root用户下追加权限,使five用户可以进行删除数据的操作 :
GRANT DELETE ON select_ex.emp TO 'five'@'localhost';
five用户再次尝试删除数据 :
DELETE FROM emp WHERE eno = 6666; SELECT * FROM emp;
编辑
⑤回收five用户的权限并删除five用户 :
REVOKE INSERT,DELETE,SELECT,UPDATE ON select_ex.emp FROM 'five'@'localhost';
在five用户下刷新连接,将看不到selec_ex数据库,如下图所示 :
编辑
在root用户下删除five用户 :
DROP USER 'five'@'localhost';
five用户将无法重新连接。
编辑
System.out.println("END-------------------------------------------------------------------------------");