MySQL用户管理

用户

用户信息

在我们的MySQL中有一些默认的数据库:

注意到这个mysql数据库,我们查看里面存放的表:

sql 复制代码
mysql> show tables;
+------------------------------------------------------+
| Tables_in_mysql                                      |
+------------------------------------------------------+
| columns_priv                                         |
| component                                            |
| db                                                   |
| default_roles                                        |
| engine_cost                                          |
| func                                                 |
| general_log                                          |
| global_grants                                        |
| gtid_executed                                        |
| help_category                                        |
| help_keyword                                         |
| help_relation                                        |
| help_topic                                           |
| innodb_index_stats                                   |
| innodb_table_stats                                   |
| ndb_binlog_index                                     |
| password_history                                     |
| plugin                                               |
| procs_priv                                           |
| proxies_priv                                         |
| replication_asynchronous_connection_failover         |
| replication_asynchronous_connection_failover_managed |
| replication_group_configuration_version              |
| replication_group_member_actions                     |
| role_edges                                           |
| 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                                                 |
+------------------------------------------------------+
38 rows in set (0.00 sec)

注意到最下面是一个user表:

sql 复制代码
mysql> desc user;
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                    | Type                              | Null | Key | Default               | Extra |
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                     | char(255)                         | 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 unsigned                      | NO   |     | 0                     |       |
| max_updates              | int unsigned                      | NO   |     | 0                     |       |
| max_connections          | int unsigned                      | NO   |     | 0                     |       |
| max_user_connections     | int unsigned                      | NO   |     | 0                     |       |
| plugin                   | char(64)                          | NO   |     | caching_sha2_password |       |
| authentication_string    | text                              | YES  |     | NULL                  |       |
| password_expired         | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed    | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime        | smallint unsigned                 | YES  |     | NULL                  |       |
| account_locked           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_role_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_role_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Password_reuse_history   | smallint unsigned                 | YES  |     | NULL                  |       |
| Password_reuse_time      | smallint unsigned                 | YES  |     | NULL                  |       |
| Password_require_current | enum('N','Y')                     | YES  |     | NULL                  |       |
| User_attributes          | json                              | YES  |     | NULL                  |       |
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
51 rows in set (0.01 sec)

user表存放的就是MySQL的各个用户数据。

我们先关注其中的Host、User和authentication_string:

其中Host表示允许用户登录的IP地址,User就是用户名,authentication_string是用户加密后的密码。

无法通过常规手段获取authentication_string对应的原密码,MySQL是采取正向匹配机制。

此外我们还需关注*_priv,这些代表用户权限用户拥有的权限。

  • 那么我们想要对用户管理,实际上就是user表进行管理。

当然MySQL还提供了快捷的管理函数。

创建用户

语法:

sql 复制代码
create user '用户名'@'登陆主机/ip' identified by '密码'; 

示例:

此时我们就能尝试用新用户登录:

可以尝试查看已有的数据库:

因为我们的权限很低,所以看不到大部分数据库。

删除用户

语法:

sql 复制代码
drop user '用户名'@'主机名'

可以看到直接删除用户名是不行的,必须跟上主机名:

修改用户密码

语法:

自己修改自己的密码

sql 复制代码
set password=password('新的密码');

root用户修改指定用户的密码

sql 复制代码
set password for '用户名'@'主机名'=('新的密码');

我们先创建一个用户:

然后修改其密码:

数据库权限

我们先看看都有哪些权限:

权限 上下文
CREATE Create_priv 数据库、表或索引
DROP Drop_priv 数据库或表
GRANT OPTION Grant_priv 数据库、表或保存的程序
REFERENCES References_priv 数据库或表
ALTER Alter_priv
DELETE Delete_priv
INDEX Index_priv
INSERT Insert_priv
SELECT Select_priv
UPDATE Update_priv
CREATE VIEW Create_view_priv 视图
SHOW VIEW Show_view_priv 视图
ALTER ROUTINE Alter_routine_priv 保存的程序
CREATE ROUTINE Create_routine_priv 保存的程序
EXECUTE Execute_priv 保存的程序
FILE File_priv 服务器主机上的文件访问
CREATE TEMPORARY TABLES Create_tmp_table_priv 服务器管理
LOCK TABLES Lock_tables_priv 服务器管理
CREATE USER Create_user_priv 服务器管理
PROCESS Process_priv 服务器管理
RELOAD Reload_priv 服务器管理
REPLICATION CLIENT Repl_client_priv 服务器管理
REPLICATION SLAVE Repl_slave_priv 服务器管理
SHOW DATABASES Show_db_priv 服务器管理
SHUTDOWN Shutdown_priv 服务器管理
SUPER Super_priv 服务器管理

权限授予

刚创建的用户没有任何权限。需要给用户授权。

语法:

sql 复制代码
grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']

说明:

  • 权限列表,多个权限用逗号分开
sql 复制代码
grant select on ...
grant select, delete, create on ....
grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
  • . : 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)
  • 库.* : 表示某个数据库中的所有数据对象(表,视图,存储过程等)
  • identified by可选。 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户

例如我们登录zhangsan:

此时看不到其他数据库,是因为我们没有其他数据库的任何一个权限。

那么我们现在用root账户给zhangsan授权:

sql 复制代码
mysql> grant all on test_db.* to 'zhangsan'@'localhost';
Query OK, 0 rows affected (0.03 sec)

此时再查看:

并且zhangsan就有了再test_dbCURD的权限:

sql 复制代码
mysql> use test_db;
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_test_db |
+-------------------+
| account           |
| msg               |
| myclass           |
| student           |
| t1                |
| t2                |
| t3                |
| t4                |
| t5                |
| t6                |
| t7                |
| t8                |
| t9                |
| tmp               |
| tt10              |
| tt11              |
| tt12              |
| tt13              |
| tt14              |
| tt15              |
| votes             |
+-------------------+
21 rows in set (0.00 sec)

mysql> select * from t1;
+------+
| num  |
+------+
|    1 |
+------+
1 row in set (0.03 sec)

回收权限

语法:

sql 复制代码
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';

例如我们收回zhangsan的select权限:

sql 复制代码
mysql> revoke select on test_db.* from 'zhangsan'@'localhost';
Query OK, 0 rows affected (0.02 sec)

此时我们再尝试用zhangsan的账号进行select:

还是可以查询,说明权限还没有生效,执行下面指令:

sql 复制代码
flush privileges;

再次进行查询:

sql 复制代码
mysql> select * from t1;
ERROR 1142 (42000): SELECT command denied to user 'zhangsan'@'localhost' for table 't1'

此时就权限不足了。

相关推荐
TheNextByte12 小时前
如何将照片从计算机传输到Android /iPhone
android·gitee·iphone
Yolanda942 小时前
【MySQL学习】MySQL体系结构和存储引擎
mysql
sun0077002 小时前
Android 默认的日志记录方式
android
瓦特what?2 小时前
C++编程防坑指南(小说版)
android·c++·kotlin
你想考研啊2 小时前
win11安装mysql
数据库·mysql
Gary董2 小时前
mysql全面优化从哪几方面入手
数据库·mysql
Humbunklung3 小时前
记一次MySQL数据库备份与SQL格式内容导出导入
数据库·sql·mysql
予枫的编程笔记3 小时前
【MySQL筑基篇】Schema设计避坑指南:INT/BIGINT、CHAR/VARCHAR选型不再纠结
mysql·数据库设计·三范式·反范式·schema设计·数据类型选型·数据库性能优化
我真的是大笨蛋3 小时前
MySQL临时表深度解析
java·数据库·sql·mysql·缓存·性能优化