MySQL用户管理及用户权限

目录

数据库用户管理

新建用户

查看用户

重命名用户rename

删除用户drop

修改用户密码

找回root密码

数据库用户授权

授予权限

查看用户权限

撤销用户权限


数据库用户管理

新建用户

复制代码
CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];
 
'用户名':指定将创建的用户名.
'来源地址':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录
可用通配符%
'密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
若使用加密密码,需要先使用SELECT PASSWORD('密码');获取密文,再在语句中添PASSWORD '密文';
若省略"IDENTIFIED BY"部分,则用户的密码将为空(不建议使用)
明文密码
create user 'lcm'@'localhost' identified by '123456';
 
 
加密创建
select password('123456');   #先获取想使用密码的加密
create user 'lcm'@'localhost' identified by password '*2F74BFB7100154E9B235A2B88FBD67E1CDD206EC';

查看用户

复制代码
用户数据位于mysql库的user表中
 use mysql;
desc user;
select user,host,authentication_string from user;

重命名用户rename

复制代码
rename user  '旧用户名'@'源地址'  to  '新用户名'@'源地址';
 
rename user 'lcm'@'localhost' to 'luo'@'localhost';

删除用户drop

复制代码
drop  user  '用户名'@'源地址';
 
drop user 'lcm'@'localhost';

修改用户密码

复制代码
set password [for '用户名'@'源地址'] = password('.....');
 
 
set password for 'luo'@'localhost'=password('123456');

找回root密码

复制代码
找回root密码
1)修改配置文件,在[mysqld]下添加skip-grant-tables
2)重启mysqld服务,使用 mysql 命令直接进入免密进入mysql
3)执行  update mysql.user set authentication_string=password('....') where user='root';
4)还原配置文件,重启服务,使用账号密码验证登录
 
vim /etc/my.conf
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=4096
default-storage-engine=INNODB
max_allowed_packet=32M
server-id = 1
skip-grant-tables
 
 
systemctl restart mysqld

数据库用户授权

复制代码
all privilege 权限如下:
 
insert(插入数据)
select(查询数据)
update(更新表的数据)
delete(删除表中数据)
create(创建库,表)
drop(删除库,表)
refemces
index(建立索引)
alter(更改表属性)
create temp orary tables
lock tables(锁表)
execute
create view(创建视图)
show view(显示视图)
create routine(创建存储过程)
alter routine(修改存储过程)e
vent(手件)
tigger on(创建触发器)

授予权限

复制代码
GRANT语句:专门用来设置数据库用户的访问权限。
 
当指定的用户名不存在时,GRANT语句将会创建新的用户;
当指定的用户名存在时,GRANT 语句用于修改用户信息。
 
权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔如"select, insert,update"。使用"all"表示所有权限(实际上部分权限仍无法使用,只包括大部分权限),可授权执行任何操作。
 
数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符*。如,使用"mysql.*" 表示授权操作的对象为mysql数据库中的所有表。
 
用户名'@'来源地址':用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP地址,还可以使用"%"通配符,表示某个区域或网段内的所有地址,如"%.stevelu.com"、 "192.168.109.%"等。
 
IDENTIFIED BY: 用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略"IDENTIFIED BY"部分,则用户的密码将为空。

grant  权限1,权限2,... on  库名.表名 to '用户名'@'源地址' [identified by '密码'];
          all                *.*
 
 
#允许用户luo在本地查询ky30数据库中所有表的数据记录,
但禁止查询其他数据库中的表的记录。
GRANT select ON ky30.* TO 'luo'@'localhost' IDENTIFIED BY '123456';
 
#允许用户lcm在所有终端远程连接mysql,并拥有所有权限。
grant all privileges on *.* to 'lcm'@'localhost' identified by '123456';
 
flush privileges;    #刷新权限
quit
 
授权用户 luo在192.168.142.22终端远程连接mysql,并拥有查看mysql库中的host表权限。使用密码"123456"进行登录。
 
#授权
mysql> grant select on mysql.host to 'lcm'@'192.168.142.22' identified by '123456';
 
#打开192.168.142.22主机进行测试
 mysql -uqiao -p123456 -h 192.168.142.22 -P3306
 
 #-p123456,小写p指定登录密码
 #-P3306,大写P指定端口号
 #-h 192.168.142.22,指定目标IP/主机名

查看用户权限

复制代码
#查看当前用户(自己)的权限
 SHOW GRANTS;     
#查看其他用户的权限
 SHOW GRANTS FOR 用户名@来源地址;   

撤销用户权限

复制代码
revoke 权限1,权限2,... on  库名.表名 from '用户名'@'源地址';
       all
 
 
revoke all on *.* from 'lcm'@'localhost';
相关推荐
morliz子轩3 分钟前
在Docker上安装MYSQL 8.x—RelationalDb with SQL
sql·mysql·docker
Sammyyyyy9 分钟前
Django 6.0 发布,新增原生任务队列与 CSP 支持
数据库·后端·python·django·sqlite·servbay
就叫飞六吧17 分钟前
innodb 更新存储的索引大小以及记录数
数据库·oracle
yumgpkpm33 分钟前
hadoop集群搭建 (超详细) 接入Impala、Hive,AI 大模型的数据底座
hive·hadoop·mysql·zookeeper·flink·kafka·hbase
TDengine (老段)36 分钟前
直播回放 | IDMP 无问智推技术详解
数据库·人工智能·物联网·ai·时序数据库·tdengine·涛思数据
DemonAvenger39 分钟前
Redis内存管理与优化策略:避免OOM的最佳实践
数据库·redis·性能优化
pandarking43 分钟前
[CTF]攻防世界:fakebook (sql注入)
数据库·sql·web安全·网络安全
T1ssy1 小时前
深入解析Redis三大缓存问题:穿透、击穿、雪崩及解决方案
数据库·redis·缓存
都是蠢货1 小时前
mysql中null是什么意思?
android·数据库·mysql