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;
相关推荐
运维 小白4 小时前
2. 部署mysql服务并监控mysql
数据库·mysql·adb
聪明人4 小时前
macOS安装Redis
数据库·redis·macos
北漂Zachary5 小时前
Mysql中使用sql语句生成雪花算法Id
sql·mysql·算法
weixin_505154465 小时前
Bowell Studio:重塑工业互联网时代的装配制造与运维检修
运维·数据库·人工智能·制造·数字孪生·3d产品配置器·3d交互展示
sa100275 小时前
淘宝商品详情 API 接口开发实战:item_detail 调用、参数与 Python 示例
linux·数据库·python
小光学长5 小时前
基于ssm的膳食健康管理系统e6whl4q7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·开发语言·数据库·学习·ssm
一个天蝎座 白勺 程序猿5 小时前
KingbaseES融合数据库:一库多能,企业数据管理新思路
数据库·性能优化·kingbasees·金仓数据库
橘颂TA6 小时前
【MySQL】解锁表的 N 种牵手方式:SQL 连接与子查询漫游(复合查询)
数据库·mysql
数据知道6 小时前
MongoDB基于角色的访问控制(RBAC):精细化权限管理的实用方法
数据库·mongodb
代码派6 小时前
NineData社区版:免费+本地化部署,满足数据库DevOps、数据复制与一致性对比的数据库管理平台
运维·数据库·database·devops·数据库管理工具·ninedata·数据库迁移