mysql用户管理与权限管理

一、用户管理

创建用户,修改用户,删除用户,只是root用户的权限

1.1 用户客户端的登录与退出

语法:mysql -h hostname -p port -u username -p dbname -e

  -h hostname:指定要连接MySQL的主机名或者ip  hostname就是具体的主机名或者ip的值
  -P port :指定要连接MySQL的端口  默认的端3306
  -u username:连接数据库的用户名
  -p :提示连接时候要输入的密码
  dbname:指定登录要连接的数据库名,该参数可以不指定,登录以后使用use 来选择
  -e:指定要执行的Sql语句  例如select语句

例如:使用dos窗口使用root命令登录test4数据库

mysql -h 127.0.0.1  -u root -p test4

例如:登录时候直接指定密码

mysql -h127.0.0.1 -uroot -proot test4

例如:在dos窗口,使用root登录 test4库,执行 select * from dept;

 mysql -h127.0.0.1 -uroot -proot test4  -e "select * from dept"

2.Mysql的退出

  使用quit 或者exit可以退出

1.2 创建用户

用户账号组成:

'USERNAME'@'HOST'
 @'HOST': 主机名:
  user1@'%',表示用户可以从哪个网段上远程登录过来

 通配符: %  或 _
 示例:wang@172.16.%.%  
     user2@'192.168.1.%'
     tom@'10.0.0.0/255.255.0.0'

语法:create user '用户名'@'ip地址' identified by '密码' [,'用户名'@'ip地址' identified by '密码'].....
例如:创建test01用户,密码也是test01,只能在本地登录

create user 'test01'@'localhost' identified by 'test01'

mysql> flush privileges; # 刷新权限
Query OK, 0 rows affected (0.00 sec)

# 查看用户
mysql> select user,host from mysql.user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| tom           | %         |
| root          | 127.0.0.1 |
| root          | ::1       |
|               | localhost |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
| test01        | localhost |
+---------------+-----------+

查看用户在 mysql.users表中

select * from mysql.user;

使用test01用户登录mysql

1.3 修改用户

RENAME USER old_user_name TO new_user_name

1.4 删除用户

a.drop user '用户名'@'ip地址';
例如删除test01用户

 drop  user 'test01'@'localhost'

b.删除mysql.user表中的数据 使用delete
语法 delete from mysql.user where user='' and host=''
例如:删除test3 用户

delete from mysql.user where user='test3' and host='localhost'

1.4 修改密码

注意:
新版mysql中用户密码可以保存在mysql.user表的authentication_string字段中
如果mysql.user表的authentication_string和password字段都保存密码,authentication_string优先生效
  1. root用户修改自己的密码
    (1) 使用mysqladmin 命令修改
    语法 mysqladmin -u username -p password "新密码"
    例如:将root用户的密码修改为123

    [root@zabbix-db ~]# mysqladmin -uroot -p password '123'
    Enter password:
    

    (2) 使用set修改自己的密码
    首先root用户登录,使用set修改自己的密码
    语法:set password="新密码"
    例如:将root用户的密码修改为"root"

    set password="root";
    
  2. root用户修改普通用户的密码
    (1) 使用set修改普通用户的密码
    语法:set password for 'username'@'hostname'='新密码'

    1.创建用户
    create user 'test02'@'localhost' identified by 'test02'
    
    2.查询用户
    select * from mysql.user;
    
    3.修改用户密码
    set password for 'test02'@'localhost'='123'
    
    4.使用新密码登录
    mysql -h127.0.0.1 -utest02 -p123
    

    (2)alter user 修改密码
    语法:alter user 'username'@'hostname' identified by '新密码'
    例如:将test02用户的密码修改为’test02’

    alter user 'test02'@'localhost' identified by 'test02'
    
    使用新密码登录
    mysql -h127.0.0.1 -utest02 -ptest02
    
  3. 普通用户可以修改自己的密码
    语法:set password='新密码'
    例如:创建一个用户test03 密码也是test03

    create user 'test03'@'localhost' identified by 'test03'
    使用test03登录
    mysql -h127.0.0.1 -utest03 -ptest03
    修改自己的密码为123
    set password='123'
    使用新密码登录
    mysql -h127.0.0.1 -utest03 -p123 
    

二、权限管理

权限类别

权限类别:
	管理类
	程序类
	数据库级别
	表级别
	字段级别
管理类:
	CREATE USER
	FILE
	SUPER
	SHOW DATABASES
	RELOAD
	SHUTDOWN
	REPLICATION SLAVE
	REPLICATION CLIENT
	LOCK TABLES
	PROCESS
	CREATE TEMPORARY TABLES
程序类:针对 FUNCTION、PROCEDURE、TRIGGER
	CREATE
	ALTER
	DROP
	EXCUTE
库和表级别:针对 DATABASE、TABLE
	ALTER
	CREATE
	CREATE VIEW
	DROP INDEX
	SHOW VIEW
	WITH GRANT OPTION:能将自己获得的权限转赠给其他用户
数据操作
	SELECT
	INSERT
	DELETE
	UPDATE
	字段级别
	SELECT(col1,col2,...)
	UPDATE(col1,col2,...)
	INSERT(col1,col2,...)
	所有权限
	ALL PRIVILEGES 或 ALL

2.1 查看权限

语法:show grants for 'username'@'hostname'
例如:查看root用户的权限

show grants for 'root'@'localhost'

2.授予权限
语法:

 grant 权限类型1,权限类型1.... on  数据库名.表
      to  'username'@'hostname' [,'username'@'hostname']
     [with grant option] #表示可以把自己的权限传递给其他人

注:所有库中所有表  *.*

复杂版:

GRANT priv_type [(column_list)],... ON [object_type] priv_level TO 'user'@'host' 
[IDENTIFIED BY 'password'] [WITH GRANT OPTION];
priv_type: ALL [PRIVILEGES]
object_type:TABLE | FUNCTION | PROCEDURE
priv_level:  *(所有库)  |*.*   | db_name.*  | db_name.tbl_name  | tbl_name(当前库的
表)  | db_name.routine_name(指定库的函数,存储过程,触发器)
with_option: GRANT OPTION
  | MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count

授权X用户在X网段对mydb库,mydbl表第一列有查权限,对第一列第二列有插入权限
GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost';

# 授权wordpress用户从10.0.0.*网段登录,对wordpress库所有表,有所有权限
GRANT ALL ON wordpress.* TO wordpress@'10.0.0.%' ;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.0.%'  WITH GRANT OPTION;

#创建用户和授权同时执行的方式在MySQL8.0取消了
GRANT ALL ON wordpress.* TO wordpress@'192.168.8.%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.8.%' IDENTIFIED BY '123456'
WITH GRANT OPTION;

例如:新创建test04 用户 密码test04

create user 'test04'@'localhost' identified by 'test04'

授予  所有库下所有表的查询  删除权限
grant select ,delete on *.* to 'test04'@'localhost' with grant option

查看test04的权限
show grants for 'test04'@'localhost'


Help SHOW GRANTS
SHOW GRANTS FOR 'user'@'host'; 
SHOW GRANTS FOR CURRENT_USER[()]; # 查看当前用户的权限

3.收回权限

revoke  权限类型1,权限类型2.... on 库名.表名
 from 'username'@hostname'' [,'username'@hostname'']...

例如:收回test04的delete权限

revoke delete on *.* from 'test04'@'localhost'

三、管理员密码破解

忘记管理员密码的解决办法:

  1. 启动mysqld进程时,为其使用如下选项:
--skip-grant-tables 
--skip-networking
  1. 使用UPDATE命令修改管理员密码
  2. 关闭mysqld进程,移除上述两个选项,重启mysqld

范例:Mariadb 和MySQL5.6版之前破解root密码

[root@centos8 ~]#vim /etc/my.cnf
[mysqld]
skip-grant-tables  
skip-networking  
[root@centos8 ~]#systemctl restart mysqld|mariadb
[root@centos8 ~]#mysql
#方法1
#mariadb 旧版和MySQL5.6版之前
MariaDB [(none)]> update mysql.user set password=password('ubuntu') where 
user='root';
#mariadb 新版
MariaDB [(none)]> update mysql.user set authentication_string=password('ubuntu') 
where user='root';
#方法2
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> alter user root@'localhost' identified by 'ubuntu';

MySQL5.7和8.0 破解root密码

[root@centos8 ~]#vim /etc/my.cnf
[mysqld]
skip-grant-tables  
skip-networking  #MySQL8.0不需要
[root@centos8 ~]#systemctl restart mysqld
#方法1
mysql> update mysql.user set authentication_string='' where user='root' and
host='localhost'; 
#方法2
mysql> flush privileges;
#再执行下面任意一个命令
mysql> alter user root@'localhost' identified by 'ubuntu';
mysql> set password for root@'localhost'='ubuntu';
[root@centos8 ~]#vim /etc/my.cnf


# 再次启动前,将其注释掉
[mysqld]
#skip-grant-tables                                                               
         
#skip-networking
[root@centos8 ~]#systemctl restart mysqld
[root@centos8 ~]#mysql -uroot -pubuntu

删库跑路

#此方法适用于包安装方式的MySQL或Mariadb
[root@centos8 ~]#systemctl stop mysqld
[root@centos8 ~]#rm -rf /var/lib/mysql/*
[root@centos8 ~]#systemctl start mysqld
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值