自学内容网 自学内容网

MySQL的用户管理

1.MySQL 的权限语法

如果只使用 root 用户,就存在安全隐患,这点在 Linux 系统本身就体现出来了,MySQL 也有类似的问题,因此也有自己的账户管理。

我们前面铺垫过一个事情,MySQL 本质是在管理一些表的相关文件,文件在 Linux 中怎么区分用户?那不就是调用 Linux 本身的文件权限等接口么?

# MySQL 的用户表
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
31 rows in set (0.00 sec)

mysql> select * from user\G
*************************** 1. row ***************************
                  Host: localhost # 只允许本地连接的意思
                  User: root
           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: ...... # 用户对应的密码
      password_expired: Y
 password_last_changed: 2023-10-01 17:12:19
     password_lifetime: NULL
        account_locked: N
# ...

MySQL 的用户本身也是以一个表的形式来管理的,而创建用户实际上就是插入用户的名字、权限、密码插入到 user 中(最简单粗暴的做法也是这样的,但是一般没必要)。

之后要提到的相关命令,往深处也是对 user 表做增删查改。

# MySQL 用户语法
# (1)重新加载授权表
FLUSH PRIVILEGES;
# (2)创建用户
CREATE USER 'user_name'@'登录主机/ip' IDENTIFIED BY 'password'; # 如果是 Windows 是不行的,Windows 的是私有 IP,设置为具体 IP 是没有意义的,因此有些时候会使用 %,但是一般也不使用 %
# (3)删除用户
DROP USER 'user_name'@'登录主机/ip';
# (4)修改用户的密码
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
UPDATE USER SET authentication_string=password('new_password') where user='user_name'; 
SET password=password('new_password'); # 只设置当前用户密码
SET PASSWORD for 'user_name'@'主机名'=password('new_password');
# (5)查看当前用户
SELECT USER();

补充:MySQL 对密码的管理是会进行明文加密的。

2.MySQL 的权限列表

权限列名作用
CREATECreate_priv数据库、表或索引
DROPDrop_priv数据库或表
GRANT OPTIONGrant_priv数据库、表或索引权限的授权
REFERENCESReferences_priv数据库或表
ALTERAlter_priv
DELETEDelete_priv
INDEXIndex_priv
INSERTInsert_priv
SELECTSelect_priv
UPDATEUpdate_priv
CREATE VIEWCreate_view_priv视图
SHOW VIEWShow_view_priv视图
ALTER ROUTINEAlter_routine_priv存储的程序
CREATE ROUTINECreate_routine_priv存储的程序
EXECUTEExecute_priv存储的程序
FILEFile_priv服务器主机上的文件访问
CREATE TEMPORARY TABLESCreate_tmp_table_priv临时表
LOCK TABLESLock_tables_priv表的锁定
CREATE USERCreate_user_priv用户帐号
PROCESSProcess_priv进程信息
RELOADReload_priv服务器的重载
REPLICATION CLIENTRepl_client_priv复制客户端
REPLICATION SLAVERepl_slave_priv复制从库
SHOW DATABASESShow_db_priv数据库列表
SHUTDOWNShutdown_priv服务器的关闭
SUPERSuper_priv超级权限

刚刚创建的用户没有任何权限,需要 root 使用 GRANT 权限列表 ON 库.对象名 TO '用户名'@'登陆位置' [IDENTIFIED BY '密码'] 来赋予。

  • GRANT:权限列表,用多个权限用逗号分开

    # 权限列表
    grant select on ...
    grant select, delete, create on ....
    grant all [privileges] on ... # 表示赋予该用户在该对象上的所有权限
    
  • *.* :代表本系统中的所有数据库的所有对象(表,视图,存储过程等)

  • 库.*:表示某个数据库中的所有数据对象(表,视图,存储过程等)

  • IDENTIFIED BY :可选,如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就会创建用户并且设置对应的密码

而可以使用 REVOKE 权限列表 ON 库.对象名 FROM 'user_name'@'登陆位置';回收权限。


原文地址:https://blog.csdn.net/m0_73168361/article/details/136534993

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!