MySQL(3)权限管理及破解密码

数据库权限管理

我们知道我们的最高权限管理者是root用户,它拥有着最高的权限操作。包括select、delete、update、grant等操作。那么一般情况在公司之后DBA工程师会创建一个用户和密码,让你去连接数据库的操作,并给当前的用户设置某个操作的权限(或者所有权限)。

创建用户1

# 指定任何ip的mjj用户登录, #如果IP 地址是'%'表示所有IP都能登录。
create user 'mjj'@'ip' identified by '123';

删除用户 2

drop user '用户名'@'IP地址';

修改用户 3

rename user '用户名'@'IP地址' to '新用户名'@'IP地址';

修改密码 4

set password for '用户名'@'IP地址'=Password('新密码');
权限设置

查看权限

show grants for '用户'@'IP地址'

看看root用户

mysql使用grant命令对账户进行授权,grant命令常见格式如下

grant 权限 on 数据库.表名 to 账户@主机名            对特定数据库中的特定表授权
grant 权限 on 数据库.* to 账户@主机名              对特定数据库中的所有表给与授权
grant 权限1,权限2,权限3 on *.* to 账户@主机名      对所有库中的所有表给与多个授权
grant all privileges on *.* to 账户@主机名      对所有库和所有表授权所有权限

移除当前用户的权限

# 取消mjj用户对db1的t1文件的任意操作
revoke all on db1.t1 from 'mjj'@"%";  

# 取消来自远程服务器的mjj用户对数据库db1的所有表的所有权限
revoke all on db1.* from 'mjj'@"%";  

#取消来自远程服务器的mjj用户所有数据库的所有的表的权限
revoke all privileges on *.* from 'mjj'@'%';

 

退出数据库,使用root登录,开始权限设置

复制代码
[root@master ~]# mysql -uroot -p

MariaDB [(none)]> use mysql;

MariaDB [(none)]> grant all privileges on *.* to yuchao@127.0.0.1;

MariaDB [mysql]> show grants for yuchao@127.0.0.1;
复制代码

移除权限

MariaDB [(none)]> revoke all privileges on *.* from yuchao@127.0.0.1;
配置mysql

1.中文编码设置,编辑mysql配置文件/etc/my.cnf,下入以下内容

复制代码
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
复制代码

 修改完配置文件,需要重启mysql,使得生效

#先停止数据库,在进行配置
# \s;查看配置信息
systemctl stop mariadb#停止数据库 
systemctl start mariadb #启动数据库

 

2.授权配置

复制代码
 
远程连接设置哦设置所有库,所有表的所有权限,赋值权限给所有ip地址的root用户
mysql > grant all privileges on *.* to root@'%' identified by 'password';
#创建用户
mysql > create user 'username'@'%' identified by 'password';
#刷新权限
flush privileges;
复制代码
  all privileges  除grant外的所有权限
            select          仅查权限
            select,insert   查和插入权限
            ...
            usage                   无访问权限
            alter                   使用alter table
            alter routine           使用alter procedure和drop procedure
            create                  使用create table
            create routine          使用create procedure
            create temporary tables 使用create temporary tables
            create user             使用create user、drop user、rename user和revoke  all privileges
            create view             使用create view
            delete                  使用delete
            drop                    使用drop table
            execute                 使用call和存储过程
            file                    使用select into outfile 和 load data infile
            grant option            使用grant 和 revoke
            index                   使用index
            insert                  使用insert
            lock tables             使用lock table
            process                 使用show full processlist
            select                  使用select
            show databases          使用show databases
            show view               使用show view
            update                  使用update
            reload                  使用flush
            shutdown                使用mysqladmin shutdown(关闭MySQL)
            super                   􏱂􏰈使用change master、kill、logs、purge、master和set global。还允许mysqladmin􏵗􏵘􏲊􏲋调试登陆
            replication client      服务器位置的访问
            replication slave       由复制从属使用

  

       对于目标数据库以及内部其他:
            数据库名.*           数据库中的所有
            数据库名.表          指定数据库中的某张表
            数据库名.存储过程     指定数据库中的存储过程
            *.*                所有数据库

  

            用户名@IP地址         用户只能在改IP下才能访问
            用户名@192.168.1.%   用户只能在改IP段下才能访问(通配符%表示任意)
            用户名@%             用户可以再任意IP下访问(默认IP地址为%)

  

     grant all privileges on db1.tb1 TO '用户名'@'IP'

            grant select on db1.* TO '用户名'@'IP'

            grant select,insert on *.* TO '用户名'@'IP'

            revoke select on db1.tb1 from '用户名'@'IP'

  

特殊的:

1
flush privileges,将数据读取到内存中,从而立即生效。

密码忘记——破解密码

 

跳过授权方式,直接登录!!

0.以管理员身份打开cmd

 

2.停掉mysql服务端

C:\WINDOWS\system32>net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。

3.执行如下命令跳过授权表

#跳过授权表
C:\WINDOWS\system32>mysqld --skip-grant-tables
2018-06-09 17:12:38 0 [Warning] Insecure configuration for --secure-file-priv: Current value does not restrict location of generated files. Consider setting it to a valid, non-empty path.
2018-06-09 17:12:38 0 [Note] mysqld (mysqld 5.6.40) starting as process 6052 ...4.

 4.再次查看

5. 现在可以任意的更改密码,执行如下命令

 update mysql.user set authentication_string =password('') where User='root'; 

 

6.刷新权限,执行命令

flush privileges;

7.退出mysql。执行命令:exit,

 

8.让用户去加载权限,以管理员身份进入cmd,查看当前mysql进程

1
tasklist |findstr mysql  #查看当前mysql的进程

 

9.杀死当前的进程,执行如下命令

taskkill /F /PID 6052  # 杀死当前的进程pid

10.再次执行如下操作,还原

 

统一字符编码

进入mysql客户端,执行\s

 

 

为了统一字符编码,请执行如下操作:

(1)my.ini文件是mysql的配置文件,

在C:\mysql-5.6.40-winx64文件下创建my.ini文件

(2)将如下代码拷贝保存。

复制代码

[mysqld]
# 设置mysql的安装目录 **后面的路径一定是安装sql的目录(自己电脑的)**
basedir=C:\mysql-5.7.22-winx64\mysql-5.7.22-winx64
# 设置mysql数据库的数据的存放目录,必须是data
datadir=C:\mysql-5.7.22-winx64\mysql-5.7.22-winx64\data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

# mysql端口
port=3306
# 字符集
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

复制代码

 

(3)以管理员身份重启服务,执行如下命令 

复制代码
C:\Windows\system32>net stop MySQL
MySQL 服务正在停止..
MySQL 服务已成功停止。

C:\Windows\system32>net start MySQL
MySQL 服务正在启动 .
MySQL 服务已经启动成功。
复制代码

(4)在cmd中输入mysql进入mysql环境,执行\s,显示如下信息,表示成功

 

posted @ 2019-05-21 21:16  蛇夫座  阅读(104)  评论(0)    收藏  举报