前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 权限操作

MySQL 权限操作

作者头像
Demo_Null
发布2020-09-28 17:43:58
2.8K0
发布2020-09-28 17:43:58
举报
文章被收录于专栏:Java 学习

1.1 概述

1.1.1 工作原理

  MySQL 权限系统保证所有的用户只执行允许做的事情。当连接 MySQL 服务器时,用户的身份由用户从那儿连接的主机和用户指定的用户名来决定。连接后发出请求后,系统根据用户的身份和用户想做什么来授予权限。MySQL 中采用用户名 + 主机名来识别用户的身份。例如,从 abc.com 连接的用户 root 不一定和从 bcd.com 连接的 root 是同一个人。MySQL 通过允许你区分在不同的主机上碰巧有同样名字的用户来处理它,可以对 root 从 abc.com 进行的连接授与一个权限集,而为 root 从 bcd.com 的连接授予一个不同的权限集。MySQL存取控制包含2个阶段:  ♞ 阶段1:服务器检查是否允许你连接。  ♞ 阶段2:假定能连接,服务器检查你发出的每个请求。看你是否有足够的权限实施它。

1.1.2 权限更改何时生效

  当 MySQL 启动时,所有授权表的内容被读进内存并且从此时生效。当服务器注意到授权表被改变了时,对于现存的客户端连接有如下影响:  ♞ 表和列权限在客户端的下一次请求时生效。  ♞ 数据库权限改变在下一个 use db_name命 令生效。  ♞ 全局权限的改变和密码改变在下一次客户端连接时生效。 如果用 GRANT、REVOKE 或 SET PASSWORD 对授权表进行修改,服务器会立即重新将授权表载入内存。如果手动地修改授权表(使用 INSERT、UPDATE 或 DELETE 等等),应该重启 MySQL 或者执行 flush privileges; 告诉服务器重新装载授权表,否则更改将不会生效。

1.2 用户管理

1.2.1 查看所有用户

代码语言:javascript
复制
# 位于 mysql 数据库 user 表中
mysql> select user as 用户名, host as 主机 from mysql.user;
+---------------+-----------+
| 用户名        | 主机      |
+---------------+-----------+
| root          | %         |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
4 rows in set (0.14 sec)

1.2.2 创建用户

语法

代码语言:javascript
复制
# 主机名和密码可以省略
create user username[@host] [identified by 'password'];

注意

  ① 主机名默认值为 %,表示这个用户可以从任何主机连接 mysql 服务器   ② 密码可以省略,表示无密码登录

示例

代码语言:javascript
复制
# 用户 test 可以从 47.103.4 网段登录 MySQL 服务
mysql> create user 'test'@'47.103.4.%' identified by '123456';
Query OK, 0 rows affected (21.86 sec)

mysql> select user as 用户名, host as 主机 from mysql.user;
+---------------+------------+
| 用户名        | 主机       |
+---------------+------------+
| root          | %          |
| test          | 47.103.4.% |
| mysql.session | localhost  |
| mysql.sys     | localhost  |
| root          | localhost  |
+---------------+------------+
5 rows in set (0.12 sec)

1.2.3 修改密码

语法

代码语言:javascript
复制
# 通过管理员修改密码
set password for username@host = password(password);

# 修改当前用户密码
set password = password(password);

# 修改用户表数据,此方式需要刷新才能生效,注意:新版本 authentication_string 字段表示密码
update mysql.user set password = password('password') where user = 'username' and host = 'host';
flush privileges;

示例

代码语言:javascript
复制
mysql> set password for 'test'@'47.103.4.%' = password('654321');
Query OK, 0 rows affected (1.41 sec)

1.2.4 删除用户

语法

代码语言:javascript
复制
# 直接删除用户
drop user username@host;

# 删除用户表数据从而删除用户
delete from mysql.user where user='username' and host='host';

示例

代码语言:javascript
复制
mysql> delete from mysql.user where user='test' and host='47.103.4.%';
Query OK, 1 row affected (0.08 sec)

1.3 权限管理

1.3.1 授予权限

语法

代码语言:javascript
复制
grant privileges on database.table to 'username'@'host' [with grant option]

注意

  ① priveleges (权限列表),可以是 all,表示所有权限,也可以是 select、update 等权限,多个权限之间用逗号分开。   ② on 用来指定权限针对哪些库和表,格式为 数据库.表名,点号前面用来指定数据库名,点号后面用来指定表名,*.* 表示所有数据库所有表。   ③ to 表示将权限赋予某个用户, 格式为 username@host,@前面为用户名,@后面接限制的主机。   ④ with grant option 这个选项表示该用户可以将自己拥有的权限授权给别人。   ⑤ 使用 grant 重复给用户添加权限,权限叠加,比如你先给用户添加一个 select 权限,然后又给用户添加一个 insert 权限,那么该用户就同时拥有了 select 和 insert 权限。

示例

代码语言:javascript
复制
# test 用户只能查询 mysql.user 表的 user, host 字段
mysql> grant select(user,host) on mysql.user to 'test'@'47.103.4.%';
Query OK, 0 rows affected (0.46 sec)

1.3.2 查看权限

语法

代码语言:javascript
复制
# 查看指定用户权限
show grants for 'username'@'host'

# 查看当前用户权限
show grants;

示例

代码语言:javascript
复制
mysql> show grants for 'test'@'47.103.4.%';
+--------------------------------------------------------------------+
| Grants for test@47.103.4.%                                         |
+--------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test'@'47.103.4.%'                          |
| GRANT SELECT (host, user) ON `mysql`.`user` TO 'test'@'47.103.4.%' |
+--------------------------------------------------------------------+
2 rows in set (0.12 sec)

mysql> show grants;
+-------------------------------------------------------------+
| Grants for root@%                                           |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.10 sec)

1.3.3 撤销权限

语法

代码语言:javascript
复制
revoke privileges ON database.table FROM 'username'@'host';

语法

代码语言:javascript
复制
mysql> revoke select(user) on mysql.user from 'test'@'47.103.4.%';
Query OK, 0 rows affected (0.05 sec)

mysql> show grants for 'test'@'47.103.4.%';
+--------------------------------------------------------------+
| Grants for test@47.103.4.%                                   |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test'@'47.103.4.%'                    |
| GRANT SELECT (host) ON `mysql`.`user` TO 'test'@'47.103.4.%' |
+--------------------------------------------------------------+
2 rows in set (0.10 sec)

1.3.4 授权原则

 ① 只授予能满足需要的最小权限,防止用户误操作,比如用户只是需要查询,那就只给 select 权限,不要给用户赋予 update、insert 或者 delete 权限。  ② 创建用户的时候限制用户的登录主机,一般是限制成指定 IP 或者内网 IP 段,为每个用户设置满足密码复杂度的密码,定期清理不需要的用户,回收权限或者删除用户。  ③ 初始化数据库的时候删除没有密码的用户,安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。

1.4 其他操作

1.4.1 忘记密码(windows)

 ① 使用管理员权限进入命令行执行 net stop mysql 停止 MySQL 服务  ② 执行 mysql -skip-grant-tables 无验证启动 MySQL 服务  ③ 在另一个命令行中执行 mysql 无需用户名和密码直接登录  ④ 修改密码 update mysql.user set password = password('password') where user = 'username' and host = 'host';  ⑤ 此时还没有完成,需要去任务管理器手动结束 mysqld 进程  ⑥ 执行 net start mysql; 正常启动 MySQL 服务  ⑦ 密码已经修改完成可以使用新密码登录root账户了

1.4.2 备份与还原

语法

代码语言:javascript
复制
# 备份
mysqldump -u用户名 -p密码 数据库名称 > 保存的路径

# 还原,要进入需要还原的数据库
source 恢复文件路径
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 概述
    • 1.1.1 工作原理
      • 1.1.2 权限更改何时生效
        • 1.2 用户管理
          • 1.2.1 查看所有用户
          • 1.2.2 创建用户
          • 1.2.3 修改密码
          • 1.2.4 删除用户
        • 1.3 权限管理
          • 1.3.1 授予权限
          • 1.3.2 查看权限
          • 1.3.3 撤销权限
          • 1.3.4 授权原则
        • 1.4 其他操作
          • 1.4.1 忘记密码(windows)
          • 1.4.2 备份与还原
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档