用户管理和授权是属于MySQL当中的DCL语句
创建用户以及一些相关操作
明文创建用户
create user 'zzr'@'localhost' IDENTIFIED by '123456';
create user 这是创建用户的开头
zzr表示用户名
localhost:新建的用户可以在哪些主机上登录。即可以使用IP地址,网段,主机名都可以
IDENTIFIED by '123456'; 新建用户的密码
我们可以通过IP地址,网段,主机名进行创建,这些都是对'location'的操作
'zzr'@'localhost'
'zzr'@'192.168.233.0/24'
'zzr'@'192.168.233.22'
'zzr'@'%'
其中 %代表正则任意
加密密码创建用户 :
SELECT PASSWORD('密码'); #先获取加密的密码
CREATE USER 'lisi'@'localhost' IDENTIFIED BY PASSWORD '加密的密码';
登录用户用户名的更改
RENAME USER '旧的用户名'@'旧的主机地址' TO '新的用户名'@'新的主机地址';
rename user 'test1'@'20.0.0.100' to 'zzr'@'20.0.0.100';
重命名之后,原本的test1不会保留,新的直接覆盖
删除用户
drop user '用户名'@'登录地址';
drop user 'zzr'@'localhost';
修改用户密码
set password = password('abc123');
给其他用户设置密码:
set password for 'zzr'@'20.0.0.100' = password('123123');
注意:终端没有修改密码的权限,所以得去命令行进行修改密码操作
root用户是超级管理员,它不仅可以修改自身密码,还能修改其他用户的密码。
root密码的忘记后的修改找回方法
该操作必须是在数据库本机且为root用户,才可进行
vim /etc/my.cnf
skip-grant-tables
然后重启数据库即可
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld
用户的相关权限
权限 | 权限说明 | 权限级别 |
CREATE | 创建数据库、表或索引的权限 | 数据库、表或索引 |
DROP | 删除数据库或表的权限 | 数据库或表 |
GRANT OPTION | 赋予权限选项 | 数据库或表 |
REFERENCES | 引用权限 | 数据库或表 |
ALTER | 更改表的权限 | 数据表 |
DELETE | 删除表数据的权限 | 数据表 |
INDEX | 操作索引的权限 | 数据表 |
INSERT | 添加表数据的权限 | 数据表 |
UPDATE | 更新表数据的权限 | 数据表 |
CREATE VIEW | 创建视图的权限 | 视图 |
SHOW VIEW | 查看视图的权限 | 视图 |
ALTER ROUTINE | 更改存储过程的权限 | 存储过程 |
如何给用户赋权
grant all privileges on *.* to 'hj'@'localhost' IDENTIFIED by '123456';
grant 赋权的开头语句
all PRIVILEGES 赋予所有权限
on *.* 所有库
on *.* 所有库都有操作权限
on hj.* 只能对指定(hj)库进行操作
to 'hj'@'localhost' 赋权给哪个用户,要和创建用户赋权格式一致。
IDENTIFIED by '123456' 使用哪个密码进行登录。创建用户时候可以省略
show grants for 'hj'@'localhost';
查看权限
flush privileges; 权限刷新
如何查看指定用户权限
show grant for '用户名'@'来源地址';
show grant for 'hj'@'20.0.0.100';
如何对权限进行控制
给用户加上权限:
grant select on 库名.* to '用户名'@'来源地址' idevtified by '密码';
grant select on test.* to 'test1'@'20.0.0.100' idevtified by '123456';
flush privileges;
如何给一个用户赋予多个权限
grant select,insert,drop on hj.* to 'test1'@'20.0.0.100' identified by '123456';
如何给用户撤销权限
revoke select on hj.* from 'test1'@'20.0.0.100';
练习
1.创建用户,声明网段 test 网段任选
create user 'test'@'20.0.0.0/24' IDENTIFIED by '123123'
2.创建一个库,库名:test1
3.库中创建两个表分别叫做
table1
id 主键
name 不为空
sex 不为空
CREATE TABLE table1 (
id int(4) PRIMARY KEY,
name_id int(4) NOT NULL,
sex int(4) not null
)
table2
id 主键
address 可以为空 默认-----地址不详
phone 可以为空,不能重复
CREATE TABLE table2 (
id int(4) PRIMARY KEY,
address varchar(50) default '地址不详',
phone varchar(12) UNIQUE
)
3.test可以对test1 的库 进行select insert
GRANT SELECT,INSERT on test1.* to 'test'@'20.0.0.0/24' IDENTIFIED by '123123';
//终端没有权限,所以得去root的命令行执行
4.把test的用户名改成test_123,密码改成abc123
set passwd for 'test'@'20.0.0.%' = password('abc123');
%为正则任意,来代表网段
5.删除权限:insert删去
总结
1.用户管理操作
create user 'username'@'address' identified by 'password'; #创建用户
select user,host,authentication_string from mysql.user; #查看用户信息
rename user old_user to new_user; #修改用户名
drop user '用户名'@'来源地址'; #删除用户
set password = password('XXXX'); #修改当前登录用户的密码
set password for '用户名'@'来源地址' = password('XXXX'); #修改其他用户的密码
select user (); #查看当前登录用户和来源地址
忘记root用户密码的解决方法:
修改mysql配置文件/etc/my.cnf,在 [mysqld] 配置项下加入 skip-grant-tables
service mysqld restart #重启服务
update mysql.user set authentication_string=password('新密码') where user='root';
#修改密码 flush privileges; #刷新数据库
2.用户授权操作
grant 权限列表/ALL ON 库名.表名 to 'username'@'address' identified by '密码'; #授予用户权限 show grants; #查看当前用户(自己)的权限
show grants for 'username'@'address'; #查看其他用户的权限
revoke 权限列表/ALL on 库名.表名 from 'username'@'address'; #撤销用户的权限
。