数据库
首页 > 数据库> > mysql权限详解

mysql权限详解

作者:互联网

Mysql权限管理也是通过mysql表来管理的

本文基于mysql8

1. MySQL 权限级别

权限存在mysql上述表中,待MySQL实例启动后就加载到内存中

2. MySQL 权限详解

3. MySQL权限表结构说明

以user表为例,其他表类似。

注意: 这里是以host、user为主键,所以在创建用户以及赋权限的时候要特别小心

CREATE USER 'test12345'@'%' IDENTIFIED BY '123456';

CREATE USER 'test12345'@'*' IDENTIFIED BY '123456';

上面两条语句会创建两个用户

Tables_priv和columns_priv权限值

Table Name Column Name Possible Set Elements
tables_priv Table_priv 'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter', 'Create View', 'Show view', 'Trigger'
tables_priv Column_priv 'Select', 'Insert', 'Update', 'References'
columns_priv Column_priv 'Select', 'Insert', 'Update', 'References'
procs_priv Proc_priv 'Execute', 'Alter Routine', 'Grant'

4. MySQL权限常用命令

命令说明

# 有理论之后,下面的命令执行完可以在终端执行测试一下
# mysql8经测试,必须先创建用户之后再赋予权限,赋予权限时,能再加IDENTIFIED BY,创建用户和赋予权限语句的host、user必须相同
## 赋予用户权限简单命令##################################################
select user,host from mysql.user; # 查询mysql用户信息
show grants for root@'localhost'; #查看已经授权给用户的权限信息 
show create user root@'localhost'; #查看用户的其他非授权信息
CREATE USER 'test'@'localhost' IDENTIFIED BY '123456'; #创建用户,这个时候还没有权限 192.168.148.132
GRANT ALL PRIVILEGES ON *.* TO 'test'@'localhost' WITH GRANT OPTION; #赋予权限,这里赋予了所有权限,会直接在user表添加相关权限信息,这里不能远程连接

CREATE USER 'test'@'%' IDENTIFIED BY '123456'; 
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' WITH GRANT OPTION; #和上述两个语句的区别是,这里支持远程访问,上述语句只能本地访问

##  回收 mysql 权限#####################################################
CREATE USER 'hsm'@'%' IDENTIFIED BY '123456'; #创建用户
grant select on Test.User to hsm@'%'; #赋予查询的权限
show grants for hsm@'%'; # 查询权限信息
	GRANT USAGE ON *.* TO `hsm`@`%`
	GRANT SELECT ON `Test`.`User` TO `hsm`@`%`
revoke select on Test.User from hsm@'%'; #回收查询权限,再次查询,会发现没有了select权限

## 删除用户权限 #########################################################
drop user hsm@'%' # 删除用户

flush privileges; #刷新权限
rename user 'hsm'@'*' to 'hsm'@'%'; # 重命名权限

修改用户权限说明

GRANT命令使用说明

5. 其他命令

设置MySQL用户资源限制

修改 mysql 用户密码

alter user test12345@'*' IDENTIFIED BY '1234567'; # 修改密码为1234567

设置MySQL用户密码过期策略

设置系统参数default_password_lifetime作用于所有的用户账户

ALTER USER 'hsm'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'hsm'@'%' PASSWORD EXPIRE NEVER; #密码不过期
ALTER USER 'hsm'@'%' PASSWORD EXPIRE DEFAULT; #默认过期策略
ALTER USER 'hsm'@'%' PASSWORD EXPIRE; # 手动强制某个用户密码过期

mysql 用户 lock

通过执行create user/alter user命令中带account lock/unlock子句设置用户的lock状态

 create user abc2@localhost identified by 'mysql' account lock; #创建用户并锁定用户
 alter user abc2@'localhost' account unlock;  # 解锁用户

5. 权限例子

  1. 创建一个用户,对数据库只有可读权限

    CREATE USER 'readonly'@'%' IDENTIFIED BY 'readonly'; #创建用户readonly,%表示可以远程连接
    GRANT select ON *.* TO 'readonly'@'%'; #赋予权限,这里赋予了所有权限,会直接在user表添加相关权限信息,这里不能远程连接
    
  2. 创建一个用户,只赋予用户某几个数据库的权限

    CREATE USER 'order_all'@'%' IDENTIFIED BY 'order_all'; #创建用户order,可以查看订单表所有权限
    GRANT ALL PRIVILEGES ON Test.* TO 'order_all'@'%'; #赋予权限,Test库的全部权限
    GRANT ALL PRIVILEGES ON mypower.* TO 'order_all'@'%'; #赋予权限,mypower库的全部权限
    
  3. 创建一个用户,只赋予用户某几个表的权限

    CREATE USER 'table'@'%' IDENTIFIED BY 'table'; #创建用户order,可以查看订单表所有权限
    GRANT ALL PRIVILEGES ON Test.user TO 'table'@'%'; #赋予权限,Test库user表的全部权限
    GRANT ALL PRIVILEGES ON Test.Test TO 'table'@'%'; #赋予权限,Test库Test表的全部权限
    

标签:创建,数据库,用户,详解,user,mysql,权限,priv
来源: https://www.cnblogs.com/steven158/p/15623652.html