用户管理
用户功能
登录数据库,管理数据库的对象(库,表)
用户组成
用户名@'白名单' 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