Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 阻止超级管理员/dba删除/更新表?_Mysql_Database_Postgresql - Fatal编程技术网

Mysql 阻止超级管理员/dba删除/更新表?

Mysql 阻止超级管理员/dba删除/更新表?,mysql,database,postgresql,Mysql,Database,Postgresql,我需要确保一些任务关键型表不会被删除或编辑。唯一可能的操作是从中读取,dba可以添加更多行。就这样 现在为了增加安全性,我想阻止dba删除/更改记录,因此基本上没有人可以删除或更改记录,也没有超级管理员。这些表对于某些类型的用户的活动跟踪非常关键,我需要无限期地保留这些用户的数据,有些表是关键的查找表。因此,系统锁定值和用户跟踪值的混合 这个想法是,如果有人想要破坏他们需要的数据来杀死那个数据库。有办法做到这一点吗?不,不可能,超级用户始终控制着数据库。您可以撤销更新和删除权限,但超级用户可以再

我需要确保一些任务关键型表不会被删除或编辑。唯一可能的操作是从中读取,dba可以添加更多行。就这样

现在为了增加安全性,我想阻止dba删除/更改记录,因此基本上没有人可以删除或更改记录,也没有超级管理员。这些表对于某些类型的用户的活动跟踪非常关键,我需要无限期地保留这些用户的数据,有些表是关键的查找表。因此,系统锁定值和用户跟踪值的混合


这个想法是,如果有人想要破坏他们需要的数据来杀死那个数据库。有办法做到这一点吗?

不,不可能,超级用户始终控制着数据库。您可以撤销更新和删除权限,但超级用户可以再次将这些权限授予自己。

对于MySQL,可以采取以下方法

一旦你有了你的应用程序帐户,就放弃超级用户帐户(实际上,任何帐户都有“授予选项”)。系统管理员帐户应仅具有停止和启动系统的权限,但无权读取敏感表

接下来,修改您的表,使其使用内存引擎。这意味着每当数据库重新启动时,应用程序管理员(而不是DBA)将需要恢复内容。这还意味着DBA无法使用“跳过授权”选项重新启动数据库以获得对数据的访问权,因为数据将在重新启动过程中蒸发。(但是,系统的根用户始终可以转储系统内存并在其中查找数据。)


更好的方法是使用仅由应用程序管理员知道的密钥加密应用程序中的数据

您无法阻止超级用户执行某些操作。您唯一能做的就是防止任何用户意外删除或更新记录。这可以通过在更新和删除时创建规则来实现

CREATE [ OR REPLACE ] RULE name AS ON event  
    TO table [ WHERE condition ]  
    DO [ ALSO | INSTEAD ] { NOTHING | command | ( command ; command ... ) }  

请参阅此参考。

因此,如果我们有一个不诚实的人拥有管理员权限,那么什么也做不了?他们如何控制政府系统的信息?信任。因为每个系统都可能被黑客攻击,特别是超级用户,因为他们必须有能力这样做。不要给每个人超级用户访问权限,没有必要。别忘了你的备份,如果你不把它们存放在一个非常安全的地方,它们也会被黑客攻击。当你和人一起工作时,安全是非常困难的。Postgres没有内存引擎,现在你也有同样的问题,但是在不同的位置。而且你无论如何也不能删除超级用户,你没有这样做的权限:你需要超级用户permissions@a_horse_with_no_name:对不起,我没有注意到Postgres标签。我更新了答案,说它是特定于MySQL的。MySQL也有同样的问题,任何超级用户都有足够的权限,可以随时更改引擎类型。如果你不信任任何人,就不要给任何人超级用户访问权。@Frank Heikens:我同意这是把问题的位置从dba转移到应用程序管理员——但我认为这就是问题的关键所在。此外(特定于MySQL),具有授予权限的用户可以删除自己的用户帐户。