用户管理【MySQL】

查看用户信息

在名为mysql的数据库中有一个表user维护着 MySQL 的用户信息。

image-20240227164127584

其中:

  • user: 表示该用户的用户名。
  • host: 表示该用户可以从哪个主机登录,localhost 表示只能从本机登录(127.0.0.1),% 表示可以从任意地方登录。
  • authentication_string: 表示该用户的密码经过 password 函数加密后的值。
  • xxx_priv: 表示该用户是否拥有对应权限。

其中 password 函数可以对参数进行摘要。

尝试查看它们的值:

image-20240227164314212

由于 user 表中 Host 和 User 属性共同作为联合主键,所以只要用户名和主机 IP 的组合唯一即可,这是合理的,一台主机可能有多个用户。

MySQL 的所有用户管理工作都通过 user 表来进行,实际上,后续所有的用户操作都会被 MySQL 解析为 SQL 来执行,并且允许用户直接通过 SQL 对 user 表修改。例如通过 INSERT 添加用户,UPDATE+password 函数来修改用户密码登操作,都是可行的。但是这只能作为特殊情况的补救措施,因为这么做有风险。

创建用户

SQL:

CREATE USER '用户名'@'登录主机' IDENTIFIED BY '密码';

如果你设置的密码过于简单,由于 MySQL 的密码策略等级,会出现以下错误:

Your password does not satisfy the current policy requirements

通过SHOW VARIABLES LIKE 'validate_password%';查看密码策略,从而设计符合条件的密码。

image-20240227170352013

或者修改密码策略:

set global validate_password_policy=0;
set global validate_password_length=1;

创建用户:

create user 'new_user'@'%' identified by '12345';
image-20240227170511859

现在可以以新用户的身份登录 MySQL:

mysql -unew_user -p

登录后可以查看客户端信息:

image-20240227170751017

由于%表示允许来自任何主机的用户登录,所以在远端登录 MySQL 的方式也是一样的。需要注意的是,可能在连接时会不被允许,这可能是服务端主机没有开放 3306(MySQL 服务器)端口,为了测试可以在/etc/mysql.cnf修改 MySQL 的端口配置为测试端口如 8080。实际应用中,数据库不对外开放而只在内网中使用。

修改密码

用户自己修改密码:

set password=password('新密码');

超级用户修改任意用户的密码:

set password for '用户名'@'登录主机'=password('新密码');

删除用户

SQL:

DROP USER '用户名'@'登录地址';

注意,如果不指明待用户的登录地址,则默认删除的是登录地址为 % 的用户。

授予权限

MySQL 数据库提供的权限如下:

权限列名上下文
CREATECreate_priv数据库、表或索引
DROPDrop_priv数据库或表
GRANT OPTIONGrant_priv数据库、表或保存的程序
REFERENCESReferences_priv数据库或表
ALTERAlter_priv
DELETEDelete_priv
INDEXIndex_priv
SELECTSelect_priv
UPDATEUpdate_priv
CREATE VIEWCreate_view_priv视图
SHOW VIEWShow_view_priv视图
ALTER ROUTINEAlter_routine_priv保存的程序
CREATE ROUTINECreate_routine_priv保存的程序
EXECUTEExecute_priv保存的程序
FILEFile_priv服务器主机上的文件访问
CREATE TEMPORARY TABLESCreate_tmp_table_priv服务器管理
LOCK TABLESLock_tables_priv服务器管理
CREATE USERCreate_user_priv服务器管理
PROCESSProcess_priv服务器管理
RELOADReload_priv服务器管理
REPLICATION CLIENTRepl_client_priv服务器管理
REPLICATION SLAVERepl_slave_priv服务器管理
SHOW DATABASESShow_db_priv服务器管理
SHUTDOWNShutdown_priv服务器管理
SUPERSuper_priv服务器管理

新创建的用户没有任何权限,创建用户后需要给用户授权。

GRANT 权限列表 ON 库名。对象名 TO '用户名'@'登录地址' [IDENTIFIED BY '密码'];

其中:

  • '用户名'@'登录地址':表示给哪一个用户授权。
  • 库名。对象名:表示要授予用户哪个数据库下的哪个对象的权限。
  • 权限列表:表示要授予用户何种权限,多个权限之间用逗号隔开。
  • IDENTIFIED BY '密码'可选:如果用户存在,则在授予权限的同时修改该用户的密码,如果用户不存在,则创建该用户。

例如授予用户new_usercurd_db数据库下所有对象的select权限:

grant select on curd_db.* to 'new_user'@'%' identified by '12345';

这样新用户就能看到 curd_db 这个数据库了。

image-20240227172042611

查看用户的权限:

image-20240227172310098

其中:

  • 创建用户后该用户默认会有 USAGE 权限,该权限只能用于数据库登录,不能执行任何操作。
  • *.*表示所有数据库的所有对象,库名。*表示某个数据库的所有对象(表、视图、存储过程等)。
  • information_schema 数据库保存的了 MySQL 服务器所维护的所有其他数据库的信息。新用户默认只能看到它。

但是目前只有 select 权限,不能对数据库内容做修改。授予new_usercurd_db数据库下以所有权限:

grant all on curd_db.* to 'new_user'@'%';

收回权限

REVOKE 权限列表 ON 库名。对象名 FROM '用户名'@'登录地址';
image-20240227172947228

注意:

  • 回收用户在某一数据库下的权限后,在该用户下一次进入该数据库时才会起作用。
  • 如果回收权限时该用户正在使用对应数据库,那么回收权限后该用户仍然拥有对应的权限。
  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值