MySQL用户管理(十三)

用户

用户信息

MySQL中的用户,都存储在系统数据库mysql的user表

cpp 复制代码
mysql> use mysql;
Database changed
mysql> select user,host,authentication_string from user;
+------------------+-----------+------------------------------------------------------------------------+
| user             | host      | authentication_string                                                  |
+------------------+-----------+------------------------------------------------------------------------+
| mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.session    | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.sys        | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| root             | localhost | $A$005$Uk2RPNT<CK-CleN&Qwrt/DhQrY6KBjyRAA2nwKATQM.vGQKPNKTbhcK/Ekam9   |
+------------------+-----------+------------------------------------------------------------------------+
4 rows in set (0.00 sec)

host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆

user: 用户名

authentication_string: 用户密码通过password函数加密后的

创建用户

语法:

cpp 复制代码
create user '用户名'@'登陆主机/ip' identified by '密码';

例子:

cpp 复制代码
mysql> create user 'syb'@'localhost' identified by 'syb020913';
Query OK, 0 rows affected (0.02 sec)

mysql> select user,host,authentication_string from user;
+------------------+-----------+------------------------------------------------------------------------+
| user             | host      | authentication_string                                                  |
+------------------+-----------+------------------------------------------------------------------------+
| mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.session    | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.sys        | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| root             | localhost | $A$005$Uk2RPNT<CK-CleN&Qwrt/DhQrY6KBjyRAA2nwKATQM.vGQKPNKTbhcK/Ekam9   |
| syb              | localhost | $A$005${k]rdWr#4}IpC`a014URsNINFfgGToOHXiJ7sWpZJZoJUZGCCp4sgO2GQwV2    |--新增用户
+------------------+-----------+------------------------------------------------------------------------+
5 rows in set (0.00 sec)

例子:

cpp 复制代码
mysql> create user 'sybnet'@'%'; --允许从任意主机登录
Query OK, 0 rows affected (0.00 sec)

删除用户

语法:

cpp 复制代码
drop user '用户名'@'主机名'

例子:

cpp 复制代码
mysql> drop user syb;
ERROR 1396 (HY000): Operation DROP USER failed for 'syb'@'%' <= 直接给个用户名,不能删除,它默认是%,表示所有地方可以登陆的用户
mysql> drop user 'syb'@'localhost';
Query OK, 0 rows affected (0.00 sec)

注意:也可以用CURD操作直接删除表中那个用户的所有信息,但是不推荐。

cpp 复制代码
update user set authentication_string=password('syb123456') where user = 'syb';

修改用户密码

语法:
自己改自己密码

cpp 复制代码
set password=password('新的密码');

root用户修改指定用户的密码

cpp 复制代码
set password for '用户名'@'主机名'=password('新的密码');

注意:也可用CURD操作在user中进行修改数据,但是不推荐。

数据库的权限

MySQL数据库提供的权限列表:

权限 上下文
CREATE Create_priv 数据库、表或索引
DROP Drop_priv 数据库或表
GRANT OPTION Grant_priv 数据库、表或保存的程序
REFERENCES References_priv 数据库或表
ALTER Alter_priv
DELETE Delete_priv
INDEX Index_priv
INSERT Insert_priv
SELECT Select_priv
UPDATE Update_priv
CREATE VIEW Create_view_priv 视图
SHOW VIEW Show_view_priv 视图
ALTER ROUTINE Alter_routine_priv 保存的程序
CREATE ROUTINE Create_routine_priv 保存的程序
EXECUTE Execute_priv 保存的程序
FILE File_priv 服务器主机上的文件访问
CREATE TEMPORARY TABLES Create_tmp_table_priv 服务器管理
LOCK TABLES Lock_tables_priv 服务器管理
CREATE USER Create_user_priv 服务器管理
PROCESS Process_priv 服务器管理
RELOAD Reload_priv 服务器管理
REPLICATION CLIENT Repl_client_priv 服务器管理
REPLICATION SLAVE Repl_slave_priv 服务器管理
SHOW DATABASES Show_db_priv 服务器管理
SHUTDOWN Shutdown_priv 服务器管理
SUPER Super_priv 服务器管理

给用户授权

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

语法:

cpp 复制代码
grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']
  • 权限列表,多个权限用逗号分开
cpp 复制代码
grant select on ...
grant select, delete, create on ....
grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
  • *.* : 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)
  • 库.* : 表示某个数据库中的所有数据对象(表,视图,存储过程等)
  • identified by可选。 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户

例子:

cpp 复制代码
--root用户
--在root用户中创建一个数据库,并创建一个表,插入数据
mysql> create database rootdb;
Query OK, 1 row affected (0.10 sec)

mysql> use rootdb
Database changed
mysql> create table user(
    -> id int primary key,
    -> name varchar(20) not null
    -> );
Query OK, 0 rows affected (0.13 sec)

mysql> insert into user values (1,'张三');
Query OK, 1 row affected (0.02 sec)

mysql> insert into user values (2,'李四');
Query OK, 1 row affected (0.01 sec)

mysql> select * from user;
+----+--------+
| id | name   |
+----+--------+
|  1 | 张三   |
|  2 | 李四   |
+----+--------+
2 rows in set (0.00 sec)
cpp 复制代码
--切换到syb用户
mysql> show databases;--数据库与root用户不一样
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
+--------------------+
2 rows in set (0.00 sec)

mysql> use rootdb;--不允许访问root用户的rootdb数据库,权限不够!
ERROR 1044 (42000): Access denied for user 'syb'@'localhost' to database 'rootdb'
cpp 复制代码
--root用户
mysql> grant select on rootdb.user to 'syb'@'localhost';--赋予syb用户select权限
Query OK, 0 rows affected (0.01 sec)
cpp 复制代码
--mysql用户
--这时查看databases,出现rootdb数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| rootdb             |
+--------------------+
3 rows in set (0.00 sec)

mysql> use rootdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

--查看数据
mysql> select * from user;
+----+--------+
| id | name   |
+----+--------+
|  1 | 张三   |
|  2 | 李四   |
+----+--------+
2 rows in set (0.00 sec)

--插入数据
mysql> insert into user values (3,'张飞');
ERROR 1142 (42000): INSERT command denied to user 'syb'@'localhost' for table 'user'--权限不够,不能插入

查看特定用户现有的权限

cpp 复制代码
mysql> show grants for 'syb'@'localhost';
+------------------------------------------------------+
| Grants for syb@localhost                             |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO `syb`@`localhost`              |
| GRANT SELECT ON `rootdb`.`user` TO `syb`@`localhost` |
+------------------------------------------------------+
2 rows in set (0.00 sec)

回收权限

语法:

cpp 复制代码
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';
cpp 复制代码
--root用户
mysql> revoke select on rootdb.user from 'syb'@'localhost';--回收syb对数据库rootdb中表user查看权限
Query OK, 0 rows affected (0.01 sec)
cpp 复制代码
--syb用户
mysql> select * from user;
ERROR 1142 (42000): SELECT command denied to user 'syb'@'localhost' for table 'user'--权限被移除

注意:如果发现赋权限后,没有生效,执行如下指令:

cpp 复制代码
flush privileges;
相关推荐
Nturmoils7 分钟前
只恢复一张表,别把整个库都还回去
数据库
龙腾AI白云38 分钟前
大语言模型:从语言理解到通用智能的跃迁
数据库·人工智能·机器学习·知识图谱
SelectDB1 小时前
快手基于 Apache Doris 千亿多模态检索的实践
大数据·数据库·数据分析
SelectDB1 小时前
StarRocks 迁移至 Apache Doris 完整指南:三步完成结构、数据与业务平滑切换
大数据·数据库·数据分析
这个DBA有点耶1 小时前
InnoDB索引组织表下,复合主键和自增主键的物理存储差异与选型对比
数据库·mysql·架构
李少兄2 小时前
数据库批量清理前置防御:如何严谨校验目标表是否存在
mysql
香吧香2 小时前
Docker Swarm 线上环境 MariaDB XA 悬停事务故障排查
mysql·异常
其实防守也摸鱼2 小时前
常见安全架构中 Shiro 的认证确认机制解析
运维·服务器·数据库·windows·github
小白男神2 小时前
MySQL进阶学习三(视图)
后端·mysql
TDengine (老段)3 小时前
TDengine 常见问题 TOP7
大数据·数据库·时序数据库·常见问题·tdengine·涛思数据