欢迎来到 Kong Xiangqun 的博客

03-mysql用户管理及权限管理

一、用户

1、用户的作用

  1. 登录mysql数据库
  2. 管理数据库对象

2、用户的定义

主机域:可以理解为是MySQL允许登录的白名单

主机域格式:

‘10.0.0.51’  # 只有这个
'10.0.0.5%' # %表示任意一个 50 - 59
'10.0.0.%' 
'%'
'10.0.0.0'/255.255.255.0 # 固定子网
'db01'   # 支持主机名 或 域名 

3、用户管理

3.1、刚装完mysql数据库该做的事

  • 设定初始密码(root@localhost)
    • mysqladmin -root -p password ‘123’   只能第一次设置 输入原密码
  • 使用密码登录
    • mysql -uroot -p1
  • 清理无用用户
    • (如果用户没有用户名或没有主机域或没有密码的进行清理)

清理无用用户:

mysql> select user,host,password from mysql.user;
+------+-----------------------+-------------------------------------------+
| user | host                  | password                                  |
+------+-----------------------+-------------------------------------------+
| root | localhost             | *E6CC90B878B948C35E92B003C792C46C58C4AF40 |
| root | localhost.localdomain |                                           |
| root | 127.0.0.1             |                                           |
| root | ::1                   |                                           |
|      | localhost             |                                           |
|      | localhost.localdomain |                                           |
| root | %                     | *E6CC90B878B948C35E92B003C792C46C58C4AF40 |
+------+-----------------------+-------------------------------------------+

drop user  ' '@'localhost';

3.2、如果误删除了所有用户

因为验证用户信息是在连接层来验证用户,把连接层验证模块关掉,tcp/ip链接协议关掉,防止被外网链接

命令:mysql_safe --skip-grant-tables --skip-networking &

mysql的启动参数 --skip-grant-tables不开启验证模块 (登录就不验证用户名密码了)

本地能登录,验证模块都关闭了,远程也能登录,关闭远程链接 --skip-networking

  1. 停掉服务(/etc/init.d/mysqld stop)
  2. mysqld_safe --skip-grant-tables --skip-networking &
  3. mysql
  4. use mysql
  5. insert into user(user,host,password,ssl_type,ssl_cipher,x509_issuer,x509_subject) values ('root', 'localhost', PASSWORD('123'), ' ', ' ', ' ',' ');
  6. /etc/init.d/mysqld restart

3.3、忘记root用户密码

  1. /etc/init.d/mysqld stop
  2. mysqld_safe --skip-grant-tables --skip-networking &
  3. mysql
  4. use mysql
  5.  5.6以前版本:update user set password=PASSWORD('1') where user='root' and host='localhost';
  6.  5.7以上版本:update user set authentication_string=PASSWORD('1') where user='root' and host='localhost';
  7. flush privileges;刷新授权
  8. ****  对于修改密码不建议使用 ,建议使用grant命令

 4、用户管理-用户创建

# 创建用户
# 指定主机域创建用户并设置密码
create user kkk@'10.0.0.%' identified by '123';

# 查询用户
select user,host,password from mysql.user;

二、权限

1、权限的作用对象是库或者表

2、权限

mysql的权限细化到了具体的哪个命令

INSERT,SELECT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN,
PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER,
CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE,
REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER
ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE

3、归属

mysql中的归属每次设定只能有一个像linux中属主的概念,没有数组或其他的概念

 

 

4、grant命令

grant     all       on     wordpress.*            to        wordpress@'10.0.0.1%'   identified by 'wordpress';

                权限                    作用对象                                       归属                                                                  密码

4.1、关于作用对象

*.*
# 当前mysql中所有库下的所有表,范围是全局的
wordpress.*
# 单库级别: wordpress单库下的所有表范围
wordpress.t1
# 单表级别: 只对t1表设定权限

三、企业中权限的使用

如何开一个用户

想:
1、要对哪些库或者表做开发操作 2、从哪链接过来 3、用户名有没有要求 4、你的密码设定为什么
grant select,update,delete,insert on kkk.* to kkk@'10.0.0.%' identdied by '123';
show grants for kkk@'10.0.0.%';

回收权限:

remove select,insert,update,delete kkk.* from kkk@'10.0.0.%';

 

举例:

数据库wordpress  下的表有 ------->  t1 \  t2

数据库blog            下的表有 ------->  tb1表

create database wordpress;
use wordpress;
create table t1 (id int);
create table t2 (id int);
create database blog;
use blog;
create table tb1(id int);

命令1:

  grant select on *.* to wordpress@'10.0.0.5%' identified by '123';

  对所有库下的所有表授权了一个select

命令2:

  grant insert,delete,update on wordpress.* to wordpress@'10.0.0.5%' identified by '123';

  单库级别,对于wordpress库下的所有表添加insert\delete\update, 用户还是同一个用户,但是这次只是为单个库添加权限

命令3:

  grant all on wordpress.t1 to wordpress@'10.0.0.5%' identified by '123';

  只对t1表添加所有权限

 

问:一个客户端程序使用wordpress用户从10.0.0.59 登录到mysql中后,
(a)对t1表的管理能力?
同时足1、2、3,最终权限是1+2+3

(b)对t2表的管理能力?
同时满足了1和2两个授权,最终权限1+2

(c)对tb1表的管理能力?
只满足1号授权,所以只能select

结论:

"""
如果在不同级别都包含某个表的管理能力时,权限是相加关系,
但是我们不推荐在多级别定义重复权限
最常用的权限设定方式是对单库进行授权,即:wordpress.*
"""

 

posted @ 2020-10-02 00:09  kongxiangqun20220317  阅读(209)  评论(0)    收藏  举报