当前位置: 首页 > news >正文

13.MySQL用户管理

13.MySQL用户管理

目录

  • MySQL用户管理
    • 用户
      • 用户信息
      • 创建用户
      • 修改用户密码
      • 删除用户
    • 数据库的权限
      • MySQL中的权限
      • 给用户授权
      • 回收权限

用户

用户信息

MySQL中的用户信息存储在默认数据库mysqluser表中。这个表记录了所有用户的详细信息,包括用户名、登录权限以及密码等。通过查看这个表的内容,可以了解到当前系统中所有的用户配置情况。

user表中,有几个关键字段需要特别注意:

  • user:表示该用户的用户名。
  • host:表示该用户可以从哪个主机登录。如果值为localhost,则表示只能从本机登录;如果值为%,则表示可以从任意地方登录。
  • authentication_string:表示该用户的密码经过加密后的值。
  • xxx_priv:表示该用户是否拥有对应权限。例如,Select_priv表示该用户是否具有查询权限。

为了避免输出过多的信息,我们通常只选择部分字段进行显示。比如,可以通过以下SQL语句来查看用户的基本信息:

SELECT user, host, authentication_string FROM mysql.user;

此外,MySQL中允许存在同名的用户,只要这些用户的登录主机不同即可。这是因为user表的主键是由user列和host列共同组成的复合主键。因此,同一个用户名可以出现在多个不同的主机条目中,每个条目代表一个独立的用户账户。

创建用户

创建用户的语法如下:

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

其中,用户名是你希望创建的新用户的名称,登录主机指定了该用户可以从哪些主机登录。如果希望用户可以从任意地方登录,则可以将登录主机设置为%密码则是该用户的登录密码。

举个例子,假设我们要创建一个名为dragon的用户,并且允许该用户从任何地方登录,可以使用以下SQL语句:

CREATE USER 'dragon'@'%' IDENTIFIED BY 'your_password';

执行这条SQL语句后,新创建的用户信息会被写入到mysql.user表中。你可以通过查询该表来验证用户是否已经成功创建:

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

此时,你就可以使用新创建的普通用户来连接MySQL服务器了。如果你在Windows环境下也安装了MySQL,那么还可以通过命令行工具进行远程登录。

需要注意的是,创建用户的SQL语句不会被历史记录下来,因此不能通过上下箭头键进行追溯。此外,MySQL对密码的要求较高,如果设置的密码过于简单,可能会导致报错。这时,你可以选择将密码设置得更复杂一些,或者调整MySQL的密码策略设置。

为了了解当前的密码设置要求,可以通过以下命令查看全局变量:

SHOW VARIABLES LIKE 'validate_password%';

这将显示与密码验证相关的各种参数,帮助你更好地理解密码策略的具体要求。

修改用户密码

用户可以通过调用PASSWORD()函数来自行修改自己的密码。具体操作如下:

SET PASSWORD = PASSWORD('新密码');

这条命令会将当前用户的密码更新为你指定的新密码。PASSWORD()函数会对新密码进行加密处理,确保安全性。

对于超级用户(如root),他们有权修改任意用户的密码。超级用户可以通过以下方式修改其他用户的密码:

SET PASSWORD FOR '用户名'@'登录地址' = PASSWORD('新密码');

这里,用户名是你想要修改密码的用户的名称,登录地址指定了该用户可以从哪些主机登录。例如,如果你想将用户dragon的密码修改为new_password,并且该用户可以从任意地方登录,可以使用以下命令:

SET PASSWORD FOR 'dragon'@'%' = PASSWORD('new_password');

这样,用户dragon的密码就会被更新为new_password

需要注意的是,修改密码时应确保新密码符合MySQL的密码策略要求,以避免因密码过于简单而导致的错误。同样,可以通过以下命令查看当前的密码策略设置:

SHOW VARIABLES LIKE 'validate_password%';

这将帮助你了解当前的密码复杂度要求,从而设置合适的密码。

删除用户

删除用户的语法如下:

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

其中,用户名是要删除的用户的名称,登录地址指定了该用户可以从哪些主机登录。例如,如果你想删除之前创建的用户dragon,并且该用户可以从任意地方登录,可以使用以下命令:

DROP USER 'dragon'@'%';

执行这条SQL语句后,该用户在mysql.user表中的记录将会被删除,意味着该用户不再存在于系统中。你可以通过查询mysql.user表来验证用户是否已经被成功删除:

SELECT user, host FROM mysql.user WHERE user = 'dragon';

如果没有返回任何结果,则说明用户已成功删除。

需要注意的是,如果不指定登录地址,MySQL会默认删除登录地址为%的用户。例如,以下命令:

DROP USER 'dragon';

将删除登录地址为%的用户dragon。然而,如果存在多个同名但登录地址不同的用户,这种写法可能会导致误删。因此,在删除用户时,最好明确指定登录地址,以确保删除的是正确的用户。

此外,删除用户后,该用户的所有权限也会随之被撤销。这意味着该用户将无法再访问任何数据库或执行任何操作。因此,在删除用户之前,务必确认该用户确实不再需要使用。

数据库的权限

MySQL中的权限

MySQL提供了丰富的权限管理机制,允许管理员根据实际需求为用户分配不同的权限。这些权限决定了用户可以在数据库中执行哪些操作。MySQL的权限主要分为以下几个类别:

  1. 数据库级别的权限:这类权限适用于整个数据库,例如创建数据库、删除数据库等。
  2. 表级别的权限:这类权限适用于特定数据库中的表,例如查询、插入、更新、删除数据等。
  3. 列级别的权限:这类权限适用于表中的某些列,允许用户对特定列进行操作。
  4. 存储过程和函数的权限:这类权限适用于存储过程和函数,例如执行、修改等。
  5. 服务器管理权限:这类权限涉及服务器的整体管理,例如关闭服务器、刷新日志、创建用户等。

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服务器管理

需要注意的是,新创建的用户默认没有任何权限。因此,在创建用户后,必须为其授予相应的权限,以便用户能够执行所需的操作。

给用户授权

给用户授权是MySQL权限管理的重要组成部分。通过授权,管理员可以控制用户对数据库对象的访问和操作权限。授权的语法如下:

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

其中,权限列表表示要授予用户的权限,多个权限之间用逗号分隔;库名.对象名指定了权限适用的数据库和对象,例如某个具体的表或视图;用户名@登录地址用于指定目标用户及其允许登录的主机;IDENTIFIED BY '密码'是可选的,如果用户不存在,则会创建该用户并设置密码。

举个例子,假设我们需要创建一个名为dragon的用户,并授予其在user_management数据库下所有对象的SELECT权限,可以使用以下命令:

GRANT SELECT ON user_management.* TO 'dragon'@'%' IDENTIFIED BY 'your_password';

执行这条命令后,用户dragon将能够在user_management数据库中查询所有表的数据。

为了验证授权是否成功,可以使用以下命令查看用户的现有权限:

SHOW GRANTS FOR 'dragon'@'%';

这条命令将列出用户dragon所拥有的所有权限。可以看到,默认情况下,新创建的用户会拥有USAGE权限,该权限仅允许用户登录数据库,而不能执行任何操作。

授权完成后,用户dragon将能够看到user_management数据库,并进入该数据库查看其下的所有表。然而,由于我们只授予了SELECT权限,该用户只能查询表中的数据,而不能进行修改。例如,尝试插入或更新数据时,用户将收到权限不足的错误提示。

如果我们希望用户dragon能够在user_management数据库中执行更多操作,可以授予其更多的权限。例如,以下命令将授予用户dragonuser_management数据库下的所有权限:

GRANT ALL PRIVILEGES ON user_management.* TO 'dragon'@'%';

执行这条命令后,用户dragon将能够对user_management数据库中的所有表进行增删改查等操作。

需要注意的是,授予权限时应遵循最小权限原则,即只授予用户完成任务所需的最低权限,以降低潜在的安全风险。同时,授予权限后,建议定期检查用户的权限设置,确保其仍然符合业务需求。

回收权限

回收权限是MySQL权限管理中的一个重要环节。当用户的权限不再需要时,及时回收权限可以有效降低安全风险,防止未经授权的操作发生。回收权限的语法如下:

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

其中,权限列表表示要回收的权限,多个权限之间用逗号分隔;库名.对象名指定了权限适用的数据库和对象;用户名@登录地址用于指定目标用户及其允许登录的主机。

举个例子,假设我们希望回收用户dragonuser_management数据库下的所有权限,可以使用以下命令:

REVOKE ALL PRIVILEGES ON user_management.* FROM 'dragon'@'%';

执行这条命令后,用户dragon将不再拥有对user_management数据库中任何对象的访问权限。

需要注意的是,回收权限的语法与授权类似,只是将TO关键字替换为FROM,并且没有了IDENTIFIED BY '密码'字段。此外,回收权限后,用户在下次进入数据库时才能生效。如果用户正在使用对应数据库,回收权限后该用户仍然可能保留原有的权限,直到重新登录为止。

为了验证权限是否已被成功回收,可以使用以下命令查看用户的现有权限:

SHOW GRANTS FOR 'dragon'@'%';

这条命令将列出用户dragon当前拥有的所有权限。如果发现权限未被完全回收,可以再次执行REVOKE命令,确保所有不必要的权限都被移除。

在实际应用中,回收权限时应谨慎操作,避免误删重要权限。同时,建议定期审查用户的权限设置,确保其符合最新的业务需求和安全策略。

相关文章:

  • 巨控GRM550系列,西门子 S7-1200 PLC 远程上下载与调试技术方案
  • linux系统终端远程控制和传输方式
  • 三格电子——EtherCAT分支器的应用场景
  • ROS2 ,查看当前tf变换关系的图形化的终端指令?
  • 山东大学《数据可视化》期末复习宝典
  • $attrs 与 $listeners 透传
  • VTK 显示文字、图片及2D/3D图
  • OS11.【Linux】vim文本编辑器
  • Xsens-AAA工作室品质,为动画师准备
  • java 编程基础入门级超级完整版教程指南
  • [蓝桥杯]版本分支
  • idea中 maven 本地仓库有jar包,但还是找不到,解决打包失败和无法引用的问题
  • 正则持续学习呀
  • 文件上传/下载接口开发
  • 【汇编逆向系列】八、函数调用包含混合参数-8种参数传参,条件跳转指令,转型指令,movaps 16字节指令
  • 深入浅出多路归并:原理、实现与实战案例解析
  • centos7升级glibic-2.28
  • 局域网聊天软件
  • 数据结构与算法——二叉树高频题目(1)
  • 【设计模式-5】设计模式的总结
  • 商城网站建设软件/b2b和b2c是什么意思
  • 电子商务网站功能需求/世界十大网站排名
  • 郑州网站建设网站推广/网络营销活动策划方案模板
  • 有没有做租赁的网站/厦门网络关键词排名
  • wordpress仿阿里主题/seo分析报告
  • 做网站用新域名还是老域名/关键词优化报价推荐