mysql如何限制用户访问表

说白了,限制用户访问MySQL中的特定表主要有三种方式:精准授权、锁源、事后验证。

我们先来说说最重要的事情。
创建用户时直接指定权限范围。
别心软。
去年,当我们运行一个电子商务项目时,我们只为一个报表用户启用了 SELECT 权限。
结果运维增加了强制INSERT,数据长期被篡改。
行话里这叫许可蠕变,但实际上就是不关注权威。
还有一件事,记得用FLUSH PRIVILEGES刷新,否则新的权限会白白授予。
还有一个非常重要的细节。
例如,内网开发团队使用1 9 2 .1 6 8 .1 .%这样的通配符,而不是整个“”,否则隔壁的测试团队可以随意连接,说实话这是一个很大的陷阱。

我一开始以为撤销权限很简单,用REVOKE就可以完成,但后来发现这是错误的。
尤其是遍历数据库时,要注意ON后的全路径,如REVOKE INSERT ON mydb.users。
如果不添加表名,可能会影响其他库。
等等,还有一件事。
验证权限时,不要只查看 SHOW GRANTS 的输出。
您实际上必须使用 SELECT 语句。
有些隐藏的问题,不经过测试是无法发现的。

最后提醒:使用GRANT时,如果用户名后面加@如果主机名用引号引起来,命令行将会爆炸。
只需记住用空格分隔它们即可。

mysql如何创建新用户并授权

哎呀,我来说说我当年处理MySQL用户权限时遇到的坑吧。

一年来我帮助一家小公司构建了服务器。
您的数据库仅包含几个表。
结果,admin账户密码为“1 2 3 4 5 6 ”,并被分享给了三个弟弟。
结果呢?一名员工不小心删除了一个时钟,导致整个企业停业三天。
从那时起,我就开始思考:密码一定要强,权限一定要窄。

看,当你创建一个新用户时,你不能盲目地这样做。
您必须使用 CREATE USER 并指定 IP,这样就没有人可以连接。
例如,如果有一个名为 testuser 的用户,请让他使用 IP 1 9 2 .1 6 8 .1 .1 00 进行连接。
密码一定要复杂一些,使用caching_sha2 _password(这是MySQL 8 .0及以上版本默认的,比较安全)。
切勿使用“1 2 3 4 5 6 ”或“password”等弱密码。
SQL 创建用户“testuser”@“1 9 2 .1 6 8 .1 .1 00”,并通过“StrongPassword1 2 3 !”使用 caching_sha2 _password 进行识别;
授权不应混淆。
不必费心授予所有特权。
TO,太危险了。
Testuser只关心testdb库,不接触其他任何东西。
例如,授予它 SELECT 和 INSERT 权限,但不要授予它任何其他权限。
SQL 授予选择,插入 testdb。
TO 'testuser'@'1 9 2 .1 6 8 .1 .1 00';
更改权限后,需要运行FLUSH PRIVILEGES,否则可能不生效。
我以前也遇到过这种情况。
修改了好久,发现这一步不行。
一加立即解决了这个问题。

在密码安全方面,我特别重视caching_sha2 _password。
MySQL 8 .0以后默认这个选项,比mysql_native_password强很多。
忘记密码了吗?使用 ALTER USER 进行更改。
SQL 更改由“NewStrongPassword4 5 6 !”标识的用户“testuser”@“1 9 2 .1 6 8 .1 .1 00”;
连接的来源也需要严格管理。
例如,测试用户要求他通过1 9 2 .1 6 8 .1 .1 00进行连接,并且不允许其他IP地址。
如果您希望它能够从特定域进行连接,可以使用 %.example.com。
SQL 创建通过 caching_sha2 _password BY 'StrongPassword1 2 3 !' 标识的用户 'testuser'@'%.example.com';
最重要的是您不授予所有权限。
除非你真的想当父亲。
你可以做任何事,风险太高。
我经历过一家大工厂失去对管理员帐户权限的控制。
结果,整个数据库被黑客入侵,数亿数据丢失。
你说它惨不惨?
撤销授权?使用撤销。
SQL 撤销 testdb 的所有权限。
来自'testuser'@'1 9 2 .1 6 8 .1 .1 00'; 同花顺特权;
检查权限?查看补助金。
SQL 显示“testuser”@“1 9 2 .1 6 8 .1 .1 00”的补助金;
如果忘记 root 密码该怎么办?我以前也曾掉进过这个陷阱。
有一次半夜服务器崩溃了。
我忘记了root密码,非常担心。
后来学到一招:先停止MySQL服务,用--skip-grant-tables启动,然后连接改密码。

重击 sudo systemctl 停止 mysql sudo mysqld_safe --skip-grant-tables &
连接后更改密码:
sql UPDATE mysql.user SET Authentication_string=PASSWORD('NewRootPassword') WHERE User='root'; 同花顺特权;
然后重新启动服务:
bash sudo systemctl 启动 mysql
完成!不过这个技巧风险很大,所以要谨慎使用。

简而言之,当涉及到 MySQL 用户权限时,您应该牢记以下三点:强密码、有限权限和 IP 限制。
不要像我当时那样只是为了避免麻烦并为“GRANT ALL”付出一切。
如果最后出了什么问题,我就得帮忙收拾。

mysql创建只读权限用户教程

直接进入实用信息:使用 Navicat 创建只读用户非常容易。

1 .连接到 MySQL 打开 Navicat 并连接到您的数据库。

2 创建新用户 左键单击“用户”,然后双击“新用户”。

3 填写用户名和密码 给它一个随机名称,例如只读。
设置一个好的密码,不要设置得太简单。
主机名填写%,表示全世界都可以连接。

4 启用 SELECT 权限 在服务器权限页面上,选中“SELECT”。
取消选中所有其他权限。

5 升级权限(可选) 如果要检查特定的表,请单击“添加权限”,选择数据库+表,然后打开SELECT。

6 完成 单击“确定”即可完成。

注意:不要在生产环境中使用%。
指定IP比较安全。
不要随意给权限,不然以后改起来很头疼。

您的用户现在只能检查它,但不能更改它。
清除?