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;
相关推荐
Lyyaoo.1 天前
Redis基础
数据库·redis·缓存
杨云龙UP1 天前
ODA登录ODA Web管理界面时提示Password Expired的处理方法_20260423
linux·运维·服务器·数据库·oracle
解救女汉子1 天前
SQL触发器如何获取触发源应用名_利用APP_NAME函数追踪
jvm·数据库·python
weixin_520649871 天前
数据库函数
数据库
Bert.Cai1 天前
MySQL LPAD()函数详解
数据库·mysql
OnlyEasyCode1 天前
Navicat 任务自动备份指定数据库
数据库
if else1 天前
Redis 哨兵集群部署方案
数据库·redis
yejqvow121 天前
Pandas 高效实现组内跨行时间戳匹配与布尔标记
jvm·数据库·python
了不起的云计算V1 天前
从DeepSeek V4适配看国产算力的三个拐点
数据库·人工智能
qq_189807031 天前
html标签如何提升可访问性_aria-label与title区别【指南】
jvm·数据库·python