mysql用户管理

本文介绍了MySQL数据库的用户管理,包括如何添加用户、授权、权限列表及其表示方式,以及如何查看、修改和撤销用户权限。重点讲解了GRANT和REVOKE命令的使用,以及密码策略和案例演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念:(用户授权)

数据库管理员root登录数据库服务后,添加用户。

授权命令:

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的权

案例:

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

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

 grant   all 完全权限

on  *.*  所有库所有表

to  root@"%"  给root 

 identified by "123qqq...A"   密码指定"123qqq...A" 

with  grant option; 并有授权权限

可以使用admin用户在host50主机,连接本机的数据库服务

连接密码是123qqq...A  仅对 服务器上的所有表有查询权限。

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

查看用户

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)

修改的密码也要与当前数据库服务的密码策略匹配 ,

修改的密码要使用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 where user=”admin”;

案例:

在客户端host51  连接数据库服务器host50

命令格式 mysql  -h192.168.4.50 -u用户名  -p密码

在host51 主机使用host50授权的root用户连接host50数据库服务器

[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 的权限 所有什么命令都可以执行 ,可以把没有用的库全删除。)

撤销用户权限

命令格式如下

REVOKE 权限列表 ON 库名 FROM  用户名@"客户端地址";

注意 : 库名的表示方式 要和 用户授权时的表示方式一样 

案例:

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@"%";

删除用户

drop  user   用户名@"客户端地址";

案例:

 drop user  root@"%";
 drop user  admin@"localhost";

用户相关管理命令

[root@host51 ~]# mysql -uroot -pNSD2107...a     #管理员登录
mysql> grant select on  *.* to plj@"localhost" identified by "123qqq...A";  
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  #新密码登陆成功

重置 plj用户连接密码

[root@host51 ~]# mysql -uroot -pNSD2107...a  管理员root 用户登录
mysql> set password for  plj@"localhost"=password("123qqq...A"); 
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> 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库的使用

保存已有的授权用户及权限(全局权限    权限all   库名 *.*)

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

保存已有授权用户对数据库的访问权限

grant   all  on  gamedb.*  to  adminONE@"%" identified by "123qqq...A" ;
Select  host,user,db from mysql.db where db=”gamedb”;

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

grant   select,insert on  bbsdb.t1  to  adminTWO@"%" identified by "123qqq...A";
Select   host ,  user , db , table_name from  mysql.tables_priv where table_name=“t1” ;

保存已有授权用户对字段的访问权限

grant   select,update(name) on  bbsdb.t2  to  adminthr@"%" identified by "123qqq...A";
Select  host , user  , db  , table_name , Column_name  from mysql.columns_priv Where  table_name=”t2”;

附加知识:

通过查看表记录获取已有授权用户及访问权限修改表记录,修改授权用户的访问权限

查看当前数据库服务已有的用户 

select  host,user,authentication_string  from  mysql.user;

user字段存储用户名

host字段存储客户端地

authentication_string 字段存储连接密码(加密的密码)

mysql> grant all on *.*  to pljadmin@"%" 
    -> identified by "123qqq...A" with grant option;
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> update mysql.user set  Grant_priv="N" where user="pljadmin";  #修改表记录
mysql> flush privileges;   #是修改生效
Mysql>  select  *  from  mysql.user  where user=”pljadmin” \G
...........
Grant_priv: N
.........
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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值