增加用户

增加用户方式一语法:

create user 用户名@主机名 //用户名区分大小写,主机名连接来自的主机;
[ identified by [password] ‘密码’] //密码区分大小写;
[ , 用户名@主机名[identified by [password] [‘密码’]] [ ,... ] //可以同时创建多个数据库用户,中间用逗号分隔。 
 

例子
使用 CREATE USER 命令创建一个新的用户。假设用户名为 newuser,密码为 password。

CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';

注意这里的 ‘%’ 表示任何 IP 地址都可以连接到此用户。如果你想限制只有局域网内的 IP 可以访问,可以指定 ‘192.168.1.%’ 或者具体的 IP 地址,例如 ‘192.168.1.5’。

如果只允许本地登录

CREATE USER 'newuser'@localhost IDENTIFIED BY 'newuser';

修改用户名

rename user 老用户 to 新用户 

使用 rename user 语句将用户 cat 名字更改为 tom。

rename user cat@localhost to tom@localhost; 

修改用户密码

修改用户密码语法:

ALTER USER 'username'@'%' IDENTIFIED BY 'password';

使用 alter user语句将用户 tom 的密码改为 hello。

alter user 'tom'@'%' identified by 'hello';

删除用户

删除用户语法:

drop user 用户 [ , 用户] .... 

删除tom

drop user 'tom'@'%';

权限

MySql系统库中的权限表
MySql 系统库中的权限表:
user:最重要的权限表,存储允许连接到服务器的账号。
db:存储用户对某个数据库的操作权限。
host:存储某个主机对数据库的操作权限。
tables_priv:对单个表进行权限设置。
columns_priv:对单个数据列进行权限设置。
columns_priv:对存储过程和存储函数进行权限设置。

访问控制的两个阶段:
1、连接核实阶段
用户试图连接 MySQL 服务器时,服务器基于用户提供的信息来验证用户身份。使用 MySQL 的 user 表进行身份核实
2、请求核实阶段
对当前用户的每个操作都进行权限检查,判断用户是否有足够的权限来执行它。

授予的权限等级:
全局层级:适用于一个给定服务器中所有的数据库。
数据库层级:适用于一个给定数据库中的所有目标。
表层级:适用于一个给定表中的所有列。
列层级:适用于一个给定表中的单一列。
子程序层级:适用于存储的子程序 ,可以被授权为全局层级和数据库层级。

MYSQL 权限类型

给予用户权限 GRANT

基本语法格式:

GRANT priv_type [(column_list)]
[, priv_type [(column_list)]] [, ...]
ON {tbl_name | * | *.* | db_name.* | db_name.tbl_name}
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] [, ...]
[WITH GRANT OPTION]

各部分解释:

  • priv_type:指定了要授予的权限类型。例如 SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, GRANT OPTION 等等。如果需要授予多个权限,可以在同一个 GRANT 语句中列出多个 priv_type

  • column_list:可选参数,用于指定权限适用于哪些列。如果省略,则对表中的所有列都有效。

  • tbl_name:表名,用于指定具体的表。

  • db_name:数据库名,用于指定具体的数据库。

  • user:要授予权限的用户。格式为 'username'[@'host']host 可以是具体的 IP 地址、域名或 %(代表任何主机)。

  • IDENTIFIED BY [PASSWORD] ‘password’:指定用户的密码。如果省略 PASSWORD 关键字,则密码以明文形式存储,这是不安全的做法。建议总是使用 PASSWORD 关键字来加密密码。

  • WITH GRANT OPTION:可选参数,如果包含这个选项,则授予用户再次授权给其他用户的权限。

示例:

假设我们要授予用户 newuserexampledb 数据库中的所有表具有 SELECTINSERT 权限,并且该用户可以从任何地方登录,密码为 securepass

GRANT SELECT, INSERT ON exampledb.* TO 'newuser'@'%' IDENTIFIED BY 'securepass';

如果还要添加 WITH GRANT OPTION

GRANT SELECT, INSERT ON exampledb.* TO 'newuser'@'%' IDENTIFIED BY 'securepass' WITH GRANT OPTION;

这样,newuser 就能够再次授予其他用户 SELECTINSERT 权限。请注意,WITH GRANT OPTION 应谨慎使用,因为它允许用户进一步传播权限。

示例:使用 grant 语句创建一个新用户 test1,密码为 test123,该用户对所有的数据又查询、插入的权限,并授予 grant 权限。

grant select,insert on *.* to test1@localhost identified by ‘test123’ with grant

REVOKE 撤销用户权限

REVOKE 语句用于撤销之前授予用户的权限。以下是 REVOKE 语句的基本语法格式:

REVOKE priv_type [(column_list)]
[, priv_type [(column_list)]] [, ...]
ON {tbl_name | * | *.* | db_name.* | db_name.tbl_name}
FROM user
[, user] [, ...]

各部分解释:

  • priv_type:要撤销的权限类型。例如 SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, GRANT OPTION 等等。如果需要撤销多个权限,可以在同一个 REVOKE 语句中列出多个 priv_type

  • column_list:可选参数,用于指定权限适用于哪些列。如果省略,则对表中的所有列都有效。

  • tbl_name:表名,用于指定具体的表。

  • db_name:数据库名,用于指定具体的数据库。

  • user:要撤销权限的用户。格式为 'username'[@'host']host 可以是具体的 IP 地址、域名或 %(代表任何主机)。

示例:

假设我们之前授予了用户 newuserexampledb 数据库中的所有表具有 SELECTINSERT 权限,现在想要撤销这些权限:

REVOKE SELECT, INSERT ON exampledb.* FROM 'newuser'@'%';

如果要撤销所有权限:

REVOKE ALL PRIVILEGES, GRANT OPTION ON *.* FROM 'newuser'@'%';

这个命令会撤销用户 newuser 对所有数据库的所有权限,并且撤销其授予其他用户权限的能力。

注意事项:

  • 撤销权限时,必须指定与授予时相同的权限级别。例如,如果你通过 ON *.* 授予了全局权限,那么你也必须通过 ON *.* 来撤销这些权限。
  • 如果没有明确指定权限级别,那么 REVOKE 语句将默认为最低级别的权限范围。
  • 如果需要撤销特定用户的 GRANT OPTION 权限,需要显式地包括 GRANT OPTIONREVOKE 语句中。

通过使用 REVOKE 语句,你可以有效地管理和控制数据库用户的权限,从而保护数据的安全性和完整性。

查看权限

show grants for  username@hostname