用户权限管理
目录
一、概述
二、用户权限类型
1、ALL PRIVILEGES
2、CREATE
3、DROP
4、SELECT
5、INSERT
6、UPDATE
7、DELETE
8、INDEX
9、ALTER
10、CREATE VIEW和CREATE ROUTINE
11、SHUTDOWN
12、GRANT OPTION
三、用户赋权
四、权限删除
五、用户删除
六、查看拥有哪些用户
七、查看用户拥有哪些权限
一、概述
数据库用户权限管理是数据库系统中非常重要的一个方面,它用于控制不同用户访问和操作数据库的权限范围。数据库用户权限管理可以保护敏感数据和数据库结构,确保只有被授权的用户才可以操作和使用数据库,防止数据被修改或泄露,并最大程度地保证数据库的安全。
二、用户权限类型
实验前提条件:
创建用户a1
create user 'a1'@'%' identified by '123123.coM';
这个命令是用来在MySQL数据库中创建一个名为'a1',同时允许从任何主机(%)使用任何IP地址连接到该用户。该用户的密码为'123123.coM'。
使用root用户登录赋予a1用户如下权限并进行验证:
1、ALL PRIVILEGES
拥有该权限的用户可以执行所有数据库的所有操作,包括创建/删除/修改数据库和表、执行 SELECT/INSERT/UPDATE/DELETE 等语句。
grant all privileges on aaa.* to 'a1'@'%' identified by '123123.coM';
每次赋予权限后记得刷新配置,养成良好习惯
flush privileges;
切换到a1用户检查是否有权限进行如下操作:
mysql -ua1 -p123123.coM
验证创建数据表命令
create table aaa(
id int null,
name char(50),
age int null
);
验证修改数据表命令
alter table aaa rename to bbb;
执行insert命令
insert into bbb(id,name,age) values
(1,'zn',27),
(2,'zx',25);
执行update命令
update bbb set name='zkx' where id=2;
执行select命令
select * from bbb;
执行delete命令
delete from bbb where id=2;
删除数据表命令
删除数据表但是保留框架(表结构)命令
delete from bbb;
删除数据表
drop table bbb;
2、CREATE
拥有该权限的用户可以创建新数据库和表。
grant create on aaa.* to 'a1'@'%' identified by '123123.coM';
创建数据表
create table aaa(
id int,
name char(10)
);
删除数据表
drop table aaa;
这个错误提示意味着用户'a1'@'localhost'没有权限执行DROP命令,用于删除表'aaa'。
delete from aaa;
这个错误提示意味着用户'a1'@'localhost'没有权限执行DROP命令,用于删除表'aaa'。
3、DROP
拥有该权限的用户可以删除数据库和表。
grant drop on aaa.* to 'a1'@'%' identified by '123123.coM';
drop table aaa;
4、SELECT
拥有该权限的用户可以执行 SELECT 语句,即查询数据。
grant select on aaa.* to 'a1'@'%' identified by '123123.coM';
select * from a2;
5、INSERT
拥有该权限的用户可以执行 INSERT 语句,即向表中插入数据。
grant insert on aaa.* to 'a1'@'%' identified by '123123.coM';
进入aaa库下创建表内容( use aaa; )
insert into a2(id,name,age,phone) values
(5,'zkx',25,123456789);
6、UPDATE
拥有该权限的用户可以执行 UPDATE 语句,即更新表中的数据。
grant update on aaa.* to 'a1'@'%' identified by '123123.coM';
修改刚才创建的内容
这里会提示错误,没有select权限因为我们在使用上述命令过程中用到了where条件,此条件属于select命令,所以无法进行使用
添加select权限
grant select on aaa.* to 'a1'@'%' identified by '123123.coM';
进行验证
7、DELETE
拥有该权限的用户可以执行 DELETE 语句,即删除表中的数据。
grant delete on aaa.* to 'a1'@'%' identified by '123123.coM';
进行验证
8、INDEX
拥有该权限的用户可以创建和删除索引。
grant index on aaa.* to 'a1'@'%' identified by '123123.coM';
创建索引
create index idx_name on a2 (name);
删除索引
alter table a2 drop index idx_name;
删除索引会提示报错,因为我们在赋予权限时没有给它alter权限
添加alter权限
grant alter on aaa.* to 'a1'@'%' identified by '123123.coM';
删除索引
alter table a2 drop index idx_name;
9、ALTER
拥有该权限的用户可以更改表的结构定义,例如更改列的属性、重命名表或更改表的引擎类型等。
grant alter on aaa.* to 'a1'@'%' identified by '123123.coM';
因为我们需要查看表格属性,给a1用户再添加一个select权限
desc a2;
在a2表格中添加一行出生日期的列(这里我们用date表示出生日期)
alter table a2 add column date date;
10、CREATE VIEW和CREATE ROUTINE
分别拥有创建视图和创建存储过程等常规操作的权限。
grant create view,create routine on aaa.* to 'a1'@'%' identified by '123123.coM';
使用上述命令进行操作还需要给予select权限
创建视图所需权限 select
创建存储过程所需权限 execute,select
创建视图
create view z1_view as select name,age from z1;
验证视图
select * from z1_view;
创建存储过程
11、SHUTDOWN
拥有该权限的用户可以关闭 MySQL 服务器。
shutdown;
没有赋予shutdown权限时:
这个错误是MySQL数据库服务器返回的一个访问拒绝错误。根据错误消息,您尝试执行了一个需要"SHUTDOWN"权限的操作,但是您的账户没有被授予这个权限,所以访问被拒绝了。
"SHUTDOWN"命令是作为超级用户(通常是数据库管理员)在命令行或管理工具中直接执行的。
在MySQL数据库中,使用"shutdown;"命令将关闭整个MySQL服务器实例,包括所有正在运行的数据库和连接。这意味着所有未保存的数据将丢失,所有已建立的连接将被终止,数据库将停止运行。
使用"shutdown;"命令要谨慎,因为它会导致系统中断,并可能导致数据损坏或丢失。必须确保在执行此命令之前,所有数据都已备份或保存,所有连接都已断开,并且不再需要数据库运行。
在生产环境中,通常不应该直接使用"shutdown;"命令来关闭MySQL服务器。而是通过正常的维护程序或脚本来停止服务,以确保数据的完整性和可靠性。
root用户具有shutdown权限
shutdown;
停止以后无法进行操作
show databases;
查看状态
systemctl status mysqld
启动即可登录MySQL
systemctl start mysqld
12、GRANT OPTION
拥有该权限的用户可以将自己的权限授予其他用户或组。
grant grant option on aaa.* to 'a1'@'%' identified by '123123.coM';
取消授予权限
revoke grant option on aaa.* from 'a1'@'%';
三、用户赋权
格式:grant 权限 on 数据库.数据表 to 授权用户@授权主机 identified by '密码';
grant all privileges on aaa.* to 'a1'@'%' identified by '123123.coM';
赋予a1用户所有数据操作权限,检查验证
四、权限删除
格式:revoke 权限类型 on 数据库.数据表 from 授权用户@授权主机;
revoke all privileges on aaa.* from 'a1'@'%';
五、用户删除
格式: drop user 用户@主机;
drop user 'a1'@'localhost';
六、查看拥有哪些用户
select user,host from mysql.user;
七、查看用户拥有哪些权限
show grants for 'root'@'localhost';