MySQL8常见用户操作{创建/删除/重命名、密码修改、授权/撤销}

创建用户

CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';
命令解释:
username:新建用户名
hostname:可用于登录的远程主机,loaclhost为本地登录,%为任意主机均可登录
password:用于登录的密码
命令执行演示:

mysql> create user 'admin'@'localhost' identified by 'admin';
Query OK, 0 rows affected (0.04 sec)

删除用户

DROP USER 'username'@'hostname';
命令解释:
username:要删除的用户名
hostname:可用于登录的远程主机,必须和配置的一致,否则删除失败
命令执行演示:

mysql> drop user 'admin'@'%';
ERROR 1396 (HY000): Operation DROP USER failed for 'admin'@'%'
mysql> drop user 'admin'@'localhost';
Query OK, 0 rows affected (0.03 sec)

用户重命名

RENAME USER 'username'@'hostname' TO 'newname'@'hostname';
命令解释:
username:要重命名的用户名
hostname:可用于登录的远程主机,必须和配置的一致,否则删除失败
newname:新用户名
命令执行演示:

mysql> rename user 'jack'@'%' to 'mike'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from user\G
*************************** 1. row ***************************
user: mike
host: %
*************************** 2. row ***************************
……

修改密码

参考官方文档及个人实践,MySQL8总共有3种可行的密码修改方式:

方法1:用mysqladmin命令:

mysqladmin -u username -p password
命令解释:
-u username:要修改的用户名
-p :使用密码验证(如已设置过密码)
password:需要执行修改密码操作
命令执行演示:

[root@localhost ~]# mysqladmin -u root -p password
Enter password: 	#输入原始密码
New password:	#输入新密码 
Confirm new password: 	#输入确认密码
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
方法2:用SET PASSWORD语句:

SET PASSWORD FOR 'username'@'hostname'='password';
FLUSH PRIVILEGES;
命令解释:
username:要修改的用户名
hostname:可用于登录的远程主机,必须和配置的一致,否则修改失败
password:新密码
命令执行演示:

mysql> set password for 'guest'@'localhost'='guest';
ERROR 1133 (42000): Can't find any matching row in the user table
mysql> set password for 'guest'@'%'='guest';
Query OK, 0 rows affected (0.03 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)

【注意】 网上有文章指出"="后的新密码应被PASSWORD()函数包围,但经过查证官方文档,PASSWORD()函数已在MySQL8中废弃,直接使用如上方式即可进行密码修改。

mysql> set password for 'guest'@'localhost'=PASSWORD('guest');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PASSWORD('guest')' at line 1

踩到的坑:使用此种方式修改密码后必须使用FLUSH PRIVILEGES;语句刷新权限,否则无法使用Navicat等工具进行连接访问!

方法3:用ALTER USER语句:

ALTER USER ‘username’@'hostname' IDENTIFIED BY 'passwd';
命令解释:
username:要修改的用户名
hostname:可用于登录的远程主机,必须和配置的一致,否则修改失败
password:新密码
命令执行演示:

mysql> alter user 'guest'@'localhost' identified by '1234';
ERROR 1396 (HY000): Operation ALTER USER failed for 'guest'@'localhost'
mysql> alter user 'guest'@'%' identified by '1234';
Query OK, 0 rows affected (0.01 sec)

【注意】 使用此语句修改密码,当前登录用户需要拥有高于或等于被修改用户的权限等级,否则修改失败!

官方手册推荐使用此语句进行密码修改:
官方推荐用法

其他

网上还有文章指出使用UPDATE语句对mysql数据库中的user表进行操作,经过实际操作发现,此方法已失效,失效原因如下:
1、MySQL8中user表密码字段已不再是password字段,而是authentication_string字段;
2、MySQL8废弃了PASSWORD()函数,导致直接UPDATE此表中的authentication_string字段会变为明文,从而导致无法登录。

感兴趣的小伙伴可以尝试新建用户操作一波,绝对会登录不上去的……

另外还用文章指出使用GRANT授权方式进行密码修改,命令示例:grant usage on *.* to 'username'@'localhost' identified by 'newpassword';,经测试提示失败,目前已不支持在GRANT语句中携带IDENTIFIED BY

授权

GRANT privileges ON databasename.tablename TO 'username'@'hostname' [WITH GRANT OPTION];
命令解释:
privileges:对库表的操作权限,如SELECT、UPDATE、DELETE等,同时授权多种操作可用逗号连接,所用操作权限使用ALL
databasename:授权指定数据库名,可使用*代替所有库
tablename:授权指定表名,可使用*代替所有表

如需授权指定操作权限到所有库的所有表可用*.*表示

username:要授权的用户名
hostname:可用于登录的远程主机,必须和配置的一致,否则授权失败
[WITH GRANT OPTION]:可选项,如当前登录用户权限是由其他高级权限用户授予,则此时该用户不能对其他用户继续授权,但当使用可选项语句后,该用户即可对其他用户进行传递授权
命令执行演示:

#当前使用root用户登录
mysql> create user 'jack'@'localhost' identified by 'jack';
Query OK, 0 rows affected (0.05 sec)
mysql> grant select,update on mysql.user to 'jack'@'localhost';
Query OK, 0 rows affected (0.04 sec)

#当前使用jack用户登录
#无权授权其他用户
mysql> grant select on mysql.user to 'guest'@'%';
ERROR 1142 (42000): GRANT command denied to user 'jack'@'localhost' for table 'user'

#使用root用户重新登录并改为使用[WITH GRANT OPTION]授权
mysql> grant select,update on mysql.user to 'jack'@'localhost' with grant option;
Query OK, 0 rows affected (0.02 sec)
#退出root用户并使用jack用户重新登录尝试为其他用户授权
#授权成功
mysql> grant select on mysql.user to 'guest'@'%';
Query OK, 0 rows affected (0.03 sec)

撤销授予的权限

REVOKE privileges ON databasename.tablename FROM 'username'@'hostname';
命令解释:
privileges:需撤销的对库表的操作权限,如SELECT、UPDATE、DELETE等,同时撤销多种操作可用逗号连接,所用操作权限使用ALL
databasename:授权指定数据库名,可使用*代替所有库
tablename:撤销操作权限指定表名,可使用*代替所有表
username:要撤销操作权限的用户名
hostname:可用于登录的远程主机,必须和配置的一致,否则授权失败
命令执行演示:

mysql> revoke all on *.* from 'guest'@'%';
Query OK, 0 rows affected (0.05 sec)
mysql> revoke insert on mysql.user from jack@'localhost';
Query OK, 0 rows affected (0.03 sec)

需注意MySQL操作权限又区分为全局层级、数据库层级、表层级、列层级、子程序层级。
全局层级例如:GRANT ALL ON *.*REVOKE ALL ON *.*此类
数据库层级例如:GRANT ALL ON databasename.*REVOKE ALL ON databasename.*
表层级例如:GRANT ALL ON databasename.tablenameREVOKE ALL ON databasename.tablename
如上概述,在授权及撤销权限时应做到对应,否则会出现无法撤销对应权限的情况!

查询用户权限方法

方法1:SHOW GRANTS语句

SHOW GRANTS FOR 'username'@'hostname';
命令解释:
username:需查询权限用户名
hostname:可用于登录的远程主机,必须和配置的一致,否则查询失败
命令执行演示:

mysql> show grants for jack@'localhost';
+----------------------------------------------------------------------------------------+
| Grants for jack@localhost                                                              |
+----------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `jack`@`localhost`                                               |
| GRANT SELECT, INSERT, UPDATE ON `mysql`.`user` TO `jack`@`localhost` WITH GRANT OPTION |
+----------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
方法2:SELECT语句

SELECT * FROM user WHERE user='username'\G;
命令解释:
第一个user:指代mysql数据库中user表,所以在使用之前应先使用USE mysql语句切换到mysql数据库
username:需查询权限的用户名
\G:在Linux或DOS终端中使用有效,将查询结果旋转90°纵向展示
命令执行演示:

mysql> use mysql
Database changed
mysql> select * from user where user='jack'\G;
*************************** 1. row ***************************
                    Host: localhost
                    User: jack
             Select_priv: N
             Insert_priv: N
             Update_priv: N
             Delete_priv: N
             Create_priv: N
               Drop_priv: N
             Reload_priv: N
           Shutdown_priv: N
            Process_priv: N
               File_priv: N
              Grant_priv: N
         References_priv: N
              Index_priv: N
              Alter_priv: N
            Show_db_priv: N
              Super_priv: N
   Create_tmp_table_priv: N
        Lock_tables_priv: N
            Execute_priv: N
         Repl_slave_priv: N
        Repl_client_priv: N
        Create_view_priv: N
          Show_view_priv: N
     Create_routine_priv: N
      Alter_routine_priv: N
        Create_user_priv: N
              Event_priv: N
            Trigger_priv: N
  Create_tablespace_priv: N
                ssl_type: 
              ssl_cipher: 
             x509_issuer: 
            x509_subject: 
           max_questions: 0
             max_updates: 0
         max_connections: 0
    max_user_connections: 0
                  plugin: caching_sha2_password
   authentication_string: xxx
        password_expired: N
   password_last_changed: 2019-10-25 20:57:32
       password_lifetime: NULL
          account_locked: N
        Create_role_priv: N
          Drop_role_priv: N
  Password_reuse_history: NULL
     Password_reuse_time: NULL
Password_require_current: NULL
         User_attributes: NULL
1 row in set (0.00 sec)

ERROR: 
No query specified

权限部分

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值