Day.4 针对使用者做管理 - 权限管理&资安 (Power)

在资料库管理上,root 相当於拥有所有权限的最大管理者,针对不同使用者规划给予相应的权限是很重要的。总不能让所有使用者都有能随意变更操作系统内容的权限,在资料库管理安全上势必会有疑虑和影响。

在资安DB管理上,除了审视建立使用者时是否给予适当权限,同时定期更换帐密也是很重要的一部分。


  • 权限表位置:
    db: mysql -> table: user (纪录允许连接到服务的帐户内容)

从头开始写文章才发现这个地方有更动XDD -Mysql5.7版後不再使用password作为密码字段,而是改成authentication_string 所以在之前的图1这句语法是无法生效的,会喷没有字段password错误。
https://ithelp.ithome.com.tw/upload/images/20210801/201308800lPJFg7lZj.png

还记得安装完预设root是没使用密码登入的吗!首先来设定重要的root密码~

  • 浏览用户表
SELECT User, Host, authentication_string, plugin FROM mysql.user;

https://ithelp.ithome.com.tw/upload/images/20210801/201308800uiyLEo22u.png
这边注意到root地方密码目前空的没问题,但plugin栏位使用 auth_socket 这会导致我们用修改密码SQL语法时无法生效(对於auth_socket 密码是没有作用的)!!所以要配置密码,需要在同一命令中(同时)更改插件和设置密码。

  • 修改指令
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234';

在查询一次就会看到是正常的了,试着以新密码登入看看!

  • 修改使用者密码有以下几种SQL指令 (示范更改使用者:root)
***  ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
***  SET PASSWORD FOR 'root'@'localhost' = PASSWORD("新密码");

***  UPDATE mysql.user SET authentication_string = PASSWORD("新密码") where User = 'root' and Host = 'localhost';
     FLUSH PRIVILEGES; (UPDATE完後要执行这句刷新MySQL的系统权限相关表)

这边会注意到指令同样都是更改密码为何update那句还要flush权限才会生效呢??

透过FLUSH PRIVILEGES会将数据表的数据重建一份内存权限资料,如果内存的权限数据和磁盘数据的权限数据相同,则无需执行FLUSH PRIVILEGES,使用在权限数据可能存在不一致的情况下使用。

使用上来说:

  • 如果用GRANT/REVOKE语句执行的话,内存和数据表的数据应该会保持同步更新的,所以在正常情况下,执行指令後没必要执行FLUSH PRIVILEGES命令。
  • 当数据表的权限与内存中的权限数据不一致,使用FLUSH PRIVILEGES来重建内存数据。
    解释:不一致状态可能由DML操作(EX: UPDATE / DELETE)产生。
    (直接用DML语句操作系统权限表 ex.mysql.user表)

不过在重要的更改root密码上还是建议flush一下保险~

Q: root密码出问题忘记登不进去怎麽办?

A: 在设定档中配置参数-> skip-grant-tables
(功能:mysql启动登入时不使用权限表认证,也就是所有使用者都可以不打密码就做登入!! 所以记得修改完密码後要去设定档改回来。)


使用部分呢让我们用例子解释常用语法 ex.要新增一个专门给开发人员写入资料的使用者

  • 新增新使用者 ex.限制使用者连线MYSQL所用ip 172.8.X.X , % = 任何ip
CREATE USER 'dev_write'@'172.8.%' IDENTIFIED BY 'Only2Write' 
  • 看使用者所拥有的权限
SHOW GRANTS FOR 'dev_write'@'172.8.%';
  • 给予使用者特定资料库powers 的特定操作权限。
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE ON powers.* TO 'dev_write'@'172.8.%' ;

补充: *.* 等於全部资料库
  • 移除使用者存取资料库powers的所有权限
REVOKE ALL PRIVILEGES ON powers.* FROM 'dev_write'@'172.8.%';
  • 移除使用者帐号
DROP USER 'dev_write'@'172.8.%';

详细解释 权限意义与分类级别参考官方文件这部分-> Privileges Supported by MySQL
https://dev.mysql.com/doc/refman/8.0/en/grant.html

下一篇来带大家认识 MYSQL系统层相关纪录日志~


<<:  Day4 官方 Demo 说明

>>:  Day12:[资料结构]Binary Tree -  Traversal

Day 13: 时间管理、预估、压力 (待改进中... )

CH9: 时间管理 「专业开发人员同样清楚会议的高昂成本,他们同样清楚自己的时间是宝贵的。所以,如果...

Day-19 Excel列印时常见问题

今日练习档 ԅ( ¯་། ¯ԅ) 大家好呀 ٩(ˊ〇ˋ*)و 列印我相信也是很多人会使用的一个功能,...

【Day22】判断计数器数字初始值是否为0且按下增加的按钮时结果是否正确 「(°ヘ°)

上一篇针对了计数器Component做了三个单元测试, Component、计数器按钮、计数器的数字...

Day28 - 部属到正式环境 (3)

今天的实作内容主要根据教学网站进行。 将应用程序安装到Heroku (接续Day27) 使用GIT将...

#9 - Creating & Removing Directories

今天要学习的是如何新增和删除资料夹,一样是用昨天的 fs modules,不过在新增资料夹之前,先来...