没有SUPER权限的情况下如何实现表安全?

没有SUPER权限的情况下如何实现表安全?

一家主要的基于云的 MySQL 提供商不授予主用户 SUPER 权限。提供商是 Amazon RDS,但我的问题不是专门针对 Amazon RDS,而是针对数据库所有者/管理员没有 SUPER 权限的一般情况。

缺少 SUPER 权限意味着您在创建存储过程时不能使用 DEFINER 子句。

反过来,这意味着,您不能锁定表以使特定用户无法访问,同时又不能通过存储过程授予同一用户间接访问权限。

有没有其他方法可以在没有 SUPER 的情况下实现相同的“无直接表访问”安全策略?

答案1

不合逻辑的推论。

您不能明确声明DEFINER除您自己之外的其他人,这当然是没有意义的,因为您已经是定义者了……但您仍然可以使用它SQL SECURITY DEFINER | INVOKER来指定过程在运行时使用的安全上下文。这部分及其安全方面与您拥有特权时没有什么不同SUPER。唯一的区别是,如果您希望定义者是特定(特权)用户,以便过程可以以该用户的身份在定义者上下文中运行……您必须以 DEFINER 身份登录才能声明该过程

答案2

正如最初回答的那样,SUPER 权限仅允许具有高权限的用户将存储例程中的定义者设置为除自己之外的用户。您可以以定义者身份登录,以便在不同的安全上下文中创建存储过程、触发器或视图,但需要允许以该用户的身份进行身份验证,以便您可以在首次创建时登录。

在 Amazon RDS 上,您无法将用户锁定到本地主机,因为您没有主机的 shell 访问权限。因此,您要么将用户锁定到主机或范围,但必须将其保留在您的例程中,要么使用通配符主机,并将用户暴露于潜在的安全漏洞。

对于 MariaDB,我发现账户锁定功能。虽然锁定的帐户无法以该身份登录,但它仍然可以执行存储例程。因此,可以使用通配符主机在登录时从任何地方授予访问权限以创建例程,然后可以锁定该用户,允许其执行存储例程仅有的执行锁定的高权限用户当然需要采取其他保护措施。

相关内容