Mysql的用户授权和撤销权限_万金油_新浪博客

用户授权与权限撤销
三用户授权: 在数据库服务器上添加新的连接用户名,默认只有数据库管理员
root 用户在数据服务器本机登陆有授权权限,默认情况下管理员只能从数据库本机连接服务,在没有其他用户能够连接数据库服务器。

授权的命令格式:
grant 权限列表 on 数据库名  to 用户名 @“客户端地址”  identified by “密码” [with grant option];
 [with grant option] 可选 ,让添加的用户连接服务器后,也有授权权限。
 identified by “密码”新添加的用户连接数据库服务器时,使用密码

“客户端地址"作用
是网络中的那些主机可以使用新添加的用户指定连接数据库服务器
所有主机    %
网段  192.168.4.%
指定主机  192.168.4.51
本机   localhost
域名   %.tedu.cn——只要你的主机名以 tedu.cn 结尾的都可以连接
主机名  host51

用户名 : 客户端主机连接数据库服务器时使用的名字,授权时自定义既可定义要有标示性
数据库名: 新添加的连接用户,访问后可以操作的库,表示方式如下:
*.*  所有库,所有表
库名.*   库下所有的表
库名.表名     某张表

 权限列表:   新添加的连接用户,对可以操作的库访问权限,权限的表示方式如下:
  all  所有权限
某种权限  :权限 命令,权限命令  (insert , select, create, delete) 
(例如用户,库 ,表 ,字段)

授权库 mysql 库记录授权信息,使用不同的表记录不同的授权信息)
use  mysql;
 user ——记录已经添加的连接用户
db ——记录已经添加的连接用户对库的访问权限
tables_priv  ——记录已经添加的连接用户对表的访问权限
 columns_priv ——记录已经添加的连接用户对表中字段的访问权限
desc   columns_priv;
desc   tables_priv 
desc db;
desc user;

mysql> select * from  tables_priv;
mysql> select * from columms_priv;

mysql> grant select,insert on king.* to admin@"192.168.4.%" identified by "123456";
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
密码不符合密码规则
mysql> grant select,insert on king.* to admin@"192.168.4.%" identified by "123qqq...A";
Query OK, 0 rows affected, 1 warning (0.00 sec)
要想密码规则永久生效得修改配置文件

mysql> select user from mysql.user;——查看一下目前连接本机有那些授权用户
+-----------+
| user      |
+-----------+
| admin     | 这个是自动添加的
mysql.sys | 这两个是系统默认的
| root      |
+-----------+
3 rows in set (0.00 sec)

show  grants for 用户@“客户端:;    查看授权用户的访问权限

mysql> show grants for admin@"192.168.4.%";——sql命令查看用户权限
+----------------------------------------------------------+
| Grants for admin@192.168.4.%                             |
+----------------------------------------------------------+
| GRANT USAGE ON *.* TO 'admin'@'192.168.4.%'              |
| GRANT SELECT, INSERT ON `db3`.* TO 'admin'@'192.168.4.%' |
+----------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> show grants for root@"localhost";
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)

精准查看用户的授权信息:
mysql> select   * from user where user="root" and host="localhost"\G; —— 通过记录查看用户权限
************************** 1. row *************************** ——G是竖着显示
                  Host: localhost
                  User: root
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
      
授权例子:
在sql命令下授权  (
创建授权
mysql -uroot -p123456

mysql> grant select,insert on db3.* to admin@"192.168.4.%" identified by "123qqq...A";
Query OK, 0 rows affected, 1 warning (0.00 sec)
客户端的验证授权
[root@host51 ~]# which mysql ——检查客户端有没有检测命令
/usr/bin/mysql
[root@host51 ~]# rpm -qf /usr/bin/mysql
mysql-community-client-5.7.17-1.el7.x86_64
[root@host51 ~]# 

[root@room9pc01 ~]# which mysql——必须要有msql的程序
/usr/bin/which: no mysql in (/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin)
[root@room9pc01 ~]# yum -y install  mariadb

[root@host51 ~]# mysql  -h192.168.4.50 -uadmin -p123qqq...A ——连接数据库服务器的主机
[root@host52 ~]# mysql -h192.168.4.50 -uadmin -p123qqq...A

mysql> select @@hostname;——当前用户连接的数据库服务器的主机
+------------+
| @@hostname |
+------------+
| host50     |
+------------+
1 row in set (0.00 sec)

mysql> select user();——查看当前连接库的用户
+--------------------+
| user()             |
+--------------------+
| admin@192.168.4.52 |
+--------------------+
1 row in set (0.00 sec)

mysql> select user();——查看当前连接库的用户
+--------------------+
| user()             |
+--------------------+
| admin@192.168.4.51 |
+--------------------+
1 row in set (0.00 sec)

mysql> show databases;  ——查看已经授权的表
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db3                |
+--------------------+
2 rows in set (0.01 sec)
mysql> show grants; ——登陆的用户查看自己的权限
+----------------------------------------------------------+
| Grants for admin@192.168.4.%                             |
+----------------------------------------------------------+
| GRANT USAGE ON *.* TO 'admin'@'192.168.4.%'              |
| GRANT SELECT, INSERT ON `db3`.* TO 'admin'@'192.168.4.%' |
+----------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> drop database   information_schema;
ERROR 1044 (42000): Access denied for user 'admin'@'192.168.4.%' to database 'information_schema'

mysql> drop database  db3;
ERROR 1044 (42000): Access denied for user 'admin'@'192.168.4.%' to database 'db3'
授权例子2
在50服务器上授权主机52可以使用root用户连接本机,对所有库所有表有完全权限 并有有授权权限  登陆密码是123qqq...A
grant all on *.* to root@"192.168.4.52"identified by "123qqq...A" with grant option;

客户端52主机验证:
[root@host53 ~]# mysql -h192.168.4.50 -u root -p123qqq...A    ——53没有授权
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'192.168.4.53' (using password: YES)
访问被拒绝

[root@host52 ~]# mysql -h192.168.4.50 -u root -p123qqq...A——登陆授权主机
mysql> select user();    ——查看当前连接的主机
+-------------------+
| user()            |
+-------------------+
| root@192.168.4.52 |
+-------------------+
1 row in set (0.00 sec)

mysql> show grants;——查看权限 具有root的完全权限
+------------------------------------------------------------------------+
| Grants for root@192.168.4.52                                           |
+------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.4.52' WITH GRANT OPTION |
+------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> create database king3;——具有完全的root的权限
Query OK, 1 row affected (0.00 sec)
mysql> create table t1(name char(12), king varchar(3));
mysql> create table t1(name char(12), king varchar(3));
Query OK, 0 rows affected (0.16 sec)

mysql> drop table t1;
Query OK, 0 rows affected (0.09 sec)

mysql> drop database king3;
Query OK, 0 rows affected (0.00 sec)

具有root的完全权限就可以有root的所有的权限,就可以拥有创建库,创建表 删除表 删除库的权限

客户端授权,
52 客户端授权
mysql> grant select,update(name,uid) on db3.user to webuser@"%" identified by "123qqq...A";
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> quit
Bye
[root@host52 ~]# mysql -h192.168.4.50 -uwebuser -p123qqq...A

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db3                |
+--------------------+
2 rows in set (0.00 sec)

mysql> show grants;
+-------------------------------------------------------------------+
| Grants for webuser@%                                              |
+-------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'webuser'@'%'                               |
| GRANT SELECT, UPDATE (uid, name) ON `db3`.`user` TO 'webuser'@'%' |
+-------------------------------------------------------------------+


mysql> select name,age  from user where name=root;
ERROR 1054 (42S22): Unknown column 'root' in 'where clause'
mysql> select name,age  from user where id=13;
+--------+------+
| name   | age  |
+--------+------+
| nobody |   18 |
+--------+------+
1 row in set (0.00 sec)
mysql> select  * from mysql.db\G;
mysql> select * from mysql.tables_priv\G;
mysql> select * from mysql.columns_priv\G;

权限撤销权限:
revoke 权限 on 数据库名   from  用户名@“客户端地址”;
在50服务器上操作:
撤销52客户端的授权权限
mysql> select user,host from mysql.user;——查看授权用户
+-----------+--------------+
| user      | host         |
+-----------+--------------+
| webuser   | %            |
| admin     | 192.168.4.%  |
| root      | 192.168.4.52 |
| mysql.sys | localhost    |
| root      | localhost    |
+-----------+--------------+
5 rows in set (0.00 sec)

mysql> show grants for root@"192.168.4.52";——查看授权的用户给于的权限
+------------------------------------------------------------------------+
| Grants for root@192.168.4.52                                           |
+------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.4.52' WITH GRANT OPTION |
+------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> revoke grant option on *.* from root@"192.168.4.52";——撤销给用户授权的权限
Query OK, 0 rows affected (0.00 sec)

mysql> select * from mysql.user where user="root" and host="192.168.4.52"\G;——查看授权表的记录
.....
    Grant_priv: N
......

mysql> show grants for root@"192.168.4.52";——查看授权权限,授权权限不存在,但是root的所有权限仍然存在,任然可以进行删除 插入 修改等操作
+------------------------------------------------------+
| Grants for root@192.168.4.52                         |
+------------------------------------------------------+
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.4.52' |
+------------------------------------------------------+
1 row in set (0.00 sec)

撤销删除信息的权限:
修改表记录来进行修改:
这两个方法修改权限是一样的
1.mysql> update mysql.user set Delete_priv="N" where user="root" and host="192.168.4.52";
Query OK, 1 row affected (0.00 sec) ——修改表记录进行修改权限
Rows matched: 1  Changed: 1  Warnings: 0
mysql> flush  privileges;   ——刷新新的表记录
Query OK, 0 rows affected (0.00 sec)

2.mysql> select * from mysql.user where user="root" and host="192.168.4.52"\G;——查看授权表的记录
.....
    Grant_priv: N
......

mysql> show grants for root@"192.168.4.52";——客户端所有的权限列表
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@192.168.4.52                                        
                                                                                                     |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, 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 ON *.* TO 'root'@'192.168.4.52' |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
  *.*代表的是所有库,所有表

mysql> revoke insert on  db3.* from root@"192.168.4.52";
ERROR 1141 (42000): There is no such grant defined for user 'root' on host '192.168.4.52'
没有定义这样授权;db3是在权限以里,到是没有这样的操作。所以出现报错,但是可以撤销部分操作权限

mysql> revoke insert on *.* from root@"192.168.4.52"; ——删除写入的权限(删除部分操作权限)也可以通过修改mysql授权表的表记录进行修改操作权限
Query OK, 0 rows affected (0.00 sec)

mysql> revoke all  on *.* from root@"192.168.4.52";——删除所有的权限
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for root@"192.168.4.52";——展示权限列表 USAGE 代表没有权限
+---------------------------------------------+
| Grants for root@192.168.4.52                |
+---------------------------------------------+
| GRANT  USAGE ON *.* TO 'root'@'192.168.4.52' | —— USAGE  没有任何权限
+---------------------------------------------+
1 row in set (0.00 sec)

mysql> select user,host from mysql.user; ——还可登陆服务器,但是没有任何权限,要删除授权用户
+-----------+--------------+
| user      | host         |
+-----------+--------------+
| webuser   | %            |
| admin     | 192.168.4.%  |
| root      | 192.168.4.52 |
| mysql.sys | localhost    |
| root      | localhost    |
+-----------+--------------+
5 rows in set (0.00 sec)

删除连接授权用户:(删除已经添加的连接用户)
mysql> drop user root@"192.168.4.52";——删除连接用户(所有权限都没有)
Query OK, 0 rows affected (0.00 sec)

两种方法检测:是否删除成功
1.mysql> select user,host from mysql.user;——查看连接用户的列表
+-----------+-------------+
| user      | host        |
+-----------+-------------+
| webuser   | %           |
| admin     | 192.168.4.% |
| mysql.sys | localhost   |
| root      | localhost   |
+-----------+-------------+
4 rows in set (0.00 sec)

2.[root@host52 ~]# mysql -h192.168.4.50 -uroot -p123qqq...A;——再一次连接服务器,出现提示不能连接
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'192.168.4.52' (using password: YES)

连接用户的密码修改,(有两种方法)
——授权用户修改自己的登陆密码
mysql>set password=password(新密码);
[root@host52 ~]# mysql -h192.168.4.50 -uwebsuer -p123qqq...A——登陆陆进去修改才能修改密码
mysql> set  password=password("123ttt...A");——修改登陆密码
Query OK, 0 rows affected, 1 warning (0.00 sec)
[root@host52 ~]# mysql -h192.168.4.50 -uwebuser -p123ttt...A——用新密码从新登陆

授权库的管理员重新设置连接用户密码修改
mysql>  set password for webuser@ "%"=password("123qqq...A");
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> select User,Host from mysql.user;
+-----------+-------------+
| User      | Host        |
+-----------+-------------+
| webuser   | %           | ——  %    登陆路径
| admin     | 192.168.4.% |
| mysql.sys | localhost   |
| root      | localhost   |
+-----------+-------------+
4 rows in set (0.00 sec)



恢复管理员root本机登陆密码:
[root@host55 ~]# mysql -uroot -pjhhhh
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@host55 ~]#systemctl  stop mysqld
[root@host55 ~]#vim /etc/my.cnf
[mysqld]
skip_grant_tables——跳过授权表(跳过密码登陆)
:wq

必须关闭服务。因为之前不能跳过密码登陆
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| king               |
| mysql              |
| performance_schema |
+-------------------
mysql 叫做授权库 所有连接的用户
mysql> desc mysql.user;——是用来记录所有连键的用户名
| authentication_string  | text  存储密码字段
mysql> select host,user,authentication_string from mysql.user;
+-------------+-----------+-------------------------------------------+
| host        | user      | authentication_string                     |
+-------------+-----------+-------------------------------------------+
| localhost   | root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost   | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| 192.168.4.% | admin     | *F19C699342FA5C91EBCF8E0182FB71470EB2AF30 |
+-------------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)
修改红色部分密码字段就可以了。

更改密码
mysql> update mysql.user set authentication_string=password("123456")
    -> ;
Query OK, 2 rows affected, 1 warning (0.00 sec)
Rows matched: 3  Changed: 2  Warnings: 1

密码加密后的文件,是通过函数加密
mysql> select password("123456");
+-------------------------------------------+
| password("123456")                        |
+-------------------------------------------+
| *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> update mysql.user set authentication_string=password("123456") where user="root" and host="localhost";
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 1

mysql> flush privileges;——刷新权限的意思
Query OK, 0 rows affected (0.00 sec)

需要关闭mysql服务和注释配置文件:
systemctl stop mysqld
vim /etc/my.cnf
#skip_grant_tables
:wq
systemctl start mysqld

从新登陆mysql服务
mysql -u root -p123456

总结:
grant
revoke
drop user 用户@“客户端地址”;
show grants for 用户@“客户端地址”;
授权信息:记录在授权库mysql里  user db tables_priv  columns_priv 





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维螺丝钉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值