文章目录
✨ 六 删除用户
attention:MySQL8.0中无法在创建用户时,直接授予权限。
必须先创建用户,再给与权限
✨一 创建用户
1、CREATE USER 'username'@'host' IDENTIFIED BY 'password';
说明:username: 创建的用户名
host: 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
‘%’ :哪台主机上可以登录mysql,%是通配符指的是任意IP,也可以指定具体的IP,或者localhost代表本机才可以登录。
password: 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器例子:
1、CREATE USER 'niuben'@'localhost' IDENTIFIED BY '123456';
2、CREATE USER 'niuben'@'192.168.1.101_' IDENDIFIED BY '123456';
3、CREATE USER 'niuben'@'%' IDENTIFIED BY '123456';
4、CREATE USER 'niuben'@'%' IDENTIFIED BY '';
5、CREATE USER 'niuben'@'%';
例如:
mysql> create user 'u1'@'%' identified by 'dir99';
Query OK, 0 rows affected (0.01 sec)
✨二 授权
GRANT privileges ON databasename.tablename TO 'username'@'host' [with grant option];
grant命令说明:
• 💦priveleges (权限列表),可以是all,表⽰所有权限,也可以是select、update等权限,多个权限之间⽤逗号分开。
• 💦ON ⽤来指定权限针对哪些库和表,格式为数据库.表名 ,点号前⾯⽤来指定数据库名,点号后⾯⽤来指定表名,. 表⽰所有数据库所有表。
• 💦TO 表⽰将权限赋予某个⽤户, 格式为username@host,@前⾯为⽤户名,@后⾯接限制的主机,可以是IP、IP段、域名以及%,%表⽰任何地⽅。
• 💦WITH GRANT OPTION 这个选项表⽰该⽤户可以将⾃⼰拥有的权限授权给别⼈。注意:经常有⼈在创建操作⽤户的时候不指定WITH GRANT OPTION选项导致后来该⽤户不能使⽤GRANT命令创建⽤户或者给其它⽤户授权。 备注:可以使⽤GRANT重复给⽤户添加权限,权限叠加,⽐如你先给⽤户添加⼀个select权限,然后又给⽤户添加⼀个insert权限,那么该⽤户就同时拥有了select和insert权限。
GRANT SELECT, INSERT ON test.user TO 'u2'@'%';
GRANT ALL ON *.* TO 'u3'@'%';
GRANT ALL ON mysc0530.* TO 'u4'@'%';
例如:
不规范的语法:
mysql> grant privileges on mysc0530.* to u1;
ERROR 3619 (HY000): Illegal privilege level specified for PRIVILEGES
规范的语法:
mysql> grant all privileges on mysc0530.* to u1;
Query OK, 0 rows affected (0.01 sec)
注意:
用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
mysql> grant all privileges on mysc0530.* to u1 with grant option;
Query OK, 0 rows affected (0.01 sec)
mysql> create user 'u3'@'%' identified by 'dir99';
Query OK, 0 rows affected (0.01 sec)
mysql> grant all privileges on mysc0530.* to 'u3'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql>
✨ 授权原则说明
• 只授予能满⾜需要的最⼩权限,防⽌⽤户⼲坏事,⽐如⽤户只是需要查询,那就只给
select权限就可以了,不要给⽤户赋予update、insert或者delete权限
• 创建⽤户的时候限制⽤户的登录主机,⼀般是限制成指定IP或者内⽹IP段
• 初始化数据库的时候删除没有密码的⽤户,安装完数据库的时候会⾃动创建⼀些⽤户,这些⽤户默认没有密码
• 为每个⽤户设置满⾜密码复杂度的密码
• 定期清理不需要的⽤户,回收权限或者删除⽤户
✨二 查看用户权限
show grants for 'root'@'localhost';
显示权限:
mysql> show grants for u1;
+--------------------------------------------------+
| Grants for u1@% |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO `u1`@`%` |
| GRANT ALL PRIVILEGES ON `mysc0530`.* TO `u1`@`%` |
+--------------------------------------------------+
2 rows in set (0.00 sec)
show grants;
查看当前⽤户的权限
SHOW GRANTS;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `root`@`localhost` WITH GRANT OPTION
GRANT PROXY ON ``@`` TO `root`@`localhost` WITH GRANT OPTION
GRANT APPLICATION_PASSWORD_ADMIN,AUDIT_ABORT_EXEMPT,AUDIT_ADMIN,AUTHENTICATION_POLICY_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,FLUSH_OPTIMIZER_COSTS,FLUSH_STATUS,FLUSH_TABLES,FLUSH_USER_RESOURCES,GROUP_REPLICATION_ADMIN,GROUP_REPLICATION_STREAM,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,PASSWORDLESS_USER_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN ON *.* TO `root`@`localhost` WITH GRANT OPTION
✨ 四 设置和更改用户密码
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
方法一:直接更新
alter user '用户名'@'主机范围' identified by '新密码';
测试如下:
mysql> revoke all privileges on mysc0530.* from 'u1'@'%';
Query OK, 0 rows affected (0.01 sec)
方法二:通过修改mysql.user表修改密码
mysql8.0中没有password加密函数,可以用sha\sha1来进行密码的加密
use mysql;
update user set authentication_string = sha1('321') where user =
'test1' and host = '%';
flush privileges;
经测试,没毛病:
mysql> UPDATE user SET authentication_string=sha1("dir999") WHERE user='u1';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
✨ 五 撤销用户权限
REVOKE privileges ON databasename.tablename FROM 'username'@'host';
说明:privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL。
如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*
例如:
mysql> alter user 'u1'@'%' identified by 'dir999';
Query OK, 0 rows affected (0.01 sec)
✨ 六 删除用户
方法一:
drop user if exists username;
drop的⽅式删除⽤户之后,⽤户下次登录就会起效。
方法二:
delete from user where user='⽤户名' and host='主机';
flush privileges;
注意通过表的⽅式删除的,需要调⽤flush privileges;刷新权限信息(权限启动的时候在内存中保存着,通过表的⽅式修改之后需要刷新⼀下)。
测试如下:
mysql> delete from user where user='u3';
Query OK, 1 row affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)