Skip to content
鼓励作者:欢迎打赏犒劳

mysql的用户管理

查看用户

查看mysql用户

shell
SELECT User, Host FROM mysql.user;

githubPage

查看mysql用户 权限

例如,如果你想要查看名为myuser,主机名为localhost的用户的权限,你可以使用以下的SQL语句

shell
SHOW GRANTS FOR 'myuser'@'localhost';

创建/授权用户

注意:

有两种方式创建MySQL授权用户

方法一、通过insert语句直接操作MySQL系统权限表(此处不再赘述)

方法二、执行create user/grant命令(推荐)

在试用grant命令创建用户时要注意了,在MySQL5.7.7版本前,如果被授权的用户不存在,那么grant语句会自动创建新的账户,除非设置参数sql_mode 包含 “NO_AUTO_CREATE_USER” 。 但从5.7.7版本开始,默认的sql_mode就包含“NO_AUTO_CREATE_USER” (grant语句不再创建新的账户) 因此,如果你是用的MySQL版本较新,要注意语法了,需要先用create user创建用户,再用grant命令赋权限;

一、创建用户格式

创建用户命令一般格式:

shell
create user [用户名]@[访问地址] identified by [密码]

举例1:创建zhangsan用户,只是创建用户并没有权限,'localhost'表示只能在本地登录,无法通过远程连接;密码是 password

shell
CREATE USER 'zhangsan'@'localhost' IDENTIFIED BY 'password';

举例2:创建lisi用户,只是创建用户并没有权限,密码为 password,%通配符表示任何主机都可以连接(可以远程连接),

shell
CREATE USER 'lisi'@'%' IDENTIFIED BY 'password';

举例3:(5.7.7版本前)的创建用户并赋予RELOAD,PROCESS权限 ,在所有的库和表上;.:代表所有的库表

shell
GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost' identified by '123456';

举例4:(5.7.7版本前)这里是对admin用户的所有主机(%表示所有主机)授予USAGE权限。

shell
GRANT USAGE ON *.* TO `admin`@`%` ;

1.GRANT: 这是MySQL的一个命令,用于授予用户权限。

2.USAGE: 这是一种特殊的权限。USAGE权限实际上不授予用户任何特殊权限,它只允许用户登录到数据库服务器。这通常用于创建新用户,但还不想给他们分配任何特定的权限

3.ON .: 这表示权限适用于所有数据库(第一个*)和所有表(第二个*)

4.TO 'admin'@'%': 这表示要将权限授予哪个用户。在这里,权限被授予用户名为admin的用户,该用户可以从任何主机(%)登录到数据库服务器

二、授权格式及示例:

shell
grant [权限1,权限2,权限3] on *.* to user@'host' identified by 'password'

常用权限:all privileges、create、drop、select、insert、delete、update

例如,给"zhangsan" 用户管理员权限,并且允许该用户继续给别的用户赋权限

shell
grant all privileges on *.* to 'zhangsan'@'192.168.1.%' with grant option;
  • all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
  • on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user
  • to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:'zhangsan'@'192.168.1.%',表示zhangsan这个用户只能在192.168.0.* IP段登录
  • with grant option:通过在grant语句的最后使用该子句,就允许被授权的用户把得到的权限继续授给其它用户

注:使用GRANT添加权限,权限会自动叠加,不会覆盖之前授予的权限,比如你先给用户添加一个SELECT权限,后来又给用户添加了一个UPDATE权限,那么该用户就同时拥有了SELECT和UPDATE权限。

  1. 授予管理员权限

举例4:把zhangsan 变成管理员用户,拥有root权限

shell
mysql> GRANT ALL PRIVILEGES ON *.* TO 'zhangsan'@'localhost' WITH GRANT OPTION;
#刷新权限命令
mysql> flush privileges;
  1. 授予数据库、表权限

举例5:授予用户zhangsan可以对test数据库中的所有表进行查询

shell
grant select on test.* to zhangsan;

举例6:授予lisi在test数据库中创建、修改、删除表的权限以及创建视图的权限

shell
grant create、alter、drop、create view on test.* to lisi;

举例7:授予lisi可以对当前数据库中的所有表进行查询, * :表示所有数据库

shell
grant select on * to lisi;

举例8:授予lisi可以创建、修改、删除 , . 表示当前数据库

shell
grant create,alter,drop on . to lisi;

举例9:授予lisi可以创建新用户

shell
grant create user on . to lisi;

删除用户

shell
drop user zhangsan@'localhost';

修改 mysql 用户密码

查看用户密码

密码是:MD5加密过的动态码,无法破解

shell
SELECT user, host, authentication_string FROM mysql.user WHERE user = 'zhangsan';

githubPage

修改密码

shell
ALTER USER 'zhangsan'@'localhost' IDENTIFIED BY '111';

如在数据库外命令行中,通过:mysqladmin -u用户名 -p旧的密码 password 新密码

shell
shell> mysqladmin -u user_name -h host_name password "new_password"

用户重命名

shell
rename user 'lisi'@'%' to 'zhangsan'@'%';

授予列权限

例10:给zhangsan用户赋权限,设置为在test库,shop表,上的id、name、price列只有select 权限

shell
mysql> grant select(id,name,price) on test.shop to zhangsan@'localhost' WITH GRANT OPTION;
#刷新权限
mysql> flush privileges;

举例11:授予用户zhangsan可以对test.shop表的id和name列进行更新

shell
grant update(id,name) on test.shop to zhangsan@'localhost';

举例12:查看自己的权限:

shell
show grants;

如有转载或 CV 的请标注本站原文地址