mysql 开发进阶篇系列 53 权限与安全(账号管理的各种权限操作 上)
一. 概述
在了解前两篇的权限系统介绍后,这篇继续讲账号的管理,这些管理包括账号的创建,权限更改,账号删除等。用户连接数据库的第一步都是从账号创建开始。
1. 创建账号
有两种方法可以用来授权账号:(1) 是使用grant来授权账号,(2) 是直接操作权限表。 使用grant操作简单,出错率更少。使用grant授权账号时,需先创建用户。
-- 在上一篇中有演示创建一个z1@localhost用户,脚本如下:
CREATE USER 'z1'@'localhost' IDENTIFIED BY '';
-- 语法如下
CREATE USER [IF NOT EXISTS]
user [auth_option] [, user [auth_option]] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH resource_option [resource_option] ...]
[password_option | lock_option] ...
创建用户,更多的语法选项,请参考官方文档,里面也有很多创建用户案例:https://dev.mysql.com/doc/refman/5.7/en/grant.html
-- grant 授权语法
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user [auth_option] [, user [auth_option]] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH {GRANT OPTION | resource_option} ...]
在创建完用户账号后,就需要使用grant 来授权相应的权限,语法请参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/grant.html
2. 授权给用户z1, 可以在所有数据库上执行所有权限,但只能从本地进行连接。
-- 为z1@localhost用户给予所有权限,但只能从本地连接
GRANT ALL PRIVILEGES ON *.* TO z1@localhost
此时user权限表的z1用户,所有权限字段值都为 Y (除了Grant_priv), 上篇z1用户对tables_priv权限表和columns_priv权限表写入的数据不会改变,这是因为全局权限覆盖局部权限。
3. 在上面的基础上,增加对z1的grant权限
GRANT ALL PRIVILEGES ON *.* TO z1@localhost WITH GRANT OPTION
4. 在上面的基础上,将z1密码123456修改密码为: 654321
-- 用户z1的authentication_string将被修改
GRANT ALL PRIVILEGES ON *.* TO z1@localhost IDENTIFIED BY '' WITH GRANT OPTION
Warning Code :
Using GRANT statement to modify existing user's properties other than privileges is deprecated and will be removed in future release.
Use ALTER USER statement for this operation.
提示: grant是用来修改属性而不是特权,在以后的版本中删除,推荐使用ALTER USER
下面尝试登录下,在Xshell中查看ip地址是本机。使用z1连接数据库成功,如下面所示:
但通过windows客户端电脑,使用sqlyog工具来连接运程mysql服务器时,报错误代码1045,原因是z1用户连接的Host只能是localhost也就是本机。连接错误如下所示:
5. 在上面的基础上,授权可以是任意ip来连接mysql服务器。
-- 直接修改表的z1 连接来源限制。允许任意地址连接
UPDATE mysql.`user` SET `Host`='%' WHERE `Host`='localhost' AND `User`='z1'
-- 刷新权限
FLUSH PRIVILEGES
上面修改后,host已改变值,此时再使用客户端的sqlyog工具来连接远程mysql服务器时,就成功了。mysql 数据库中是通过user表的host字段来进行控制,host可以是以下类型的赋值:
Host值 |
User值 |
匹配的连接 |
% |
'z1' |
z1 可以从任何主机来连接 |
% |
'' |
任何用户,可以从任何主机来连接 |
%.loc.gov |
'z1' |
z1 可以从loc.gov域的任何主机来连接 |
172.168.18.200 |
'z1' |
z1 可以从172.168.18.200的ip地址的主机来连接 |
172.168.18.% |
'z1' |
z1 可以从172.168.18 的网段的任何主机来连接 |
如果用户连接进来,user权限表中有多个匹配,原则是:
(1) 服务器在启动读入user表后进行排序(SELECT * FROM mysql.`user` ORDER BY `Host` DESC)。
(2) 然后当用户试图连接时,以排序的顺序浏览user表每行。
(3) 服务器使用与客户端和用户名匹配的第一行。
下面是user权限表数据排序后,存入在服务器内存中。
注意:mysql 数据库的user 表中host 的值为*或者空,表示所有外部IP都可以连接,但是不包括本地服务器localhost,因此,如果要包括本地服务器,必须单独为localhost 赋予权限。
6.其它事项
6.1 授权用户管理权限时(51篇中讲到权限列分为:普通权限和管理权限),管理权限如:super,process,file 等不能够指定某个数据库, on后面必须跟 *.*,如下所示:
grant super,process,file on *.* to z1@localhost
6.2 直接操作权限表也可以进行权限的创建和修改,其实grant 操作的本质就是修改权限表后进行权限的刷新。如上面的第5点修改任意ip,是直接操作的权限表。下面二个脚本是同样的效果,如下所示:
-- 使用grant
grant select,insert,update,delete on test1.* to 'z2'@'%' identified by '';
-- 直接操作权限表
insert into db (host,db,user,select_priv,insert_priv,update_priv,delete_priv)
values('%','test1','z2','Y','Y','Y','Y');
mysql 开发进阶篇系列 53 权限与安全(账号管理的各种权限操作 上)的更多相关文章
- mysql 开发进阶篇系列 55 权限与安全(安全事项 )
一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限, ...
- mysql 开发进阶篇系列 47 物理备份与恢复(xtrabackup 的完全备份恢复,恢复后重启失败总结)
一. 完全备份恢复说明 xtrabackup二进制文件有一个xtrabackup --copy-back选项,它将备份复制到服务器的datadir目录下.下面是通过 --target-dir 指定完全 ...
- mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)
一. xtrabackup 选项说明 在操作xtrabackup备份与恢复之前,先看下该工具的选项,下面记录了xtrabackup二进制文件的部分命令行选项,后期把常用的选项在补上.点击查看xtrab ...
- mysql 开发进阶篇系列 42 逻辑备份与恢复(mysqldump 的完全恢复)
一.概述 在作何数据库里,备份与恢复都是非常重要的.好的备份方法和备份策略将会使得数据库中的数据更加高效和安全.对于DBA来说,进行备份或恢复操作时要考虑的因素大概有如下: (1) 确定要备份的表的存 ...
- mysql 开发进阶篇系列 20 MySQL Server(innodb_lock_wait_timeout,innodb_support_xa,innodb _log_*)
1. innodb_lock_wait_timeout mysql 可以自动监测行锁导致的死锁并进行相应的处理,但是对于表锁导致的死锁不能自动监测,所以该参数主要用于,出现类似情况的时候等待指定的时间 ...
- mysql 开发进阶篇系列 10 锁问题 (相同索引键值或同一行或间隙锁的冲突)
1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_ ...
- mysql 开发进阶篇系列 54 权限与安全(账号管理的各种权限操作 下)
1. 查看权限 -- 如果host值不是%, 就要加上host值,下面查看bkpuser用户权限(6个权限, 限本地连接) SHOW GRANTS FOR bkpuser@localhost; -- ...
- mysql 开发进阶篇系列 52 权限与安全(系统四个权限表的粒度控制关系)
一.概述 接着上篇的权限介绍,当用户进行连接的时候,权限表的存取过程有以下两个阶段: (1) 先从user表中的host,user, authentication_string 这3个字段中判断连接的 ...
- mysql 开发进阶篇系列 51 权限与安全(权限表user,db详细介绍 )
一.概述 mysql 的权限系统主要用来对连接到数据库的用户进行权限验证,以此来判断此用户是否属于合法用户,以及合法用户给予的相应数据库权限.下面将介绍权限系统的工作原理,以及将要熟练掌握账号的管理和 ...
随机推荐
- 关于微信小程序切换获取不到元素的问题
1.由于公司要实现微信小程序的自动化,所以开始学习python + appium 实现微信小程序自动化.在学习过程中遇到在切换webview后获取不到页面元素的问题,导致无法继续.今天在网上看到一篇关 ...
- C# 使用System.Speech 进行语音播报和识别
C# 使用System.Speech 进行语音播报和识别 using System.Speech.Synthesis; using System.Speech.Recognition; //语音识别 ...
- 使用 Chrome 浏览器插件 Web Scraper 10分钟轻松实现网页数据的爬取
web scraper 下载:Web-Scraper_v0.2.0.10 使用 Chrome 浏览器插件 Web Scraper 可以轻松实现网页数据的爬取,不写代码,鼠标操作,点哪爬哪,还不用考虑爬 ...
- oracle创建与mysql的dblink
1.先简单介绍下环境 操作系统:windows 2008 R2 (64bits) oracle数据库:10gr2 10.2.0.3.0(32bits) mysql数据库:5.1 (32bits) ...
- Sql Server常用数据库函数小结
查询验证存储过程是否存在 SELECT name FROM sysobjects WHERE xtype = 'P' and name = '{0}' ----------------------- ...
- Notes : <Hands-on ML with Sklearn & TF> Chapter 4
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- spring InitializingBean和DisposableBean init-method 和destroy-method @PostConstruct @PreDestroy
对于初始化函数: @PostConstruct 注解的方法 InitializingBean接口定义的回调afterPropertiesSet() Bean配置中自定义的初始化函数 对于析构则与上相同 ...
- C++ STL常用知识
模板(各种类型通用): template<class 模板名> 注意:若要使用模板,在每个自定义函数前都必须加上此定义. 排序(algorithm头文件): sort(头指针l,尾指针r) ...
- Python基础-数据类型-转摘
1.数字 2 是一个整数的例子.长整数 不过是大一些的整数.3.23和52.3E-4是浮点数的例子.E标记表示10的幂.在这里,52.3E-4表示52.3 * 10-4.(-5+4j)和(2.3-4. ...
- Redhat7配置ali-yum源
1.删除所有包 rpm -qa|grep yum|xargs rpm -e --nodeps 2.下载相关文件 下载地址 https://mirrors.aliyun.com/centos/7/os ...