gpt4 book ai didi

mysql - mySQL 中的 postgres 架构和角色

转载 作者:行者123 更新时间:2023-11-29 11:20:38 24 4
gpt4 key购买 nike

我一直在使用 PostGresSQL 作为我的一个应用程序的数据库。为了支持 Multi-Tenancy ,我为每个租户使用了模式和角色,以限制访问并防止 SQL 注入(inject)时的数据泄漏。我维护一个连接池,然后在确定租户上下文后执行 SET ROLE,以便他只能访问他自己的架构。这一切都运作良好。但是,mySQL 中的等效设计是什么?我看到 mySQL 没有“角色”,并且模式/数据库在概念上是相同的,我如何在 mySQL 中实现类似的功能?我问这个问题是因为我正在设计另一个应用程序,并且被告知使用 mySQL 而不是 PGSQL。

谢谢

最佳答案

由于mysql没有角色的概念,所以你要么必须使用不同的mysql数据库用户和数据库来实现相同的数据逻辑分离。实际上,确定上下文后,您必须使用不同的 myswl 用户帐户和不同的默认数据库连接到 mysql。缺点是该解决方案将使连接池变得惰性。幸运的是,在 MySQL 中建立与数据库的新连接很快,并且不需要太多资源。

或者,您可以使用单个数据库和 mysql 用户帐户,并在应用程序用户帐户级别区分用户。显然,这意味着您的用户数据将不会具有与当前相同的逻辑分离,但您仍然可以使用连接池。

作为用户数量有限的第三种选择,您可以使用相同的 mysql 用户帐户和默认数据库连接到 mysql,但将实际用户数据存储在单独的数据库中,只能使用单独的 mysql 用户帐户访问。但是,在该默认数据库中创建单独的 views对于用户数据库中的每个表。在create view语句中,将definer子句设置为可以访问存储表的给定数据库的mysql用户帐户,并将sql security子句设置为definer。这样您仍然可以使用连接池,因为连接是使用通用用户 ID 与默认数据库建立的。客户端数据将在数据库中逻辑分离。缺点是通过默认数据库中的 View 可以访问所有数据,并且对底层数据结构的任何修改也必须反射(reflect)在 View 中。

关于mysql - mySQL 中的 postgres 架构和角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38985974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com