Mysql---用户管理

mysql用户管理: 

 1  用户授权
            1.1  什么是用户授权: 数据库管理员root用户连接数据库服务后,添加普通用户、设置用户权限和 用户密码
            1.2  为什么要学习用户授权: 默认情况,只允许数据管理员root 在本机访问数据服务。
                    默认不允许其他客户端访问服务  也不能使用其他用户在本机连接数据库服务
            
            1.3  用户授权命令格式
GRANT 权限列表 ON 库名 TO 用户名@"客户端地址"   IDENTIFIED  BY  “密码”    WITH GRANT OPTION;

权限列表  : 就是添加的用户对指定的库名具有的访问权限表示方式(就是学过的sql命令)
ALL                       表示所有权限  (表示所有命令)
USAGE            表示无权限  (除了查看之外啥权限都没有 , 看的命令show    desc )
SELECT,UPDATE,INSERT          表示只有个别权限
SELECT, UPDATE (字段1,字段N)   表示权限仅对指定字段有访问权限


库名  :添加的使用户对服务器上的那些库有访问权限 可以表示的方式有:
*.*          表示 所有库所有表   第1个表示所有库名  第2个 表示所有表名
库名.*       表示一个库下的所有表   例如 tarena.*
库名.表名      表是一张表   例如  tarena.user


用户名: 添加用户时自定义即可,  存储在mysql库下user 表的user字段下  

客户端地址:     表示网络中的那些主机可以使用添加的用户连接数据库服务表示的方式有:
%                        表示网络中的所有主机
192.168.4.%         表示 192.168.4网段内的所有主机
192.168.4.1          表示仅仅是192.168.4.1   一台主机
localhost          表示数据库服务器本机

密码  : 添加的用户连接数据服务时使用的密码 ,要符合数据库服务的密码策略
WITH GRANT OPTION :  让添加的用户也可以使用grant命令再添加用户,但用户本身要对mysql库有insert的权限
            
    2 权限撤销 : 删除已有授权用户的权限  命令格式如下
REVOKE 权限列表 ON 库名 FROM  用户名@"客户端地址";
                                 
 注意 : 库名的表示方式 要和 用户授权时的表示方式一样
 
    3 删除添加的用户
    drop  user   用户名@"客户端地址";

 

 

 练习如下:(host50 做数据库服务器   host51 做客户端验证用户授权)
  诉求:

允许网络中的所有主机都可以使用数据服务器host50的数据管理员root用户连接 50 数据库服务  连接密码123qqq...A   对所有库表有完全权限 且有授权权限


  可以使用admin用户在host50主机,连接本机的数据库服务
连接密码是123qqq...A  仅对 服务器上的所有表有查询权限。

 

 

 

[root@host50 ~]# mysql -hlocalhost -uroot -p654321

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

mysql> grant select on *.* to admin@"localhost" identified by  "123qqq...A";


查看用户  select  user , host from mysql.user;
mysql> select  user , host from mysql.user;
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| root      | %         |
| admin     | localhost |
| mysql.sys | localhost |
| root      | localhost |
+-----------+-----------+
4 rows in set (0.00 sec)


查看一样用户的访问权限
mysql> show grants for  root@"%";
+-------------------------------------------------------------+
| Grants for root@%                                           |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show grants for  admin@"localhost" ;
+--------------------------------------------+
| Grants for admin@localhost                 |
+--------------------------------------------+
| GRANT SELECT ON *.* TO 'admin'@'localhost' |
+--------------------------------------------+
1 row in set (0.00 sec)




给已有追加权限(库名 用户名 客户端地址都不变就是追加权限)

	给admin用户追加插入记录的权限
mysql> grant insert on  *.* to admin@"localhost" ;


mysql> show grants for  admin@"localhost" ; 再次查看
+----------------------------------------------------+
| Grants for admin@localhost                         |
+----------------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'admin'@'localhost' |
+----------------------------------------------------+
1 row in set (0.00 sec)

mysql> 

修改已有授权用户的连接密码(修改的密码也要与当前数据库服务的密码策略匹配 ,修改的密码要使用password() 函数加密 , 密码存储在 mysql.user表的authentication_string字段下,存储的是加密后的密码)

mysql> set password for 用户名@"客户端地址"=password("新密码");

mysql> set password for admin@"localhost"=password("123abc");


mysql> select  user , host,authentication_string from mysql.user;




在客户端host51  使用host50 主机添加的用户连接数据库服务器host50
命令格式 mysql  -h192.168.4.50 -u用户名  -p密码

在51 主机   使用50 授权的root  用户连接 50 数据库服务器 
[root@host51 ~]# mysql -h192.168.4.50 -uroot -p123qqq...A
mysql> select @@hostname;  查看连接服务器的主机名
+------------+
| @@hostname |
+------------+
| host50     |
+------------+
1 row in set (0.01 sec)

mysql> select user(); 查看连接用户名和客户端地址
+-------------------+ 
| user()            |
+-------------------+
| root@192.168.4.51 |
+-------------------+
1 row in set (0.00 sec)

mysql> show grants; 显示访问权限 
+-------------------------------------------------------------+
| Grants for root@%                                           |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 测试用户权限 (因为拥有的是all 的权限 所有什么命令都可以执行 ,可以把没有用的库全删除。)

 撤销权限:

 

 

 在50 主机撤销网络中所有主机使用root连接的权限
	#只撤销 with grant option的权限。
        mysql> revoke grant option on  *.* from root@"%";

        #只撤销用户删除记录的权限
	mysql> revoke delete on  *.* from root@"%";


        #查看当前已有的权限
         mysql> show grants for root@"%";

	#删除用户当前所有的权限
	mysql> revoke all on  *.* from root@"%";

	#查看当前已有的权限
         mysql> show grants for root@"%";

删除用户  drop user  用户名@"客户端地址";
	
	 
 	  例子: drop user  root@"%";
          例子: drop user  admin@"localhost";

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~与用户相关的命令
[root@host51 ~]# mysql -uroot -pNSD2107...a    host51 管理员登录
mysql> grant select on  *.* to plj@"localhost" identified by "123qqq...A";  授权用户 plj 
mysql> exit; 断开连接

[root@host51 ~]# mysql -uplj -p123qqq...A  使用plj 用户登录
mysql> set password=password("新密码");   用户登陆后修改自己的连接密码 (要复合密码策略要求)
mysql> select password("abc123...A"); 加密函数 password() 命令演示
+-------------------------------------------+
| password("abc123...A")                             |
+-------------------------------------------+
| *482907C0B13E321A83A84C2FBB881C5BD4377076 |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> set password=password("abc123...A");  plj用户修自己的连接密码
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> exit; 断开连接
Bye
[root@host51 ~]# mysql -uplj -p123qqq...A   旧密码登陆报错
[root@host51 ~]# mysql -uplj -pabc123...A  新密码登陆成功


数据库管理员可以重置授权用户的登陆密码
[root@host51 ~]# mysql -uroot -pNSD2107...a  管理员root 用户登录
mysql> SET PASSWORD   FOR  用户名@"客户端地址"=PASSWORD("密码");
mysql> set password for  plj@"localhost"=password("123qqq...A"); 重置 plj用户连接密码 
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> exit
[root@host51 ~]# mysql -uplj -p123qqq...A    使用修改后的密码登陆

给添加的用户改名
[root@host51 ~]# mysql -uroot -pNSD2107...a

mysql> grant select on  *.* to yaya@"%" identified by "123qqq...A";
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> select user , host from mysql.user;
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| yaya      | %         |
| mysql.sys | localhost |
| plj       | localhost |
| root      | localhost |
+-----------+-----------+
mysql> rename user yaya to  jingyaya ;  使用命令修改 但客户端地址必须是 %
Query OK, 0 rows affected (0.01 sec)

mysql> select user , host from mysql.user;
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| jingyaya  | %         |
| mysql.sys | localhost |
| plj           | localhost |
| root        | localhost |
+-----------+-----------+
4 rows in set (0.00 sec)
mysql> 
# 通过修改表记录改用户名
mysql> update mysql.user set user="panglijing" where user="plj" ;
mysql> flush privileges;
mysql> select user , host from mysql.user;
+------------+-----------+
| user       | host      |
+------------+-----------+
| jingyaya   | %         |
| mysql.sys  | localhost |
| panglijing | localhost |
| root       | localhost |
+------------+-----------+
4 rows in set (0.00 sec)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

用户权限的追加   : 在一样权限的基础上添加新权限。
[root@host51 ~]# mysql -uroot -pNSD2107...a
mysql> grant select on *.*  to bob@"%" identified by "123qqq...A";
mysql> show grants for  bob@"%";
+----------------------------------+
| Grants for bob@%                 |
+----------------------------------+
| GRANT SELECT ON *.* TO 'bob'@'%' |
+----------------------------------+

mysql> grant insert on  *.* to bob@"%";
mysql> show grants for  bob@"%";
+------------------------------------------+
| Grants for bob@%                                 |
+------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'bob'@'%' |
+------------------------------------------+
1 row in set (0.00 sec)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 授权库mysql库的使用:( 保存grant命令的执行结果。)
使用到了4张表 分别存储不同的授权信息
mysql> use   mysql;
mysql> show tables;
user表			          #记录已有的授权用户及权限 (全局权限    权限all   库名 *.*)
                            例如: grant   all  on  *.*   to  pljadmin@"%" identified by "123qqq...A" with  grant   option;

db表			          #记录已有授权用户对数据库的访问权限
                        例如: grant   all  on  gamedb.*  to  adminONE@"%" identified by "123qqq...A" ;

tables_priv表	      #记录已有授权用户对表的访问权限
create   database    bbsdb;
create  table   bbsdb.t1(name char(10) , age  int);
create  table   bbsdb.t2(name char(10) , id  int);
                        例如:grant   select,insert on  bbsdb.t1  to  adminTWO@"%" identified by "123qqq...A";

columns_priv表	  #记录已有授权用户对字段的访问权限
                    例如:grant   select,update(name) on  bbsdb.t2  to  adminthr@"%" identified by "123qqq...A";

可以通过查看表记录获取已有授权用户及访问权限 ;也可以修改表记录 修改授权用户的访问权限 。

user表的使用 
查看当前数据库服务已有的用户  
select  host,user,authentication_string  from  mysql.user;
user字段存储用户名
host字段存储客户端地址
authentication_string 字段存储连接密码(加密的密码)

mysql> select  host,user from  mysql.user;  查看表记录
mysql> select * from  mysql.user where user="pljadmin" \G  查看所有列
*************************** 1. row ***************************
                  Host: %
                  User: pljadmin
           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: Y
       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: 2021-11-09 16:31:07
     password_lifetime: NULL
        account_locked: N
1 row in set (0.00 sec)

mysql> 
mysql> update mysql.user set  Grant_priv="N" where user="pljadmin";  修改表记录
mysql> flush privileges;  是修改生效
mysql> show grants for pljadmin@"%"; 查看用户权限
+-----------------------------------------------+
| Grants for pljadmin@%                         |
+-----------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'pljadmin'@'%' |
+-----------------------------------------------+
1 row in set (0.00 sec)


mysql> select  * from  mysql.user where  user="pljadmin" \G   #查看表记录 
*************************** 1. row ***************************
                  Host: %
                  User: pljadmin
           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: 2021-11-09 16:31:07
     password_lifetime: NULL
        account_locked: N
1 row in set (0.00 sec)

mysql> 


db表的使用 
mysql> select host,user,db from  mysql.db;   #查看表记录 
+-----------+-----------+--------+
| host      | user      | db     |
+-----------+-----------+--------+
| %         | adminONE  | gamedb |
| localhost | mysql.sys | sys    |
+-----------+-----------+--------+
2 rows in set (0.00 sec)


mysql> select  * from  mysql.db where db="gamedb" \G  #查看表记录 
*************************** 1. row ***************************
                 Host: %
                   Db: gamedb
                 User: adminONE
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
           Grant_priv: N
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: Y
         Execute_priv: Y
           Event_priv: Y
         Trigger_priv: Y
1 row in set (0.00 sec)

mysql> update mysql.db set  delete_priv="N",update_priv="N" where user="adminONE";  修改满足条件字段的值
mysql> flush privileges;

mysql> select  * from  mysql.db where db="gamedb"  \G     #查看表记录 
*************************** 1. row ***************************
                 Host: %
                   Db: gamedb
                 User: adminONE
          Select_priv: Y
          Insert_priv: Y
          Update_priv: N
          Delete_priv: N



tables_priv表的使用 
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 | 2021-11-03 10:46:17 | Select        |             |
| %             | bbsdb | adminTWO  | t1         | root@localhost | 0000-00-00 00:00:00 | Select,Insert |             |
+-----------+-------+-----------+------------+----------------+---------------------+---------------+-------------+
2 rows in set (0.00 sec)

mysql> 

columns_priv表使用 
mysql> select  * from mysql.columns_priv;  #查看表记录 
+------+-------+----------+------------+-------------+---------------------+-------------+
| Host | Db    | User     | Table_name | Column_name | Timestamp           | Column_priv |
+------+-------+----------+------------+-------------+---------------------+-------------+
| %    | bbsdb | adminthr | t2         | name        | 0000-00-00 00:00:00 | Update      |
+------+-------+----------+------------+-------------+---------------------+-------------+
1 row in set (0.00 sec)

mysql> 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值