当试图让事情变得更好,使它非常复杂。
我工作在一个安全威胁的工具脚本当我不得不学习更多关于之间的交互静态和动态的特权在MySQL中8。
动态权限是一个“新”的东西添加到MySQL 8轻松地扩展权限定义,同时提供更多的粒度。例如,冲洗操作现在有专门的权限和范围。
在运行时动态分配特权。他们中的大多数服务器启动时是活跃的。但是他们也可以改变对组件或插件时激活。(https://dev.mysql.com/doc/mysql-security-excerpt/8.0/en/privileges-provided.html privileges-provided-dynamic)
在MySQL中静态权限可用经典的特权。(https://dev.mysql.com/doc/mysql-security-excerpt/8.0/en/privileges-provided.html privileges-provided-static)
这些都是内置服务器并不能改变。
到目前为止,一切都好。如果我们能提供更多的灵活性在MySQL现有的安全机制,我完全同意。
我的第一步是处理超级的滥用。
——手册来帮助一个章节从超级动态迁移账户权限。
追求完美!
让我们玩。首先,我创建一个用户:
|
1
2
3
4
5
6
7
|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
|
格兰特
使用
在
* . *
来
“secure_test”@“localhost”|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
|
正如你所看到的我可以连接,但是没有权限。
在另一个终端与一个管理账户,让我们做的经典操作创建一个DBA:
|
1
|
|
现在我有:
|
1
2
3
4
5
|
* * * * * * * * * * * * * * * * * * * * * * * * * * *1。
行
* * * * * * * * * * * * * * * * * * * * * * * * * * *
奖助金
为
(电子邮件保护):
格兰特
选择,
插入,
更新,
删除,
创建,
下降,
重新加载,
关闭,
过程,
文件,
引用,
指数,
改变,
显示
数据库,
超级,
创建
临时
表,
锁表,
执行,
复制
奴隶,
复制
客户端,
创建
视图,
显示
视图,
创建
常规,
改变
常规,
创建用户,
事件,
触发,
创建
表空间,
创建
的角色,
下降
角色
在
* . *
来
“secure_test”@“localhost”
使用GRANT选项
* * * * * * * * * * * * * * * * * * * * * * * * * * *2。
行
* * * * * * * * * * * * * * * * * * * * * * * * * * *
奖助金
为
(电子邮件保护):
格兰特
APPLICATION_PASSWORD_ADMIN、AUDIT_ADMIN BACKUP_ADMIN、BINLOG_ADMIN BINLOG_ENCRYPTION_ADMIN, CLONE_ADMIN, CONNECTION_ADMIN, ENCRYPTION_KEY_ADMIN, FLUSH_OPTIMIZER_COSTS, FLUSH_STATUS, FLUSH_TABLES, FLUSH_USER_RESOURCES, GROUP_REPLICATION_ADMIN, INNODB_REDO_LOG_ARCHIVE, INNODB_REDO_LOG_ENABLE, PERSIST_RO_VARIABLES_ADMIN, REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, RESOURCE_GROUP_ADMIN, RESOURCE_GROUP_USER, ROLE_ADMIN, SERVICE_CONNECTION_ADMIN, SESSION_VARIABLES_ADMIN, SET_USER_ID, SHOW_ROUTINE,SYSTEM_USER,TABLE_ENCRYPTION_ADMIN SYSTEM_VARIABLES_ADMIN XA_RECOVER_ADMIN
在
* . *
来
“secure_test”@“localhost”
使用GRANT选项
|
正如你所看到的,我有一堆分配权限。
说实话,必须确定每个特权是什么以及它如何与他人交互是具有挑战性的。
总之,手册告诉我们:
”为每个帐户被前面的查询,确定的操作需要大量的超级。然后动态特权授予相应的操作,并撤销超级。”
在我们的例子中:
|
1
|
|
这将删除超级特权,但仍将活跃的什么?让我们试着最简单的事情之一,让我们修改的变量super_read_only。
与超我可以改变变量的值没有问题,但如果我删除超级特权,会发生什么?
|
1
2
3
4
5
|
* * * * * * * * * * * * * * * * * * * * * * * * * * *1。
行
* * * * * * * * * * * * * * * * * * * * * * * * * * *
奖助金
为
(电子邮件保护):
格兰特
选择,
插入,
更新,
删除,
创建,
下降,
重新加载,
关闭,
过程,
文件,
引用,
指数,
改变,
显示
数据库,
创建
临时
表,
锁表,
执行,
复制
奴隶,
复制
客户端,
创建
视图,
显示
视图,
创建
常规,
改变
常规,
创建用户,
事件,
触发,
创建
表空间,
创建
的角色,
下降
角色
在
* . *
来
“secure_test”@“localhost”
使用GRANT选项
* * * * * * * * * * * * * * * * * * * * * * * * * * *2。
行
* * * * * * * * * * * * * * * * * * * * * * * * * * *
奖助金
为
(电子邮件保护):
格兰特
APPLICATION_PASSWORD_ADMIN、AUDIT_ADMIN BACKUP_ADMIN、BINLOG_ADMIN BINLOG_ENCRYPTION_ADMIN, CLONE_ADMIN, CONNECTION_ADMIN, ENCRYPTION_KEY_ADMIN, FLUSH_OPTIMIZER_COSTS, FLUSH_STATUS, FLUSH_TABLES, FLUSH_USER_RESOURCES, GROUP_REPLICATION_ADMIN, INNODB_REDO_LOG_ARCHIVE, INNODB_REDO_LOG_ENABLE, PERSIST_RO_VARIABLES_ADMIN, REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, RESOURCE_GROUP_ADMIN, RESOURCE_GROUP_USER, ROLE_ADMIN, SERVICE_CONNECTION_ADMIN, SESSION_VARIABLES_ADMIN, SET_USER_ID, SHOW_ROUTINE,SYSTEM_USER,TABLE_ENCRYPTION_ADMIN SYSTEM_VARIABLES_ADMIN XA_RECOVER_ADMIN
在
* . *
来
“secure_test”@“localhost”
使用GRANT选项
|
正如你所看到的超级消失了。
|
1
2
|
查询好吧,0
行
影响(0.00sec)
|
我仍然可以修改全局变量。为什么?
手册说,SYSTEM_VARIABLES_ADMIN从动态权限允许我们修改”允许在运行时系统变量的变化”。好吧,如果我取消吗?
太棒了!所以为了真正删除/限制超级,我也需要删除SYSTEM_VARIABLES_ADMIN。但是,所有的吗?
好短,不,它不是。
检查手册可以看到超级影响这些:
- BINLOG_ADMIN,
- CONNECTION_ADMIN,
- ENCRYPTION_KEY_ADMIN,
- GROUP_REPLICATION_ADMIN,
- REPLICATION_SLAVE_ADMIN,
- SESSION_VARIABLES_ADMIN,
- SET_USER_ID,
- SYSTEM_VARIABLES_ADMIN
这些是默认的。但是我们也可以有其他人根据插件活跃。
所以理论上可以肯定的是我们删除所有相关的超级特权,我们应该:
|
1
|
撤销
超级,BINLOG_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,GROUP_REPLICATION_ADMIN,REPLICATION_SLAVE_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SYSTEM_VARIABLES_ADMIN
在
* . *
从
(电子邮件保护)
“localhost”;
|
这应该留给我们相当于没有超级用户:
|
1
2
3
4
5
|
* * * * * * * * * * * * * * * * * * * * * * * * * * *1。
行
* * * * * * * * * * * * * * * * * * * * * * * * * * *
奖助金
为
(电子邮件保护):
格兰特
选择,
插入,
更新,
删除,
创建,
下降,
重新加载,
关闭,
过程,
文件,
引用,
指数,
改变,
显示
数据库,
创建
临时
表,
锁表,
执行,
复制
奴隶,
复制
客户端,
创建
视图,
显示
视图,
创建
常规,
改变
常规,
创建用户,
事件,
触发,
创建
表空间,
创建
的角色,
下降
角色
在
* . *
来
“secure_test”@“localhost”
使用GRANT选项
* * * * * * * * * * * * * * * * * * * * * * * * * * *2。
行
* * * * * * * * * * * * * * * * * * * * * * * * * * *
奖助金
为
(电子邮件保护):
格兰特
APPLICATION_PASSWORD_ADMIN、AUDIT_ADMIN BACKUP_ADMIN、BINLOG_ENCRYPTION_ADMIN CLONE_ADMIN, FLUSH_OPTIMIZER_COSTS, FLUSH_STATUS, FLUSH_TABLES, FLUSH_USER_RESOURCES, INNODB_REDO_LOG_ARCHIVE, INNODB_REDO_LOG_ENABLE, PERSIST_RO_VARIABLES_ADMIN, REPLICATION_APPLIER, RESOURCE_GROUP_ADMIN, RESOURCE_GROUP_USER, ROLE_ADMIN, SERVICE_CONNECTION_ADMIN, SHOW_ROUTINE,SYSTEM_USER、TABLE_ENCRYPTION_ADMIN XA_RECOVER_ADMIN
在
* . *
来
“secure_test”@“localhost”
使用GRANT选项
|
结论
在这第一个博客,我们开始探索动态权限的使用,我们需要做删除超级特权。
然而,上面的列表仍然是有点混乱和不安全。我们还有关机或重新加载或文件时,都是不安全的,应该分配。在本系列的下一篇文章中,我们看到的如何处理动态和静态权限的角色我们也尽量清楚它们是如何影响另一个。
雷竞技下载官网MySQL Percona分布是最完整的,稳定的,可伸缩的,和安全,开源MySQL解决方案,提供企业级的数据库环境最关键业务应用程序…和它的免费使用!






我在今年早些时候TiDB实现动态的特权。我是不熟悉功能之前,因为安全不是我之前关注的东西。我认为在它一直是一个令人难以置信的深思熟虑的规范,仔细考虑用户的升级情况。
动态权限的目的还不清楚从你的文本,但它是* *超级用户替换为细粒度的权限。超级本身是弃用,但为了向后兼容仍授予由格兰特。你修剪你的SQL语句的输出,但这样做时,你会得到一个警告:
mysql (localhost: 8024){根}((没有))>撤销超级*。*从(电子邮件保护)“localhost”;
查询好,0行影响,1警告(0.00秒)
mysql (localhost: 8024){根}((没有))>显示警告;
+ - - - + - + - - - - - - - - - - - - - - - - - +
| | | |代码级别信息
+ - - - + - + - - - - - - - - - - - - - - - - - +
| | 1287 |超级特权警告标识符是弃用|
+ - - - + - + - - - - - - - - - - - - - - - - - +
1行集(0.00秒)
问题是语义的“所有”:
一)应该分配只有“新特权”?
b)应该分配只有“老特权”?
c)应该分配这两种类型的特权?
我不认为答案是直接。最后MySQL团队选择(c)为8.0,而实际上TiDB我们选择(b),但也有其他因素导致我们的决定。我想以后在路上我们都将切换到(a)。
微妙之处我喜欢动态的特权之一是特权的名字已经“role-oriented”。所以通常你可以只分配一个特权用户(比如CLONE_ADMIN)和没有找出从一长串是必需的。这有助于防止过度分配特权,这是一个真正的问题在MySQL的权限设计。这并不总是从错误消息什么特权将需要一定的操作。
摩根,我同意你刚才说。
顺便说一下我认为的一个动态权限范围取代超细粒度的安全(最后)。
不管怎样对我的主要观点是,我们应该停止将权限分配给用户,而是使用角色和分配他们尽可能多的更成熟的RDBMS。
另一个问题可以动态扩散的特权,我们都不要开始使用角色可以为dba成为下一个噩梦。已经糟糕的睡眠与安全。
我immagine需要分配适当的权限表/列不同的用户。由应用程序所有者或不同的管理角色…
只是开始