用户信息
MySQL 中的用户信息,都存储在系统数据库 mysql 中的 user 表中
MariaDB [mysql]> select host, user, authentication_string from user;
+----------------+------+-----------------------+
| host | user | authentication_string |
+----------------+------+-----------------------+
| localhost | root | |
| vm-4-13-centos | root | |
| 127.0.0.1 | root | |
| ::1 | root | |
| localhost | | |
| vm-4-13-centos | | |
+----------------+------+-----------------------+
6 rows in set (0.01 sec)
host
表示这个用户可以从哪个主机登陆,如果是 localhost,则表示只能从主机登陆user
用户名authentication_string
加密后的用户密码(我们到现在还没设置过密码,所以是空白)*_priv
用户拥有的权限
创建用户
-
使用具有管理员权限的 MySQL 用户登录到 MySQL 服务器。
-
执行以下 SQL 命令创建用户:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
在上述命令中,将
'username'
替换为要创建的用户名,'localhost'
替换为用户允许登录的主机名或 IP 地址,'password'
替换为用户的密码。例:创建用户名为 “john”,密码为 “password123” 的用户,并允许该用户从任何主机登录,可以执行以下命令:
CREATE USER 'john'@'%' IDENTIFIED BY 'password123';
-
执行以下命令使更改生效:
FLUSH PRIVILEGES;
用户权限
下表列出了 MySQL 数据库中常见的权限及其描述:
权限 | 描述 |
---|---|
ALL PRIVILEGES | 所有权限,包括创建、修改和删除数据库、表以及执行所有操作权限 |
CREATE | 创建新数据库或表 |
ALTER | 修改已存在的数据库或表 |
DROP | 删除数据库或表 |
SELECT | 查询(读取)数据 |
INSERT | 插入新数据 |
UPDATE | 更新(修改)已有数据 |
DELETE | 删除数据 |
GRANT OPTION | 授予或撤销权限 |
INDEX | 创建或删除索引 |
CREATE TEMPORARY TABLES | 创建临时表 |
LOCK TABLES | 锁定表 |
EXECUTE | 执行存储过程或函数 |
SHOW DATABASES | 查看数据库列表 |
SHOW VIEW | 查看视图定义 |
TRIGGER | 创建、修改和删除触发器 |
REFERENCES | 创建外键约束 |
给用户授权
语法:
GRANT privileges ON database_name.table_name TO 'username'@'localhost' [identified by '密码'];
在上述命令中,privileges
是要授予的权限列表,可以使用逗号分隔多个权限。database_name
是要授权的数据库名称,table_name
是要授权的表名称。'username'@'localhost'
是要授权的用户名和主机名。
*.*
表示本系统的所有数据库的所有对象(表、视图、存储过程等)库.*
表示某个数据库的所有对象(表、视图、存储过程等)identified by
可选。 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户
例:
-
授予用户对所有数据库的完全访问权限:
GRANT ALL [PRIVILEGES] ON *.* TO 'username'@'localhost';
-
授予用户对特定数据库的所有权限:
GRANT ALL [PRIVILEGES] ON database_name.* TO 'username'@'localhost';
-
授予用户对特定表的选择和插入权限:
GRANT SELECT, INSERT ON database_name.table_name TO 'username'@'localhost';
回收权限
语法:
REVOKE privileges ON database_name.table_name FROM 'username'@'host';
在上述命令中,privileges
是要回收的权限,database_name.table_name
是要回收权限的数据库和表的名称,'username'@'host'
是要回收权限的用户名和主机。
例:
-
回收用户对所有数据库的所有权限:
REVOKE ALL [PRIVILEGES] ON *.* FROM 'username'@'host';
-
回收用户对特定数据库的所有权限:
REVOKE ALL [PRIVILEGES] ON database_name.* FROM 'username'@'host';
-
回收用户对特定表的选择和插入权限:
REVOKE SELECT, INSERT ON database_name.table_name FROM 'username'@'host';
-
撤销用户的所有权限:
REVOKE ALL [PRIVILEGES] ON *.* FROM 'username'@'host';
删除用户
-
使用具有管理员权限的 MySQL 用户登录到 MySQL 服务器。
-
执行以下 SQL 命令删除用户:
DROP USER 'username'@'localhost';
-
执行以下命令以使更改生效:
FLUSH PRIVILEGES;
修改密码
修改指定用户的密码:
方法一:使用 ALTER USER 命令
-
使用具有管理员权限的 MySQL 用户登录到 MySQL 服务器。
-
执行以下 SQL 命令修改用户密码:
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';
-
执行以下命令以使更改生效:
FLUSH PRIVILEGES;
方法二:使用 SET PASSWORD 命令
-
使用具有管理员权限的 MySQL 用户登录到 MySQL 服务器。
-
执行以下 SQL 命令修改指定用户的密码:
SET PASSWORD FOR 'username'@'localhost' = PASSWORD('new_password');
-
执行以下命令以使更改生效:
FLUSH PRIVILEGES;
自己改自己密码:
SET PASSWORD = PASSWORD('new_password');