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
Database 数据库灵活性和隐私性、隐藏结构、软件兼容性和';公共';权限_Database_Postgresql_Permissions_Schema - Fatal编程技术网

Database 数据库灵活性和隐私性、隐藏结构、软件兼容性和';公共';权限

Database 数据库灵活性和隐私性、隐藏结构、软件兼容性和';公共';权限,database,postgresql,permissions,schema,Database,Postgresql,Permissions,Schema,我是最近决定从MySQL迁移到PostgreSQL的人之一,很多旧习惯都被打破了。然而,我想在PostgreSQL中保留MySQL的一些功能 所以主题: 用户应该能够在受限命名空间下创建表 默认情况下,一个用户的表不应该对其他用户可见(包括数据、结构、存储过程等等) 或者,应授予用户向其他用户授予权限的权利 新用户的默认权限是无权限(不读,甚至更少写) 保持与不支持模式的应用程序的兼容性 第1点: 在MySQL下,适当的解决方案是允许用户根据“username%”标准创建数据库。在Postgre

我是最近决定从MySQL迁移到PostgreSQL的人之一,很多旧习惯都被打破了。然而,我想在PostgreSQL中保留MySQL的一些功能

所以主题

  • 用户应该能够在受限命名空间下创建表
  • 默认情况下,一个用户的表不应该对其他用户可见(包括数据、结构、存储过程等等)
  • 或者,应授予用户向其他用户授予权限的权利
  • 新用户的默认权限是无权限(不读,甚至更少写)
  • 保持与不支持模式的应用程序的兼容性
  • 第1点:

    在MySQL下,适当的解决方案是允许用户根据“username%”标准创建数据库。在PostgreSQL下,我想让每个用户拥有一个数据库,这样他们就可以创建任意多的模式。但是,有一个限制,即不能跨数据库进行连接,只能跨同一数据库上的模式进行连接

    在同一数据库下具有所有as PostgreSQL模式的可能性并没有完全被放弃。但接下来的一点是

    第2点:

    阅读之后,我倾向于认为,使数据完全私有化的唯一方法是使用不同的数据库。但我仍然不知道该如何做,另一方面,它与前面提到的连接的能力相冲突

    第3点:

    这是否可能,或者您是否需要“创建角色”权限并为给定表/架构创建新角色

    第4点:

    再说一次,这可能吗?从我所读到的内容来看,我感觉自己在与默认的“公开”行为作斗争,但我仍然希望用户什么也看不到,除非管理员允许他们访问信息

    第5点:

    我与MySQL一起使用的一些程序(我无法直接控制它们在数据库上执行的操作)不支持模式。这意味着他们只是忽略模式层。为此,PostgreSQL默认提供“public”模式。然而,在某些情况下,这仍然有点尴尬

    这还意味着默认情况下,每个软件/工具需要一个独立的数据库,否则我需要通过在每个用户(角色)的基础上设置一些预定义的模式来欺骗系统


    这些就是我迄今为止找到的选项/解决方案。为了隐私起见,我可以使用for第5点,牺牲不同数据库中表/模式之间的连接(第1点和第2点),但我仍然想知道解决上述问题的最佳方法是什么,以及将它们付诸实践的最佳方法是什么

    说到这里,我洗耳恭听


    PS:也欢迎链接到如何实现上述目标的信息。

    我们最终采用的解决方案如下:

    第1点

    每个用户一个数据库。用户可以创建任意数量的表和模式。不可能跨数据库进行连接。另一种方法是在客户机上检索子集并管理结果,这显然不是最有效的方法

    第2点

    这可以通过定义给定数据库的特定所有权和权限并删除默认的“公共”行为来实现。这样,只有属于允许组的用户或其所有者才能访问内容

    注意:PostgreSQL使用多级权限,这意味着即使数据库由某人拥有,表也可以由其他人拥有

    第3点

    可以用它来做

    第4点

    没有自动化的方法可以做到这一点。确保这一点的唯一方法是限制对所有现有数据库的“公共”访问

    第5点


    基于每个用户使用是唯一的方法,使用多个用户访问不同的模式(在需要时)。显然存在一个问题,即如果不存在具有适当权限的用户,则不了解架构的应用程序无法“访问”其他架构。

    我们最终采用的解决方案如下:

    第1点

    每个用户一个数据库。用户可以创建任意数量的表和模式。不可能跨数据库进行连接。另一种方法是在客户机上检索子集并管理结果,这显然不是最有效的方法

    第2点

    这可以通过定义给定数据库的特定所有权和权限并删除默认的“公共”行为来实现。这样,只有属于允许组的用户或其所有者才能访问内容

    注意:PostgreSQL使用多级权限,这意味着即使数据库由某人拥有,表也可以由其他人拥有

    第3点

    可以用它来做

    第4点

    没有自动化的方法可以做到这一点。确保这一点的唯一方法是限制对所有现有数据库的“公共”访问

    第5点


    基于每个用户使用是唯一的方法,使用多个用户访问不同的模式(在需要时)。显然存在一个问题,即如果不存在具有适当权限的用户,则不了解架构的应用程序无法“访问”其他架构。

    因此,如果我正确理解这一点,您希望x用户拥有自己的私有表,但仍然能够跨其他数据库,对吗?“仍然能够跨”您的意思是加入吗?如果是这样,那么是的,这将是我们想要的特性之一。所以如果我理解这个correc