如何在MySQL中创建用户和授予权限

哎,这事儿吧,真挺重要的。
我跟你讲讲我当年踩的坑。

那年头,我刚接手一个网站,服务器上MySQL root密码早就丢了,搞了半天还是朋友帮忙的脚本才弄回来。
当时我就琢磨,这万一哪天又忘了,或者被人发现了密码,那整个站都不安全了。
所以,必须给每个小应用单独开个用户。

你看啊,直接用 root 进来,这太不安全了。
我当年就见过一个项目,数据库权限没管好,结果另一个小程序不小心删了别人的表。
那叫一个惨。

1 、怎么创建新用户?
你得用 root 登录 MySQL 咱们用 root 登录,没问题。

sql CREATE USER 'app1 _user'@'localhost' IDENTIFIED BY 'strong_password';
我这儿写个 'app1 _user',密码自己定,要复杂点。
'localhost' 是啥意思呢?就是只能从这个服务器本地进去,不能远程。
这很重要!我当年有个小程序就忘了改这个,远程访问,结果被黑了,就是从远程进来的。

2 、给这个用户啥权限?
创建好了,你得给他分配工作需要的权限。

sql GRANT ALL PRIVILEGES ON mydb. TO 'app1 _user'@'localhost';
这里 mydb 是我的数据库,. 就是所有表。
ALL PRIVILEGES 就是啥都能干。
你得记得 FLUSH PRIVILEGES;,不然权限不生效。

3 、要是想让用户能远程连接呢?
有些应用就在别的电脑上,那你得改。

sql CREATE USER 'app1 _user'@'1 9 2 .1 6 8 .1 .1 00' IDENTIFIED BY 'strong_password';
这里 1 9 2 .1 6 8 .1 .1 00 是那个电脑的 IP 地址。
你要是希望任何地方都能连,就用 %。

sql CREATE USER 'app1 _user'@'%' IDENTIFIED BY 'strong_password';
记得 FLUSH PRIVILEGES;。

4 、权限不给太多,够用就行
ALL PRIVILEGES 是最危险的,我一般不这么干。
给够用就好。

比如,一个读数据的程序:
sql GRANT SELECT ON mydb. TO 'app1 _read_user'@'localhost'; FLUSH PRIVILEGES;
一个写数据的程序:
sql GRANT INSERT, UPDATE, DELETE ON mydb. TO 'app1 _write_user'@'localhost'; FLUSH PRIVILEGES;
你想想,万一这个写数据的程序被黑了,别人就能随便删你的数据了。
所以权限控制很重要。

5 、权限忘了咋办?
你想撤销或者修改权限,用 REVOKE。

sql REVOKE DELETE ON mydb. FROM 'app1 _write_user'@'localhost'; FLUSH PRIVILEGES;
这样 app1 _write_user 就不能删数据了。

6 、用户多了,删不掉咋办?
有时候你删用户,发现删不掉,权限不够。
这时候用 root 登录,删它。

sql DROP USER 'app1 _old_user'@'localhost'; FLUSH PRIVILEGES;
总结一下:
用 root 登录 MySQL。
CREATE USER 'user'@'host' IDENTIFIED BY 'password'; 创建用户,host 很重要,localhost 只能本地,% 是所有地方。
GRANT select, insert, update, delete ON database. TO 'user'@'host'; 给权限,别给 ALL。
FLUSH PRIVILEGES; 使权限生效。
REVOKE delete ON database. FROM 'user'@'host'; 撤销权限。
DROP USER 'user'@'host'; 删用户。

我这都是亲身经历,当年就因为权限没给对,导致一个应用被黑了,数据全没了。
所以这事儿,真的得小心。