mysql用户权限,6不删空用户的影响

目录

MySQL的顾客和权力介绍,mysql客户权限

一、关于MySQL权限的几点常识:

1、MySQL的权限系统关键用来验证顾客的操作权限。

2、在MySQL内部,权限音讯寄放在MySQL数据库的granttable里。当mysql运营后,granttable里的新闻会写入内部存款和储蓄器。

3、MySQL 使用user name 加 host name 来作为标记符。

经过这种标志符,能够用来分化分歧host上的大同小异的user name。

4、MySQL 权限调节有2种政策:

1)依据密码是还是不是正确来决定顾客端的连天。

2)倘使能够寻常connect,server还足以检查每种satement是或不是有权力去推行。假诺唯有某张表的select 权限,就无法拓展drop 操作。

5、即使客户的权能改换,当前已延续的对话客户不会受影响,后一次报到才会收效。

 

 

二、关于MySQL的多少个有关权限表的含义:

user:客商账号、全局权限

db:库品级权限

host:废弃

tables_priv:表等第权限

colums_priv:列等级权限

procs_priv:存款和储蓄进程和存款和储蓄函数相关的权力

proxies_priv:代理客户权限

 

三、MySQL客户账号的创办法则

用户名@主机

客商名:16字符以内

主机:

主机名:www.test.com,mysql

IP:192.168.2.1

互连网地址:192.168.0.0/255.255.0.0

通配符:%,192.168.%.%,%.test.com

 

 

四、MySQL的客户权限等级

劳动管理类:super

库:CREATE

表:DELETE、ALTER

列:INSERT、SELECT、UPDATE

 

越多等级可仿照效法MySQL官方文书档案

 

 

五、与权力相关的多少个指令

GRANT 权限,... ON [对象类型] db.{table|routine} TO 'username'@'host' [INDENTIFIED BY 'password'];

REVOKE 权限,... ON [对象类型] db.{table|routine} FROM 'username'@'host';

SHOW GRANTS FOR 'username'@'host';

CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];

DROP USER 'username'@'host';

RENAME USER old_name TO new_name;

 

六、权限的操作命令比方

翻开当前数据库的具有顾客:

select user,host,password from mysql.user;

 

给客户赋予super权限(super和ALL PCR-VIVILEGES都能够):

GRANT super ON *.* TO 'mysql'@'localhost';

GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'localhost';

 

剔除用户的super权限(super和ALL P帕杰罗IVILEGES都足以):

REVOKE super ON *.* FROM 'mysql'@'localhost';

REVOKE ALL PRIVILEGES ON *.* FROM 'mysql'@'localhost';

 

查看赋予顾客的权能

SHOW GRANTS FOR 'mysql'@'localhost';

 

七、MySQL的标题管理

 

1、MySQL登入密码忘记时的借尸还魂操作

 

启动mysql_safe时传递多个参数:

--skip-grant-tables      跳过授权表

--skip-networking       为了安全,幸免互连网登陆

签到格局一:

修改/etc/init.d/mysql

图片 1

报到方式二:

直接在my.cnf配置

[mysqld]

skip-grant-tables

skip-networking

未来修改密码:

经过立异授权表格局一贯退换其密码,而后移除此七个选择重启服务器

UPDATE user SET PASSWORD=PASSWORD('123456') WHERE User='root'

 

2、顾客端连接MySQL数据库速度慢的难题

 

向来在my.cnf配置,关闭DNS的反向剖判参数

[mysqld]

skip-name-resolve

一、关于MySQL权限的几点常识: 1、MySQL的权能系统首要性用来证实客商的操作权限。 2、在MySQL内部,权...

mysql could not be resolved: Name or service not known,mysqlresolved

问题: mysql DNS反解:skip-name-resolve

错误日志有类似警示:

1.120119 16:26:04 [Warning] IP address '192.168.1.10' could not be resolved: Name or service not known
2.120119 16:26:04 [Warning] IP address '192.168.1.14' could not be resolved: Name or service not known
3.120119 16:26:04 [Warning] IP address '192.168.1.17' could not be resolved: Name or service not known

透过show processlist开掘大量像样如下的总是:

1.|592|unauthenticated user|192.168.1.10:35320|NULL|Connect| |login|NULL|
2.|593|unauthenticated user|192.168.1.14:35321|NULL|Connect| |login|NULL|
3.|594|unauthenticated user|192.168.1.17:35322|NULL|Connect| |login|NULL|

skip-name-resolve 参数的成效:不再进行反分析(ip不反解成域名),那样能够加速数据库的反适那时候候间。

修改配置文件增多并索要重启:

复制代码 代码如下:
[mysqld]
skip-name-resolve

实在就是在[mysqld]上面一行参加skip-name-resolve重启mysql服务就足以了。

下边是进一步详细的表达:

现象:

程序连接mysql时,mysql的error.log里面提醒:

[Warning] IP address '10.0.0.220' could not be resolved: Name or service not known

原因:

Mysql数据库服务器并未有配备 /etc/hosts,也从没DNS服务,导致mysqld线程剖析IP对应的主机名时,剖判失败。

参谋资料:

Mysql域名解析:

当贰个新的顾客端尝试跟mysqld成立连接时,mysqld爆发八个新线程来拍卖那些哀求。新线程会先反省央求创立连接的主机名是不是在Mysql的主机名缓冲中,假如不在,线程会尝试去分析呼吁连接的主机名。

浅析的逻辑如下:

a. Mysql线程通过gethostbyaddr()把获得的IP地址剖判成主机名,然后经过gethostbyname()把收获的主机名分析成IP地址,有限支持主机名和IP地址对应涉及的可信赖;

b. 假使操作系统扶持使用安全进度的gethostbyaddr_r()和gethostbyname_r() 调用,Mysqld线程能够用它俩来优化主机名分析;

c. 借使操作系统不扶持酒泉线程调用,Mysqld进度先做四个互斥锁,然后调用gethostbyaddr()和gethostbyname()分析主机名。此时,在首先个经过释放掉主机名缓冲池的主机名此前,别的进度不恐怕再度深入分析那些主机名; <-------MySQL手册里面在那间说的host name ,意思应该是指同三个IP地址和相应的率先个主机名关系。

在开发银行mysqld进程是,能够行使 --skip-name-resolve 参数禁用DNS的主机名剖析功效,禁止使用该成效后,在MySQL授权表里面,你只好动用IP地址。

比如您所处情状的DNS相当的慢 恐怕 有为数不菲主机, 你能够通过禁止使用DNS解析作用--skip-name-resolve 可能 升高HOST_CACHE_SIZE大小 来升高数据库的响应作用。

禁止使用主机名缓冲的发方法: 使用--skip-host-cache 参数; 刷新主机名缓冲区: 试行 flush hosts 大概实践mysqladmin flush-hosts;

禁用TCP/IP连接: 使用--skip-networking参数。

实验:
# grep 192.168.1.1 /etc/hosts
192.168.1.1 hostname_online

sql> grant usage on *.* to [email protected]'h_tt_%' identified by 'root';

sql> flush hosts;

# mysql -h 192.168.1.1 -uroot -proot

ERROR 1045 (28000): Access denied for user 'root'@'hostname_online' (using password: YES) ### IP解析为hostname_online,不是h_tt_%,访谈被拒。

# grep 192.168.1.1 /etc/hosts

192.168.1.1 hostname_online

192.168.1.1 h_tt_1

# mysql -h 192.168.1.1 -uroot -proot

ERROR 1045 (28000): Access denied for user 'root'@'hostname_online' (using password: YES)#### mysqld未有刷新主机池缓冲池中的IP和主机名消息,此时IP对应hostname_online

sql> flush hosts;

# mysql -h 192.168.1.1 -uroot -proot

ERROR 1045 (28000): Access denied for user 'root'@'hostname_online' (using password: YES) #### mysqld深入分析了/etc/hosts里面同二个IP对应的首先个主机名关系时,就不再分析前边那么些IP对应的主机名关系

# grep 192.168.1.1 /etc/hosts

192.168.1.1 h_tt_1

192.168.1.1 hostname_online

sql> flush hosts;

# mysql -h 192.168.1.1 -uroot -proot

sql> exit

【实验:】验证分析同样IP对应的第一个主机名关系后,就不再剖析同样IP:

Sql>grant usage on *.* to [email protected]'h_tt_%' identified by ‘root';

Sql>flush hosts;

# grep h_tt /etc/hosts # grep h_tt /etc/hosts

192.168.1.1hostname_online 192.168.1.1h_tt_1

192.168.1.1h_tt_1 192,168.1.2h_tt_1

做客mysql被驳回; 从八个IP都可以访问mysql.

【结论】

此试验求证了,上述mysql手册中对"How MySQL Uses DNS"的解释。

即mysqld线程深入分析/etc/hosts是,是以IP作为独一标志的,及时二个IP对应了七个主机名,然则mysqld线程只深入分析第一条对应涉及,不论后边有几条那个IP对应的不如主机名的笔录,Mysqld进程都不会去剖析,都以船到江心补漏迟的。

【适用条件:】

一直不DNS服务器,主机非常非常多,也许不想维护/etc/hosts里面手动配置的IP和主机名对应列表时,能够在mysql授权时试行主机名称叫"%" 只怕剥夺IP和主机名分析功效(--skip-name-resolve)。

could not be resolved: Name or service not known,mysqlresolved 难点: mysql DNS反解:skip-name-resolve 错误日志有像样警告: 1.1二零一二9 16:26:04 [Warning] IP a...

  • MySQL 5.6不删空客户的熏陶
    • 问题
    • 分析
    • 测试
      • 启航mysqld风尚未加多--skip-name-resolve
      • 启动mysqld时加上--skip-name-resolve
    • 结论

MySQL 5.6不删空顾客的影响



问题


MySQL5.6 新建本地能够登陆的客户,但在该地一贯登入不上,空中楼阁的客户却能登陆成功

mysql -uroot -p1234 -S /data/mysql/33562/mysql.sock  -e "select version()"
mysql: [Warning] Using a password on the command line interface can be insecure.
 ----------- 
| version() |
 ----------- 
| 5.6.39    |
 ----------- 

创建了admin@'%' 用户,但在本地无法登陆,但可以远程登陆

sselect user,host,password from mysql.user;
 -------- ----------- ------------------------------------------- 
| user   | host      | password                                  |
 -------- ----------- ------------------------------------------- 
| root   | localhost | *A4B6157319038724E3560894F7F932C8886EBFCF |
| root   | slave58   |                                           |
| root   | 127.0.0.1 |                                           |
| root   | ::1       |                                           |
|        | localhost |                                           |
|        | slave58   |                                           |
| admin  | %         | *4ACFE3202A5FF5CF467898FC58AAB1D615029441 |
| zabbix | 127.0.0.1 | *DEEF4D7D88CD046ECA02A80393B7780A63E7E789 |
| super  | 127.0.0.1 | *F85A86E6F55A370C1A115F696A9AD71A7869DB81 |
| super  | slave58   | *F85A86E6F55A370C1A115F696A9AD71A7869DB81 |
 -------- ----------- ------------------------------------------- 


show grants for 'admin'@'%';

 --------------------------------------------------------------------------------------------------------------- 
| GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY PASSWORD '*4ACFE3202A5FF5CF467898FC58AAB1D615029441' |
 --------------------------------------------------------------------------------------------------------------- 

select password('admin');
 ------------------------------------------- 
| password('admin')                         |
 ------------------------------------------- 
| *4ACFE3202A5FF5CF467898FC58AAB1D615029441 |
 ------------------------------------------- 

以ip地址无法登陆
mysql -uadmin -padmin   -P33562 -h10.186.30.58


mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'admin'@'slave58' (using password: YES)

以socket也无法登陆
mysql -uadmin -padmin   -P33562 -S /data/mysql/33562/mysql.sock
或者
mysql -uadmin -padmin   -P33562 -h127.0.0.1

mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'admin'@'localhost' (using password: YES)

不存在的用户却可以登录成功
mysql -utest  -S /data/mysql/33562/mysql.sock
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 15
Server version: 5.6.39 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

分析


1、本是以ip地址实行登陆的,错误音信报的是Access denied for user 'admin'@'slave58',自动举行了DNS剖析,分析成了主机名,skip-name-resolve 能够禁用DNS分析
2、mysql在验证权限的时候,先验证host,在验证user,最终验明正身password,即
host->user->password
3、以host或许socket登入,举办了DNS分析,host;socket被分析成了slave58;localhost, 而mysql.user 中host 为localhost和slave58 对应空顾客,就报了访谈拒绝错误

测试


开发银行mysqld时未有增加--skip-name-resolve

以mysql空中楼阁的顾客进行登入

mysql -utest -P33562 -h`hostname`
或者
mysql -utest -S /data/mysql/33562/mysql.sock

Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.6.39 MySQL Community Server (GPL)
.....
show grants;
 ------------------------------------ 
| Grants for @slave58                |
 ------------------------------------ 
| GRANT USAGE ON *.* TO ''@'slave58' |
 ------------------------------------ 

show databases;
 -------------------- 
| Database           |
 -------------------- 
| information_schema |
| test               |
 -------------------- 
create table test.test_t1(id int);
Query OK, 0 rows affected (0.05 sec)
drop table test.test_t1;
Query OK, 0 rows affected (0.05 sec)
drop database test;
Query OK, 8 rows affected (0.49 sec)


    具有USAGE  的权限的用户 有test 库的所有权限和information_schema 中表的select权限。
    不存在的用户还可以 drop datase test 这个“神操作”是因为 空用户具有test和test_*库的所有权限,而任何用户都能匹配空用户,mysql5.6初始化后默认就有这个,而mysql5.7默认没有,也没有空用户,空密码用户
    select * from mysql.db;

图片 2

以mysql.user中设有的客户登陆如 “难点” 中所示,无法登陆


在mysql.user 中留存的客户还不能够登陆,自便贰个不设有的顾客还足以登入成功 ,仍可以drop database test,那有十分大的安全祸患!起先出乎意料,那mysql5.6是还是不是假的o_o


启动mysqld时加上--skip-name-resolve

ps -ef | grep -w 33562 | grep -v grep  | awk '{print $2}' | xargs -l kill

su - mysql -c "/usr/local/mysql/5.6.39/bin/mysqld --no-defaults --basedir=/usr/local/mysql/5.6.39 --datadir=/data/mysql/33562 --pid-file=/data/mysql/33562/clone.pid --port=33562 --server-id=33562 --socket=/data/mysql/33562/mysql.sock --tmpdir=/data/mysql/33562 --skip-name-resolve &"

以mysql.user中不设有的客户展开登入

mysql -utest   -P33562 -h`hostname`
ERROR 1045 (28000): Access denied for user 'test'@'10.186.30.58' (using password: NO)

mysql -utest -S /data/mysql/33562/mysql.sock
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 9
Server version: 5.6.39 MySQL Community Server (GPL)

以`hostname`登录,host 转化成ip地址,在mysql.user中没有匹配到;
以socket登录 host 被转化成localhost,在mysql.user中匹配到了''@'localost'空用户,登录成功。可见,任意用户都能匹配mysql.user的user为空' '的用户

以mysql.user中留存的客户能够登入成功

mysql -uadmin -padmin   -P33562 -h10.186.30.58
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.6.39 MySQL Community Server (GPL)

结论

1、在平昔不以 skip-name-resolve 运营运行的状态下,以mysql -uuser -ppassword登入会实行DNS深入分析,在mysql.user中相当到不当的 host,即时未有范围主机的客户 ‘user’@'%'也无可奈何登陆
2、即时贰个并不真实的客商在以`hostname` 或然socket举办登陆,若相称了mysql.user中的host,该host对应的user和password为空,并不设有的客商也能登入成功
3、为了幸免进行DNS分析,在my.cnf配置文件中添加skip-name-resolve
4、在刚开始化mysql5.6后,就活该删除mysql.user; mysql.db中空客户,空密码账户(满含root空秘密账户),裁减安全隐患
DELETE FROM mysql.user WHERE PASSWORD=' ';
DELETE FROM mysql.db WHERE USER=' '; FLUSH PRIVILEGES;
5、可用mysql5.6 自带mysql_secure_installation 脚本删除空客户,空密码账户,删除test库

参考
mysql空客户(user列为空)带来的熏陶

本文由星彩网app下载发布于星彩彩票app下载,转载请注明出处:mysql用户权限,6不删空用户的影响

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。