mysql体系结构(日常管理管理)

用户管理

用户功能

登录数据库,管理数据库的对象(库,表)

用户组成

用户名@'白名单'
oldguo@'%'              #所有地址都可以登录
oldguo@'10.0.0.1'       #只允许哪个ip来链接
oldguo@'10.0.0.%'       #代表这个网段的人可以链接 默认24位掩码
oldguo@'10.0.0.5%'      #代表50-59的人可以链接
oldguo@'localhost'      #数据库本地socket 
还可以用域名或者别名等...

用户信息存储在mysql.user表中

select host,user,authentication_string,plugin from mysql.user; #查询数据库中的用户
desc mysql.user; #查询mysql.user表中所有的列
create user test@'10.0.0.%' #创建用户
create user tets@'10.0.0.%' identified by '123'; #创建用户并设置密码
create user test@'10.0.0.%' identified with mysql_native_password  by '123'; #创建用户设置密码并修改加密插件为 mysql_native_password 
alter user tets@'10.0.0.%' identified with mysql_native_password by '123'; #修改用户密码和插件加密方式

说明mysql8.0已经更换了加密插件为caching_sha2_password

如果需要5.7插件可用 mysql_native_password 上面命令可以设置

在mysql8.0中不支持grant 直接创建用户并授权 , 必须先创建用户后grant授权。

ps : 可以在mysql配置文件中加入以下参数来设置插件为5.7版本

default——aurhentication——plugin=mysql_native_password

忘记root密码

先关闭数据库

systemctl stop mysqld

安全模式启动数据库

mysqld_safe –skip-grant-tables –skip-networking &

参数说明 --skip-grant-tables 跳过授权表加载
        --skip-networking  跳过TCP/IP协议通信

登录数据库

mysql

刷新加载授权表

flush privileges;

修改密码

alter user root@'locathost' identified by '123';

重启数据库恢复到正常模式启动

systemctl start mysqld

权限管理

在mysql8.0中有两种权限

基础权限 ,命令

role , 基础权限的集合 #类似于权限组

授权命令

grant  权限  on 权限级别 to 用户;

权限级别

权限是授权给用户的,级别就是用户对那个 库 ,表,或者 列 有什么权限

权限是用户的属性 , 刚刚创建的用户只有登录的权限 ,不同的权限在不同的地方存储

全库级别权限 *.* 管理员 mysql.user 存储

单库级别 test.* 业务层面 mysql.db 存储

单表级别 test.t1 单表 mysql.tables_priv

列级别权限 select (id,name) mysql.columns_priv

如何查看mysql中有哪些权限

show privieges;
Alter                    权限说明  表 更改表,比如添加字段、索引等
Alter routine            权限说明 存储过程  更改存储过程权限 
Create                   权限说明 数据库、表或索引 创建数据库、表或索引权限
Create routine           权限说明 存储过程    创建存储过程权限
Create role              权限说明 服务器管理  创建角色权限
Create temporary tables  权限说明 服务器管理 创建临时表权限
Create view              权限说明  视图   创建视图权限     
Create user              权限说明 创建用户权限  
Delete                   权限说明  表 删除数据权限
Drop                     权限说明 数据库或者表  删除数据库或表权限
Drop role                权限说明 服务器管理 删除角色权限
Event                    权限说明 拥有创建,修改,执行和删除事件(event)的权限   
Execute                  权限说明 存储过程  	执行存储过程权限
File                     权限说明 服务器主机上的文件访问  文件访问权限
Grant option             权限说明 数据库、赋予权限选项
Index                    权限说明 表  创建/删除索引
Insert                   权限说明 表、列 插入权限  
Lock tables              权限说明 服务器管理 锁表权限  
Process                  权限说明 服务器管理 查看进程权限
Proxy                    权限说明 服务器管理  代理成为其它用户  
References               权限说明 数据库或表  外键约束的父表  
Reload                   权限说明 服务器管理 执行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的权限 
Replication client       权限说明 服务器管理 允许查看主/从/二进制日志状态
Replication slave        权限说明 服务器管理 主从复制
Select                   权限说明 表 查询权限  
Show databases           权限说明 服务器管理 查看数据库权限  
Show view                权限说明 视图 查看视图权限   
Shutdown                 权限说明 服务器管理 关闭数据库权限 
Super                    权限说明 服务器管理 执行kill线程权限   
Trigger                  权限说明  表 触发器
Create tablespace        权限说明 服务器管理 创建/更改/删除表空间/日志文件   
Update                   权限说明  表 更新权限

注意授权的时 all 权限 不包含Grantoption 这个权限需要单独授权 , 权限是是累加的

设置权限说明

一般会有这几种用户

管理员  : ALL
开发 : Create ,Create routine,Create temporary tables,Create view,Show view ,Delete ,Event ,Execute,Insert ,References,Select,Trigger,Update
监控 : select , replication slave , client  supper
备份 : Select 、SHOW DATABASES、 PROCESS LOCK TABLES 、RELOAD
主从 : replication slave  replication client
业务 : insert , update , delete ,select

如何查看一个用户权限

show grants for test@'10.0.0.%';

或者查询权限表

select * from mysql.user where user='test' /G

mysql.user

mysql.db

回收权限

revoke insert on dev_database.* from dev_user@'10.0.0.%';

尽量把每个用户授权 在一种级别 ,以免出现权限混乱的局面

角色授权

role 可以看做一个权限的集合,这个集合有一个统一的名字 role 名。可以给多个数据库用户授予同个 role 的权限,权限变更可直接通过修改 role 来实现,不需要每个用户一个一个的去变更,方便运维和管理。role 可以创建、删除、修改并作用到它管理的用户上。

创建角色

create role test_role@10.0.0.%;

查看角色

select * from information_schema.user_privileges;

select * from mysql.role_edges; #只有授权给用户的角色才能被查看到

给角色授权

grant select on db1.* to test_role@'10.0.0%';

grant select on db1.* to test_role@'10.0.0.%';

在用户会话中,授予该用户的角色处于非活动状态。只有授予的角色在会话中处于活动状态时,该用户才拥有此角色的权限,要确定当前会话中哪些角色处于活动状态,可以使用 CURRENT_ROLE() 函数。

或在配置文件加入

activate_all_roles_on_login = on 开启 才可以自动激活角色。

mandatory_roles=test_role 使用强制性角色,服务器会为全部的用户户默认赋予该角色,而不需要显示执行授予角色。可以使用 my.cnf 文件或者使用 SET PERSIST 进行配置

需要注意的是,配置在 mandatory_roles 中的角色不能撤销其权限,也不能删除。

角色权限回收

revoke select on db1.* from test_role@'10.0.0.%';

注意角色权限一旦回收用户权限也就被回收

撤销用户角色

revoke test_role@'10.0.0.%' from test@'10.0.0.%';

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/212317.html

(0)
上一篇 2021年12月16日
下一篇 2021年12月16日

相关推荐

发表回复

登录后才能评论