MySQL的用户和权限介绍,mysql用户权限

Posted by

目录

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 PRIVILEGES都可以):

GRANT super ON *.* TO ‘mysql’@’localhost’;

GRANT ALL PRIVILEGES ON *.* TO ‘mysql’@’localhost’;

 

删除用户的super权限(super和ALL PRIVILEGES都可以):

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
    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
对应空用户,就报了访问拒绝错误

相关文章

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注