第15节-MySQL用户权限

1、用户管理

1.1、查询用户

use mysql

-- 5.6以下的版本
select host,user,password from user;

-- 5.7以上的版本
select host,user,authentication_string from user;

1.2、创建用户

1.2.1、create user

-- 创建用户:test1,test2 , 此方式创建默认是无权限,只允许登陆
-- 单个用户创建
create user test1@'%' identified by 'test1';

-- 多个用户创建
create user test1@'%' identified by 'test1',test2@'%' identified by 'test2';

1.2.2、grant

-- 创建两个用户test3和test4,同时设置授权
-- 创建单个户
grant all on cjgl.* to 'test3'@'%' identified by 'test3';

-- 同时创建多个用户
grant all on cjgl.* to 'test3'@'%' identified by 'test3','test4'@'%' identified by 'test4';

1.2.3、手动插入insert into

-- 5.6以下版本
insert into mysql.user(host,user,password,ssl_cipher,x509_issuer,x509_subject) values ('%','test5',password('test5'),'','','');

-- 5.7以上版本
insert into mysql.user(host,user,authentication_string,ssl_cipher,x509_issuer,x509_subject) values ('%','test5',password('test5'),'','','');

-- 手动插入,必须要执行刷新,才生效
flush privileges;

1.3、修改用户名

-- 将test1,test2,修改用户名为:user1,user2
-- 修改单个用户
rename user 'test1'@'%' to 'user1'@'%';

-- 修改多个用户
rename user 'test1'@'%' to 'user1'@'%','test2'@'%' to 'user2'@'%';

1.4、修改用户密码

1.4.1、已知root密码,修改root的密码

-- 已知root密码,进行root密码的修改
-- -p password root 指定新的密码
[root@localhost ~]# mysqladmin -S /usr/local/mysql/data/mysql.sock -uroot -p password root
Enter password: -- 输入原因的密码 
mysqladmin: [Warning] Using a password on the command line interface can be insecure.

1.4.2、登陆root,修改指定用户名的密码

-- 修改user1的密码
set password for 'user1'@'%'=password('new_pwd');

1.4.3、使用update修改用户密码

-- 5.6以下的版本
update mysql.user set password=password('user2') where user='user2' and host='%';
flush privileges;

-- 5.7以上的版本
update mysql.user set authentication_string=password('user2') where user='user2' and host='%';
flush privileges;

1.4.4、忘记root密码的处理方法

1、增加忽略权限的配置
[root@localhost ~]# cat /etc/my.cnf
[mysqld]
-- 增加此行
skip-grant-tables

2、重启mysql服务

3、免密码,登陆mysql

4、使用update修改密码
update mysql.user set authentication_string=password('root123') where user='root' and host='localhost';
flush privileges;

5、删除配置信息skip-grant-tables,重启mysql服务

1.5、删除用户

1.5.1、删除方式1:drop user

-- 删除user1、user2用户
drop user user1@'%',user2@'%';

1.5.2、删除方式2:delete

-- 删除test5用户
delete from mysql.user where user='test5' and host='%';
flush privileges;

2、权限管理

2.1、权限介绍

1、什么是权限?
权限是指登录到MySQL服务器的用户,能够对数据库对象执行何种操作的规则集合。
所有的用户权限都存储在mysq1 数据库的6个权限表中,在MySQL启动时,服务器会将数据库中的各种权限信息读入到内存,你确定用户可进行的操作。

2、权限的好处
为用户分配合理的权限可以有效保证数据库的安全性,不合理的授权会使数据库存在安全隐患。


3、MySQL的权限类型
3.1、全局层级:使用ON *.*语法赋予权限。
3.2、数据库层级:使用ON db_name.*语法赋予权限。
3.3、表层级:使用ON db_name.tb1_name语法赋予权限。
3.4、列层级:使用SELECT(co11,co12…)、INSERT(co11 , co12…)和UPDATE(co11,co12…)语法授予权限。
3.5、存储过程﹑函数级:使用execute on procedure或execute on function语法授予权限。

2.2、权限管理

2.2.1、查看权限

show grants for test1@'%';
+-----------------------------------+
| Grants for test1@%                |
+-----------------------------------+
| GRANT USAGE ON *.* TO 'test1'@'%' | -- 默认权限
+-----------------------------------+

2.2.2、分配权限

-- 1、分配test1用户,具有增删改查的权限
grant select,insert,delete,update on cjgl.* to test1@'%';

-- 查询分配结果
mysql> show grants for test1@'%';
+-----------------------------------------------------------------+
| Grants for test1@%                                              |
+-----------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test1'@'%'                               |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `cjgl`.* TO 'test1'@'%' |
+-----------------------------------------------------------------+


-- 2、分配test2用户,只能修改某几列的数
grant update(ssex,age),select on cjgl.student to test2@'%';

mysql> show grants for test2@'%';
+-------------------------------------------------------------+
| Grants for test2@%                                          |
+-------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test2'@'%'                           |
| GRANT UPDATE (age, ssex) ON `cjgl`.`student` TO 'test2'@'%' |
+-------------------------------------------------------------+


-- 3、分配执行存储过程的权限

-- 创建一个存储过程
delimiter $$
create procedure getStudentNames() 
READS SQL DATA
begin
select sname from student limit 5;
end$$

-- 给test1用户分配,执行getStudentNames存储过程的权限
grant execute on procedure cjgl.getStudentNames to 'test1'@'%';


-- 4、分配test1对cjgl库所有权限
grant all on cjgl.* to 'test1'@'%';

2.2.3、回收权限

-- 回收存储过程的权限
revoke execute on procedure cjgl.getStudentNames from 'test1'@'%';

-- 回收select 权限
revoke select on cjgl.* from 'test1'@'%';

-- 回收所有权限
revoke all privileges,grant option from 'test1'@'%';

 

posted @ 2022-11-27 23:30  小粉优化大师  阅读(60)  评论(0编辑  收藏  举报