On O' Reilly" PostgreSQL Up&运行" R. Obe(第二版)提出了一种按角色组织模式的方法" ..用于为多个客户提供服务的应用程序,这些客户的数据必须分开。"。所以,按照她的例子,如果我有一个狗管理系统来养狗,我应该为spa建立一个模式并在每个中创建相同的狗表。然后,我应该为每个模式创建一个不同的登录角色,使用相同的模式名称,这样每个模式都将由具有相同名称的登录角色拥有。
然后,如果我设置:
search_path="$user", public;
是user
一个PostgreSQL变量,列出当前登录用户的名称,当客户端登录并执行时:
SELECT * FROM dogs
PostgreSQL知道我们指的是哪个架构。
根据作者的说法,这个模型可以确保你有一个水疗中心确保一个水疗中心无法从另一个水疗中心看到狗的信息"
直到现在我实际上一直在使用更简单的方法。使用FLask和SQLalchemy:
dogs=db.session.query(Dog).filter(Dog.spa_id==currentUserId).all()
我想问为什么模式方法比我更简单的方法更安全:有没有一种方法可以利用单模式数据库和带有过滤子句的查询,而模式组织的数据库不能?
如果您登录并(恶意地)想要查看其他用户的内容,为什么模式组织数据库比只有一个模式的数据库更安全,所有用户都可以查询她的内容,因为查询是用过滤条款制作?