mysql对用户的操作

目录

1、修改用户名(用户重命名)

2、删除用户

2.1、使用 DROP USER 语句删除普通用户

2.2、使用DELETE语句删除普通用户

3、用户权限

3.1、查看用户权限

3.2、刷新权限

3.3、删除撤销权限

 3.4、用户添加授权

GRANT 语法格式:


1、修改用户名(用户重命名)

在 MySQL 中,我们可以使用 RENAME USER 语句修改一个或多个已经存在的用户账号。
语法:RENAME USER <旧用户> TO <新用户>

其中:

  • <旧用户>:系统中已经存在的 MySQL 用户账号。
  • <新用户>:新的 MySQL 用户账号。

使用 RENAME USER 语句时应注意以下几点:

  • RENAME USER 语句用于对原有的 MySQL 用户进行重命名。
  • 若系统中旧账户不存在或者新账户已存在,该语句执行时会出现错误。
  • 使用 RENAME USER 语句,必须拥有 mysql 数据库的 UPDATE 权限或全局 CREATE USER 权限。

例:使用 RENAME USER 语句将用户名 test1 修改为 testUser1,主机是 localhost。SQL 语句和执行过程如下。

mysql> RENAME USER 'test1'@'localhost'
    -> TO 'testUser1'@'localhost';
Query OK, 0 rows affected (0.03 sec)

2、删除用户

 在 MySQL 数据库中,可以使用 DROP USER 语句删除用户,也可以直接在 mysql.user 表中删除用户以及相关权限。

2.1、使用 DROP USER 语句删除普通用户

语法:DROP USER <用户1> , <用户2>

例:DROP USER 'test1'@'localhost';

使用 DROP USER 语句应注意以下几点:

  • DROP USER 语句可用于删除一个或多个用户,并撤销其权限。
  • 使用 DROP USER 语句必须拥有 mysql 数据库的 DELETE 权限或全局 CREATE USER 权限。
  • 在 DROP USER 语句的使用中,若没有明确地给出账户的主机名,则该主机名默认为“%”。

注意:用户的删除不会影响他们之前所创建的表、索引或其他数据库对象,因为 MySQL 并不会记录是谁创建了这些对象。

2.2、使用DELETE语句删除普通用户

可以使用 DELETE 语句直接删除 mysql.user 表中相应的用户信息,但必须拥有 mysql.user 表的 DELETE 权限。

语法:delete from mysql.user where host='hostname' and user='username';

3、用户权限

3.1、查看用户权限

-- 1、查看 mysql.user 表中的数据记录来查看相应的用户权限;
SELECT * FROM mysql.user;

-- 2、使用 SHOW GRANTS 语句查询用户的权限。
-- 查看当前用户(自己)权限
show grants ;
-- 查看其他用户权限
show grants for 'username'@'hostname';

示例:show grants for 'iap'@'%';

3.2、刷新权限

对用户做了权限变更之后,一定记得重新加载一下权限,将权限信息从内存中写入数据库。

-- 刷新权限
flush privileges;

3.3、删除撤销权限

在 MySQL 中,可以使用 REVOKE 语句删除某个用户的某些权限(此用户不会被删除),在一定程度上可以保证系统的安全性。例如,如果数据库管理员觉得某个用户不应该拥有 DELETE 权限,那么就可以删除 DELETE 权限。
使用 REVOKE 语句删除权限的语法格式有两种形式,如下所示:

第一种: 删除用户某些特定的权限,语法格式如下:

remove priv_type [(column_list)]...
ON database.table
from user [, user]...

REVOKE 语句中的参数与 GRANT 语句的参数意思相同。其中:

  • priv_type 参数表示权限的类型;
  • column_list 参数表示权限作用于哪些列上,没有该参数时作用于整个表上;
  • user 参数由用户名和主机名构成,格式为“username'@'hostname'”。

第二种:删除特定用户的所有权限,语法格式如下:

REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...

删除用户权限需要注意以下几点:

  • REVOKE 语法和 GRANT 语句的语法格式相似,但具有相反的效果。
  • 要使用 REVOKE 语句,必须拥有 MySQL 数据库的全局 CREATE USER 权限或 UPDATE 权限。

示例 1

-- 使用 REVOKE 语句取消用户 testUser 的插入权限,SQL 语句和执行过程如下。
REVOKE INSERT ON *.* FROM 'testUser'@'localhost';

 3.4、用户添加授权

-- 用户添加、授权
grant all privileges on *.* to 'test1'@'%' identified by '123456' with grant option;

说明:

all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATEDROP等。

on:用于指定权限授予的对象和级别,表示这些权限对哪些数据库和表生效。格式:数据库名.表名,* .*表示所有数据库,所有表。如果要将权限应用到test库 的user表中,可以这么写:test.user

to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”%表示没有限制,在任何主机都可以登录。比如:”test1”@”192.168.0.%”,表示test1这个用户只能 在192.168.0 IP段登录

identified by:指定用户的登录密码。 如果不是新用户,即给现有用户授权,identified by 可以不需要。如果定义了,新密码将覆盖原密码。

with grant option:表示允许用户将自己的权限授权给其它用户

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

  • GRANT 语法格式:

GRANT priv_type [(column_list)] ON database.table
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user[IDENTIFIED BY [PASSWORD] 'password']] ...
[WITH with_option [with_option]...]

语法说明如下:

  • priv_type 参数表示权限类型;
  • columns_list 参数表示权限作用于哪些列上,省略该参数时,表示作用于整个表;
  • database.table 用于指定权限的级别;
  • user 参数表示用户账户,由用户名和主机名构成,格式是“'username'@'hostname'”;
  • IDENTIFIED BY 参数用来为用户设置密码;
  • password 参数是用户的新密码。

WITH 关键字后面带有一个或多个 with_option 参数。这个参数有 5 个选项,详细介绍如下:

  • GRANT OPTION:被授权的用户可以将这些权限赋予给别的用户;
  • MAX_QUERIES_PER_HOUR count:设置每个小时可以允许执行 count 次查询;
  • MAX_UPDATES_PER_HOUR count:设置每个小时可以允许执行 count 次更新;
  • MAX_CONNECTIONS_PER_HOUR count:设置每小时可以建立 count 个连接;
  • MAX_USER_CONNECTIONS count:设置单个用户可以同时具有的 count 个连接。

MySQL 中可以授予的权限有如下几组:

  • 列权限,和表中的一个具体列相关。例如,可以使用 UPDATE 语句更新表 students 中 name 列的值的权限。
  • 表权限,和一个具体表中的所有数据相关。例如,可以使用 SELECT 语句查询表 students 的所有数据的权限。
  • 数据库权限,和一个具体的数据库中的所有表相关。例如,可以在已有的数据库 mytest 中创建新表的权限。
  • 用户权限,和 MySQL 中所有的数据库相关。例如,可以删除已有的数据库或者创建一个新的数据库的权限。

对应地,在 GRANT 语句中可用于指定权限级别的值有以下几类格式:

  • *:表示当前数据库中的所有表。
  • *.*:表示所有数据库中的所有表。
  • db_name.*:表示某个数据库中的所有表,db_name 指定数据库名。
  • db_name.tbl_name:表示某个数据库中的某个表或视图,db_name 指定数据库名,tbl_name 指定表名或视图名。
  • db_name.routine_name:表示某个数据库中的某个存储过程或函数,routine_name 指定存储过程名或函数名。
  • TO 子句:用来设定用户口令,以及指定被赋予权限的用户 user。若在 TO 子句中给系统中存在的用户指定口令,则新密码会将原密码覆盖;如果权限被授予给一个不存在的用户,MySQL 会自动执行一条 CREATE USER 语句来创建这个用户,但同时必须为该用户指定口令
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值