数据库 DCL 是什么?DCL 的权限管理命令及使用方法教程

说白了,DCL就是数据库的"门禁系统",核心就靠GRANT和REVOKE这两把钥匙。
其实很简单,但用不好容易踩坑。

先说最重要的GRANT命令,去年我们跑那个千万级交易系统,就是因为给销售团队直接用GRANT ALL PRIVILEGES搞死了权限,最后整个数据库被拖慢了5 0%。
另外一点要注意WITH GRANT OPTION,去年有同事把它给忘了,结果下面的小团队把权限乱传,最后得我们全手撕重建。
还有个细节挺关键的,比如MySQL里GRANT CREATE ON .这种要特别小心,去年有个新来的DBA这么搞,差点把整个库的表权限都给了不该给的人。

我一开始也以为REVOKE就是干掉权限,后来发现不对,比如REVOKE GRANT OPTION FOR这种,它不会撤销用户本身的权限,只是收回了转授权力,这个点很多人没注意。

等等,还有个事,REVOKE命令其实有个隐藏的坑,就是如果权限不存在,比如REVOKE UPDATE ON non_existent_table,某些数据库会直接报错而不是默默忽略,这个去年坑了我们一次。

建议搞个RBAC框架,角色权限分得明明白白,别老是全权限走起。
说实话挺坑的,权限管理这活儿,得像绣花一样仔细。

简述构成mysql权限控制步骤

1 、mysql权限是用户对对象的访问控制。
用户能干嘛,对象是啥,直接看权限表。

2 、权限是白名单,没写的不能干。
白名单策略,指定能干啥,其余不能。

3 、权限校验分两步: a、能连吗?检查用户名密码,错误如ERROR1 04 5 b、能干啥?从大到小查:user、db、tables_priv、columns_priv、proc_priv。
表分工不同,但权限有重合。
先查大范围,没权限再查细粒度。

4 、权限表修改不即时生效。
手动改表数据后,必须flush privileges。

5 、用户管理命令: createuser创建,setpassword改密码,alteruser改密码过期, dropuser删用户。
alteruser只改密码过期,不能登录,需重设密码。

6 、host+user唯一标识用户。
同名不同host是不同用户,权限不同。

7 、匹配用户规则: mysql先按host排序,再按user排序,小范围在前,大范围在后。
'root'@'1 9 2 .1 6 8 .1 .1 01 '比'root'@'%'优先。

8 、授予权限命令: grant 权限 on 对象 to 用户@host identified by 密码。

9 、收回权限命令: revoke 权限 on 对象 from 用户@host。
revoke必须与grant对应,不能随便收。

1 0、收回select权限问题: revoke all privileges,然后grant option from 用户。

1 1 、权限级别: 主机+用户+对象+数据范围。

1 2 、权限对象: 全局:所有数据库,服务管理权限如shutdown。
数据库:特定数据库。
表:数据库中的表。
列:表中的列,如grant select(name)。
程序:存储过程和方法。

1 3 、information_schema: 存放数据库和表信息,无物理文件,内存维护。

1 4 、权限原则: a、权限尽量小范围。
b、按业务分用户,不同业务不同用户。
c、避免权限太细,影响性能。

1 5 、文件安全: ~.mysql_history记录操作,重定向/dev/null清历史。

1 6 、密码丢失解决: a、mysql启动加选项重置密码。
b、启动加选项不检查权限,登陆改密码,重启。

你自己掂量。

如何利用MySQL Workbench客户端创建帐户

哎哟,这事儿我得跟你唠唠。
前年我在上海帮一个哥们儿搭服务器,用MySQLWorkbench搞用户那会儿,真是坑坑洼洼。

你看啊,第一步,打开那个工具,你点左侧那个钥匙图标,没错,就是UsersandPrivileges。
记得有一次我手滑点成了那个绿色的加号图标,差点就创建了个新数据库,吓我一跳。

第二步,加账户,点那个AddAccount。
系统默认给你个newuser,直接改掉,别用这个默认的,上次我忘了改,结果后来搞忘了是哪个用户干的活儿。

第三步,填信息。
用户名,我一般取啥呢,比如order_user,按功能来的。
认证方式,我都是用mysql_native_password,这玩意儿最稳,别瞎改。
主机,这得看情况。
你要是就本地用,就留localhost。
但你要是远程访问,我去年帮一个做电商的改的,他那个主机写的是%,结果他老家网不好,连不上去,还得让我改回来一个个IP试。
密码,这得强密码,我一般弄个啥,比如P@ssw0rd2 02 3 ,反正得复杂点,上次我见一个哥们儿密码就1 2 3 4 5 6 ,说服务器强制改的,我当时就给他说了,别真这么干。

第四步,角色权限。
我一般给普通用户就给个SELECT权限,上次我给一个报表用的脚本用户给了INSERT,结果那个脚本写了个啥,整个库都插满了,把我整得够呛。
所以角色权限这块,得小心点。
你看看你那DBA、SecurityOfficer啥的,按需给。

第五步,账户限制。
这可选,但我觉得挺有用的。
比如连接数限制,上次我给一个测试用户限制了,结果他那边测试脚本跑多了,连接超了,连不上了。
过期时间,也可以设,不过得跟用的人说好。

第六步,保存。
点Apply,确认一下,Apply。
搞定。

最后说几句,密码得复杂点,别用弱密码。
权限分配,我上面说了,最小化原则。
你要是远程访问,记得改主机,写%或者具体IP,还得防火墙得放行3 3 06 端口。
去年我见一个哥们儿,远程连不上,折腾半天,原来是他公司防火墙没开,打电话过去问人家,气得我。
所以啊,搞这些,得细心。

这块我没碰过,我不敢乱讲。