下面将详细阐述MySQL中用户数据库的管理以及用户权限的设置。
系统权限表
MySQL的权限体系分为全局层级、数据库层级、表层级、列层级和子程序层级五个层级,这些权限信息存储在mysql系统的几张表中,包括user、db、host、table_priv、column_priv等。
创建用户及授权
在MySQL中,创建用户及授权主要通过CREATE USER
和GRANT
命令完成,用户名和主机名格式为'username'@'hostname',其中hostname可以使用IP地址、主机名或使用通配符“%”表示任意主机,创建用户的基本命令是:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
给用户授权的命令则是:
GRANT permission ON database.tables TO 'username'@'host';
创建一个本地用户并授予所有数据库的所有权限:
CREATE USER 'dayi123'@'localhost' IDENTIFIED BY 'dayi123'; GRANT ALL PRIVILEGES ON *.* TO 'dayi123'@'localhost' WITH GRANT OPTION;
修改用户密码
修改用户密码可以通过ALTER USER
命令或者直接更新user表来完成,下面是通过ALTER USER
命令修改密码的例子:
ALTER USER 'zhangsan'@'localhost' IDENTIFIED BY 'new_password';
或者通过更新user表来更改密码:
UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE User='zhangsan' AND Host='localhost'; FLUSH PRIVILEGES;
删除用户
删除用户需要使用DROP USER
命令,如下所示:
DROP USER 'username'@'host';
执行该命令后,不仅会删除用户,还会连同用户的权限一并删除。
管理用户权限
用户权限管理涉及创建用户、授权、修改权限和撤销权限等操作,MySQL提供了丰富的权限管理命令来满足不同级别的控制需求,若只想让用户有查看数据库的权限,可以只授予SELECT权限:
GRANT SELECT ON database_name.* TO 'username'@'host';
权限级别划分
权限管理的另一个重要方面是权限级别的划分,MySQL按照全局级别、数据库级别、表级别和列级别对权限进行管理,每个级别的权限都存储在不同的系统表中。
相关问答FAQs
Q1: 如何在MySQL中重置“root”用户的密码?
A1: 需要停止正在运行的MySQL服务,然后以不检查权限的方式启动MySQL服务,此时可以连接到MySQL服务器并重置root密码,具体步骤如下:
1、停止MySQL服务,在Windows上使用服务管理器或命令行工具,Linux/macOS上使用service mysql stop
或systemctl stop mysql
。
2、启动MySQL服务并跳过授权表的检查,Windows使用mysqld skipgranttables
,Linux/macOS则可能需要修改配置文件中的[mysqld]
部分添加skipgranttables
。
3、以root用户登录MySQL,无需密码。
4、为root用户设置新密码:FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
。
5、重启MySQL服务。
Q2: 如何限制MySQL用户仅能从特定IP地址连接?
A2: 可以通过指定用户的Host字段来实现这一功能,当创建用户时,可以将其Host设置为特定的IP地址,仅允许用户从IP地址192.168.1.100连接:
CREATE USER 'username'@'192.168.1.100' IDENTIFIED BY 'password';
这样,即使有人知道用户名和密码,也无法从其他IP地址登录,从而增加了安全性。