MySQL8管理系列之四:用户和权限管理
用户和权限管理实际上属于安全范畴。
在当前安全形式越来越严竣的情况下,做好数据库的分用户、分权限管理是非常有必要的。
一、原则
1、root账号绝对禁止允许任何IP都可以访问,也就是说,其IP不能用%。建议root账号只设为允许本机登录(当然前提是应用与数据是分离的)
2、应用账号和管理账号要分离;绝对不要使用root账号作为应用账号。
3、应用账号权限最小化;管理账号权限分离化。
4、在数据库服务器的管理工具中,不要保存密码。
二、账号的建立
以下描述均基于Windows下的管理,因此不使用命令方式。
账号的建立与mysql的版本有关,不同的服务器版本其建立账号的界面也不同,其实就是选项会有不同。
1、navicat 11的账号管理(mysql 5)
(1)建立账号界面
建议:初始密码就应使用强密码格式,即大小写+数字+特殊字符,长度不小于12位。
上图中的主机地址:建议应用账号只允许两个IP访问,一是数据库服务器本机,也就是localhost;另一个是应用的IP。
(2)服务器权限
对应用账号不要给服务器权限。
(3)权限
这个标签的权限概念是数据库权限,即允许访问哪些数据库,哪些表或其它对象。
默认新建的账号是没有任务数据库权限的,如下图:
点击“添加权限”按钮,打开添加权限的界面:
在上图中,选择要授权的数据库(左侧列表),然后在右侧选择权限,打勾即表示具有该权限。
各个权限说明:
上图中的所有权限名称,都是针对数据库的(不是针对服务器的,针对服务器的也有类似的权限名称)
--------------------------------------------------------
select:表或视图的查询权限,这个是基本权限。
insert:插入表数据的权限;
update:更新表数据的权限;
delete:删除表数据的权限;
references:
create:创建表的权限;
drop:删除表的权限;
alter:修改表的权限;
index:索引权限;
trigger:触发器权限;
createView:创建视图的权限;
show view:显示视图的权限;
Grant:授权的权限,即可以再给其它用户授权。
excute:执行权限。
alter routine:修改路由的权限;
create routine:创建路由的权限;
create Tmp. tables:创建临时表的权限;
lock tables:锁表的权限;
event:创建事件的权限。
----------------------------------------------------------
如果要对不同的表或对象授予细分权限,可以再点开上图左侧的树,对对象进行授权,操作方式一样。
不同的对象,可授予的权限不同,如下图是表的可授权类别:
下图是视图的可授权类别:
2、Navicat 15的账号管理(mysql 8)
(1)账号创建
由于mysql 8 加强了权限机制,因此在管理账号时,有密码插件的选项。
上图中,创建账号时可以选择密码插件,和密码过期策略。
其中:密码过期策略的几个选项说明如下:
--------------------------------------------------------
- Default:默认策略。即使用mysql的全局密码过期策略。
- Immediate:立即过期,该密码必须立即修改后才能执行其它操作。
- Integerval:若干天后过期。
- Never:永不过期
---------------------------------------------------------
按一些安全要求,应当设置为interval类型,或者在服务器层面设置好全局的策略,则此处可以不再考虑。
(2)其它权限设置过程与上面的相同,此处不再描述。
3、不同用户
(1)在mysql中,账号名可以相同,但相同的账号名必须是不同的主机IP。
这样,在mysql中,root@%和root@192.198.1.1是两个不同的账号。
(2)由于 root@% 和 root@192.198.1.1是两个不同的账号,因此它们的密码可以是不同的。
(3)mysql不支持同一个账号指定多个ip,即不能建立root@192.168.1.1,192.168.1.2的账号。