用户授权

用户授权

在数据库服务器上添加新的链接用户

grant授权

·授权:添加用户并设置权限

·命令格式

- grant    权限列表   on   库名   to   用户名@”客户端地址”
  identified by“密码”  //授权用户密码
  with grant option;  //有授权权限,可选项,不想让其他用户有grant权限,就不使用此行

mysql>grant   all   on  db4.*  to     yaya@"%"
      identified by "123qqq...A” ;

·权限列表

- all     //所有权限

- usage    //无权限

- select , update, insert    //个别权限

- select, update (字段1,... ..,字段N)  //指定字段·库名

_*.*              /所有库所有表

-库名 .*                       //一个库

-库名.表名           //一张表

·用户名

-授权时自定义要有标识性

-存储在mysql库的user表里

·客户端地址

- %              //所有主机

-192.168.4.%                 //网段内的所有主机-

-192.168.4.1                  / /1台主机

-localhost      //数据库服务器本机

 

应用示例


一添加用户mydba,对所有库、表有完全权限

–允许从任何客户端连接,密码123qqq...A

-且有授权权限

mysql> grant  all   on  *.*   to     mydba@"%“
    identified  by  "123qqq...A"   with grant option ;


-添加admin用户,允许从192.168.4.0/24网段连接,对db3库的user表有查询权限,密码123qqq.….A

mysq> grant  select  on  db3.user to
        admin@"192.168.4.%"

            identified by "123qqq...A";

-添加admin2用户,允许从本机连接,允许对db3库的所有表有查询/更新/插入/删除记录权限,密码
123qqq…..A

mysql> grant    select,insert,update,delete   on   db3.*to
                admin2@"localhost"

                     identified by "123qqq.….A";


相关命令

·登录用户使用

 

 客户端:

服务端:

 客户端:

 

 服务端

 

 

 客户端:

 

服务端:

 

 客户端:

  删除用户::把新添加的用户删除

服务端

  

 

授权库:mysql库 保存新添加的用户信息和权限信息

mysql库记录授权信息,主要表如下︰

-user        表记录已有的授权用户及权限

- db表           记录已有授权用户对数据库的访问权限

- tables_priv表    记录已有授权用户对表的访问权限

- columns priv    表记录已有授权用户对字段的访问权限

查看表记录可以获取用户权限;也可以通过更新记录,修改用户权限

 

admin@"192.168.148.%"
-> identified by "123qqq...A";
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> grant select,insert,update,delete on db3.* to
-> admin2@"localhost"
-> identified by "123qqq...A";
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> grant all on *.* to mydba@"%"
-> identified by "123qqq...A";
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> grant all on db4.* to yaya@"%"
-> identified by "123qqq...A";
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | NO | | mysql_native_password | |
| authentication_string | text | YES | | NULL | |
| password_expired | enum('N','Y') | NO | | N | |
| password_last_changed | timestamp | YES | | NULL | |
| password_lifetime | smallint(5) unsigned | YES | | NULL | |
| account_locked | enum('N','Y') | NO | | N | |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)
mysql>  select host,user  from mysql.user;
+---------------+-----------+
| host | f |
+---------------+-----------+
| % | mydba |
| % | yaya |
| 192.168.148.% | admin |
| localhost | admin2 |
| localhost | mysql.sys |
| localhost | root |
+---------------+-----------+
6 rows in set (0.00 sec)
mysql> show grants for mydba@"%";
+--------------------------------------------+
| Grants for mydba@% |
+--------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'mydba'@'%' |
+--------------------------------------------+
1 row in set (0.00 sec)
mysql> select * from mysql.user where host="%" and user="mydba"\G;
*************************** 1. row ***************************
Host: % //所有主机
User: mydba //用户名
Select_priv: Y //有查询权限
Insert_priv: Y //插入权限
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: N
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
Create_tablespace_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: *F19C699342FA5C91EBCF8E0182FB71470EB2AF30
password_expired: N
password_last_changed: 2022-02-20 20:45:21
password_lifetime: NULL
account_locked: N
1 row in set (0.01 sec)

ERROR:
No query specified

mysql> select * from mysql.user where host="192.168.148.%" and user="admin"\G;
*************************** 1. row ***************************
Host: 192.168.148.% //148网段
User: admin //用户
Select_priv: N //无权限
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
Create_tablespace_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: *F19C699342FA5C91EBCF8E0182FB71470EB2AF30
password_expired: N
password_last_changed: 2022-02-20 20:47:01
password_lifetime: NULL
account_locked: N
1 row in set (0.00 sec)

mysql> desc mysql.tables_priv \G;
*************************** 1. row ***************************
Field: Host
Type: char(60)
Null: NO
Key: PRI
Default:
Extra:
*************************** 2. row ***************************
Field: Db
Type: char(64)
Null: NO
Key: PRI
Default:
Extra:
*************************** 3. row ***************************
Field: User
Type: char(32)
Null: NO
Key: PRI
Default:
Extra:
*************************** 4. row ***************************
Field: Table_name
Type: char(64)
Null: NO
Key: PRI
Default:
Extra:
*************************** 5. row ***************************
Field: Grantor
Type: char(93)
Null: NO
Key: MUL
Default:
Extra:
*************************** 6. row ***************************
Field: Timestamp
Type: timestamp
Null: NO
Key:
Default: CURRENT_TIMESTAMP
Extra: on update CURRENT_TIMESTAMP
*************************** 7. row ***************************
Field: Table_priv
Type: set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger')
Null: NO
Key:
Default:
Extra:
*************************** 8. row ***************************
Field: Column_priv
Type: set('Select','Insert','Update','References')
Null: NO
Key:
Default:
Extra:
8 rows in set (0.00 sec)
mysql> select * from mysql.tables_priv;
+---------------+-----+-----------+------------+----------------+---------------------+------------+-------------+
| Host | Db | User | Table_name | Grantor | Timestamp | Table_priv | Column_priv |
+---------------+-----+-----------+------------+----------------+---------------------+------------+-------------+
| localhost | sys | mysql.sys | sys_config | root@localhost | 2022-02-13 15:09:29 | Select | |
| 192.168.148.% | db3 | admin | user | root@localhost | 0000-00-00 00:00:00 | Select | |
+---------------+-----+-----------+------------+----------------+---------------------+------------+-------------+
2 rows in set (0.00 sec)


mysql> select host,db,user,table_name from mysql.tables_priv;
+---------------+-----+-----------+------------+
| host | db | user | table_name |
+---------------+-----+-----------+------------+
| 192.168.148.% | db3 | admin | user |
| localhost | sys | mysql.sys | sys_config |
+---------------+-----+-----------+------------+
2 rows in set (0.00 sec)

mysql> select * from mysql.tables_priv where user="admin"\G;
*************************** 1. row ***************************
Host: 192.168.148.% //访问的148网段计算机
Db: db3 //库名
User: admin //用户
Table_name: user //表名
Grantor: root@localhost
Timestamp: 0000-00-00 00:00:00
Table_priv: Select //只有查询权限
Column_priv:
1 row in set (0.00 sec)

ERROR:
No query specified

mysql> show grants for admin@"192.168.148.%";
+---------------------------------------------------------+
| Grants for admin@192.168.148.% |
+---------------------------------------------------------+
| GRANT USAGE ON *.* TO 'admin'@'192.168.148.%' |
| GRANT SELECT ON `db3`.`user` TO 'admin'@'192.168.148.%' |
+---------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> desc mysql.tables_priv \G;
*************************** 1. row ***************************
Field: Host
Type: char(60)
Null: NO
Key: PRI
Default:
Extra:
*************************** 2. row ***************************
Field: Db
Type: char(64)
Null: NO
Key: PRI
Default:
Extra:
*************************** 3. row ***************************
Field: User
Type: char(32)
Null: NO
Key: PRI
Default:
Extra:
*************************** 4. row ***************************
Field: Table_name
Type: char(64)
Null: NO
Key: PRI
Default:
Extra:
*************************** 5. row ***************************
Field: Grantor
Type: char(93)
Null: NO
Key: MUL
Default:
Extra:
*************************** 6. row ***************************
Field: Timestamp
Type: timestamp
Null: NO
Key:
Default: CURRENT_TIMESTAMP
Extra: on update CURRENT_TIMESTAMP
*************************** 7. row ***************************
Field: Table_priv //字段名
Type: set('Select','Insert','Update','Delete','Create','Drop','Grant','References',
'Index','Alter','Create View','Show view','Trigger')
//可以设置权限类型
Null: NO
Key:
Default:
Extra:
*************************** 8. row ***************************
Field: Column_priv
Type: set('Select','Insert','Update','References')
Null: NO
Key:
Default:
Extra:
8 rows in set (0.00 sec)
mysql> update mysql.tables_priv set table_priv="select,update,drop,insert"
where user="admin";
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)

mysql> show grants for admin@"192.168.148.%";
+-------------------------------------------------------------------------------+
| Grants for admin@192.168.148.% |
+-------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'admin'@'192.168.148.%' |
| GRANT SELECT, INSERT, UPDATE, DROP ON `db3`.`user` TO 'admin'@'192.168.148.%' |
+-------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> select * from mysql.tables_priv \G;
*************************** 1. row ***************************
Host: localhost
Db: sys
User: mysql.sys
Table_name: sys_config
Grantor: root@localhost
Timestamp: 2022-02-13 15:09:29
Table_priv: Select
Column_priv:
*************************** 2. row ***************************
Host: 192.168.148.%
Db: db3
User: admin
Table_name: user
Grantor: root@localhost
Timestamp: 2022-02-20 21:28:46
Table_priv: Select,Insert,Update,Drop
Column_priv:
2 rows in set (0.00 sec)

ERROR:
No query specified

撤销权限:删除添加的用户对数据的访问权限

·命令格式
mysql> revoke  权限列表    on    库名.表     from
        用户名@"客户端地址";

mysql> select host,user from mysql.user;
+---------------+-----------+
| host | user |
+---------------+-----------+
| % | mydba |
| % | yaya |
| 192.168.148.% | admin |
| localhost | admin2 |
| localhost | mysql.sys |
| localhost | root |
+---------------+-----------+
6 rows in set (0.01 sec)

mysql> show grants for admin2@"localhost";
+-------------------------------------------------------------------------+
| Grants for admin2@localhost |
+-------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'admin2'@'localhost' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `db3`.* TO 'admin2'@'localhost' |
+-------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> revoke update,delete on db3.* from admin2@"localhost";
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for admin2@"localhost";
+---------------------------------------------------------+
| Grants for admin2@localhost |
+---------------------------------------------------------+
| GRANT USAGE ON *.* TO 'admin2'@'localhost' |
| GRANT SELECT, INSERT ON `db3`.* TO 'admin2'@'localhost' |
+---------------------------------------------------------+
2 rows in set (0.00 sec)

 案例:用户授权

1.1 问题

  • 允许192.168.4.0/24网段主机使用root连接数据库服务器,对所有库和所有表有完全权限、密码为123qqq…A 。
  • 添加用户dba007,对所有库和所有表有完全权限、且有授权权限,密码为123qqq…A 客户端为网络中的所有主机。
  • 撤销root从本机访问权限,然后恢复。
  • 允许任意主机使用webuser用户连接数据库服务器,仅对webdb库有完全权限,密码为123qqq…A 。
  • 撤销webuser的权限,使其仅有查询记录权限。

1.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:用户授权

1)允许root从192.168.4.0/24访问,对所有库表有完全权限,密码为123qqq…A

授权之前,从192.168.4.0/24网段的客户机访问时,将会被拒绝:

[root@host120 ~]# mysql -u root -p -h 192.168.4.10
Enter password:  								//输入正确的密码
ERROR 2003 (HY000): Host '192.168.4.120' is not allowed to connect to this MySQL server

授权操作,此处可设置与从localhost访问时不同的密码:

mysql> GRANT all ON *.* TO root@'192.168.4.%' IDENTIFIED BY '123qqq…A';
Query OK, 0 rows affected (0.00 sec)

再次从192.168.4.0/24网段的客户机访问时,输入正确的密码后可登入:

[root@host120 ~]# mysql -u root -p -h 192.168.4.10
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 5.7.17 MySQL Community Server (GPL)

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

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

从网络登入后,测试新建一个库、查看所有库:

mysql> CREATE DATABASE rootdb;  				//创建新库rootdb
Query OK, 1 row affected (0.06 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| home               |
| mysql              |
| performance_schema |
| rootdb             |                         //新建的rootdb库
| sys                |
| userdb             |
+--------------------+
7 rows in set (0.01 sec)

退出,再重新以root登入,测试一下看看,权限又恢复了吧:

mysql> exit  									//退出当前MySQL连接
Bye
[root@dbsvr1 ~]# mysql -u root -p 				//重新以root登入
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 25
Server version: 5.7.17 MySQL Community Server (GPL)

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

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE newdb2014;  				//成功创建新库
Query OK, 1 row affected (0.00 sec)

4)允许webuser从任意客户机登录,只对webdb库有完全权限,密码为 123qqq…A

添加授权:

mysql> GRANT all ON webdb.* TO webuser@'%' IDENTIFIED BY '888888';
Query OK, 0 rows affected (0.00 sec)

查看授权结果:

mysql> SHOW GRANTS FOR webuser@'%';
+----------------------------------------------------+
| Grants for webuser@%                               |
+----------------------------------------------------+
| GRANT USAGE ON *.* TO 'webuser'@'%'                |
| GRANT ALL PRIVILEGES ON `webdb`.* TO 'webuser'@'%' |
+----------------------------------------------------+
2 rows in set (0.00 sec)

5)撤销webuser的完全权限,改为查询权限

撤销所有权限:

mysql> REVOKE all ON webdb.* FROM webuser@'%';
Query OK, 0 rows affected (0.00 sec)

只赋予查询权限:

mysql> GRANT select ON webdb.* TO webuser@'%';
Query OK, 0 rows affected (0.00 sec)

确认授权更改结果:

mysql> SHOW GRANTS FOR webuser@'%';
+--------------------------------------------+
| Grants for webuser@%                       |
+--------------------------------------------+
| GRANT USAGE ON *.* TO 'webuser'@'%'        |
| GRANT SELECT ON `webdb`.* TO 'webuser'@'%' |
+--------------------------------------------+
2 rows in set (0.00 sec)

 

1 简述用户授权命令的语法格式。

参考答案

GRANT  权限列表  ON  库名.表名  TO  用户名@'客户端地址'   [ IDENTIFIED BY '密码' ]  [ WITH GRANT OPTION ];

 

2 数据库授权综合练习,按题目要求写出对应的授权命令。

1、查看当前数据库服务器有哪些授权用户?

2、授权管理员用户可以在网络中的任意主机登录,对所有库和表有完全权限且有授权的权限登陆密码123456

3、授权webadmin用户可以从网络中的所有主机登录,对bbsdb库拥有完全权限,且有授权权限,登录密码为 123456

4、不允许数据库管理员在数据库服务器本机登录。

参考答案

1.select user from mysql.user;
2.grant all on *.*  to  root@“%” identified  by “123456” with grant option;
3.grant all  on  bbsdb.*  to   webadmin@“%” identified  by “123456” with grant option; grant insert  on  mysql.user to  webadmin@“%”;
4.delete from mysql.user where host in (“::1”,”127.0.0.1”,”localhost”,”stu.tedu.cn”) and user=”host”;flush privileges;

3 简述撤销用户授权命令的语法格式。

参考答案

revoke   权限revoke  权限列表  on  数据库名  from  用户名@”客户端地址”;

无法撤销用户的授权
报错1 : ERROR 1147 (42000)
报错2 : no such grant defined for user
mysql> revoke select on webdb.a from
'webadmin'@'172.40.51.106;
ERROR 1147 (42000): There is no such grant defined for user
'webadmin' on host '172 . 40.51.106' on table 'a'

原因分析

授权用户对目标没有权限

只有给用户对目标库做过授权才可以撤销权限
解决办法
查看用户的授权信息,看用户是否对库有权限
[root@dbsvr1 ~]# mysql -uroot -p123
mysq|> show   
grants for 'webadmin'@'172.40.51.106';

posted @ 2022-02-20 21:49  东山有耳  阅读(341)  评论(0)    收藏  举报