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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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 PostgreSQL中特定于某些数据库的超级用户角色_Database_Postgresql_Role_Superuser - Fatal编程技术网

Database PostgreSQL中特定于某些数据库的超级用户角色

Database PostgreSQL中特定于某些数据库的超级用户角色,database,postgresql,role,superuser,Database,Postgresql,Role,Superuser,我已创建具有超级用户权限的用户角色。我的服务器上大约有30个数据库。我只想将此角色分配给DB。当前角色允许用户作为超级用户访问所有数据库。我如何限制他作为超级用户访问其他数据库 这是我分配超级用户时使用的方法: CREATE ROLE fc LOGIN SUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; 有人能帮我吗?PostgreSQL中没有针对特定于数据库的超级用户的工具 无论如何,这是没有意义的,因为通常只有超级用户的操

我已创建具有超级用户权限的用户角色。我的服务器上大约有30个数据库。我只想将此角色分配给DB。当前角色允许用户作为超级用户访问所有数据库。我如何限制他作为超级用户访问其他数据库

这是我分配超级用户时使用的方法:

CREATE ROLE fc LOGIN
   SUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;

有人能帮我吗?

PostgreSQL中没有针对特定于数据库的超级用户的工具


无论如何,这是没有意义的,因为通常只有超级用户的操作才允许相对容易地升级以更好地控制数据库系统。

PostgreSQL中没有针对特定于数据库的超级用户的功能


无论如何,这是没有意义的,因为通常只有超级用户的操作才允许相对容易地升级以更好地控制数据库系统。

正如@Craig所解释的,你不能(即使你可以,也毫无意义)

实现受限超级用户权限的常用方法是作为现有超级用户角色进行连接,并创建包含一组有限的已批准命令的文件。这些函数现在将以创建者而不是调用方的权限执行

但是您需要非常小心,不要打开任何注入漏洞,因为函数中的所有内容都将作为超级用户运行。例如,调用者可以编写一个自定义的
=
操作符,授予他们超级用户权限,并将其放在他们的搜索路径中,因此您需要绝对确保您正在使用
pg_目录
模式中的
=

至少,你应该:

  • 使用子句
    SECURITY DEFINER SET search\u path TO pg\u catalog,pg\u temp
    创建所有这些函数。
    pg_temp
    模式必须始终包含在列表的末尾(如果省略,它将隐式包含在列表的开头)
  • 架构限定您的函数引用的任何其他表、函数等(例如,
    public.MyTable
    ,而不仅仅是
    MyTable
    ),并确保所有这些都是超级用户拥有的(以便调用方不能将恶意代码放入触发器等)
  • 未经详尽验证,切勿将用户输入放入动态查询字符串(
    执行“选择…”

正如@Craig所解释的,你不能(即使你可以,也毫无意义)

实现受限超级用户权限的常用方法是作为现有超级用户角色进行连接,并创建包含一组有限的已批准命令的文件。这些函数现在将以创建者而不是调用方的权限执行

但是您需要非常小心,不要打开任何注入漏洞,因为函数中的所有内容都将作为超级用户运行。例如,调用者可以编写一个自定义的
=
操作符,授予他们超级用户权限,并将其放在他们的搜索路径中,因此您需要绝对确保您正在使用
pg_目录
模式中的
=

至少,你应该:

  • 使用子句
    SECURITY DEFINER SET search\u path TO pg\u catalog,pg\u temp
    创建所有这些函数。
    pg_temp
    模式必须始终包含在列表的末尾(如果省略,它将隐式包含在列表的开头)
  • 架构限定您的函数引用的任何其他表、函数等(例如,
    public.MyTable
    ,而不仅仅是
    MyTable
    ),并确保所有这些都是超级用户拥有的(以便调用方不能将恶意代码放入触发器等)
  • 未经详尽验证,切勿将用户输入放入动态查询字符串(
    执行“选择…”

为什么要这样做?您试图解决的根本问题是什么?我们的项目中有不同的模块,对于每个模块,DBs都位于同一台服务器上。因此,您希望使超级用户模块具体化,因此希望将其应用于单个basisOK,但为什么您需要他们成为超级用户?您确定不只是需要他们成为数据库所有者吗?为什么要这样做?您试图解决的根本问题是什么?我们的项目中有不同的模块,对于每个模块,DBs都位于同一台服务器上。因此,您希望使超级用户模块具体化,因此希望将其应用于单个basisOK,但为什么您需要他们成为超级用户?您确定不只是需要他们成为数据库所有者吗?