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;
相关推荐
Dxy12393102162 小时前
MySQL如何加唯一索引
android·数据库·mysql
我真的是大笨蛋2 小时前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化
怣502 小时前
MySQL数据检索入门:从零开始学SELECT查询
数据库·mysql
shengli7222 小时前
机器学习与人工智能
jvm·数据库·python
2301_765703142 小时前
Python迭代器(Iterator)揭秘:for循环背后的故事
jvm·数据库·python
倔强的石头1062 小时前
关键信息基础设施的数据库选型:高可用、全链路安全与平滑替代的技术实践
数据库·安全·金仓数据库
人道领域2 小时前
javaWeb从入门到进阶(SpringBoot事务管理及AOP)
java·数据库·mysql
煎蛋学姐2 小时前
SSM音乐播放软件的开发与实现7g5j0(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·javaweb 开发·前后端开发
2301_821369612 小时前
使用Python进行图像识别:CNN卷积神经网络实战
jvm·数据库·python