【问题标题】:Postgres: Is there a way to tie a User to a Schema?Postgres:有没有办法将用户绑定到模式?
【发布时间】:2011-01-21 12:41:43
【问题描述】:

在我们的数据库中,我们有用户:A、B、C。

每个用户都有自己对应的架构:A、B、C。

通常,如果我想从其中一种模式的表中进行选择,我必须这样做:

select * from A.table;

我的问题是:

有没有办法制作:

select * from table

根据登录的用户转到正确的架构?

【问题讨论】:

    标签: sql database postgresql schema


    【解决方案1】:

    这是 PostgreSQL 的默认行为。确保您的search_path 设置正确。

    SHOW search_path;
    

    默认情况下应该是:

    search_path
    --------------
    "$user",public
    

    有关更多信息,请参阅 PostgreSQL 的 documentation 架构。具体这部分:

    您可以为每个与该用户同名的用户创建一个架构。回想一下,默认搜索路径以 $user 开头,它解析为用户名。因此,如果每个用户都有一个单独的架构,他们默认访问自己的架构。

    如果您使用此设置,那么您可能还想撤销对公共架构的访问权限(或完全放弃它),因此用户真正受限于他们自己的架构。

    更新你的评论: 这是我的机器上发生的事情。这就是我相信你想要的。

    skrall=# \d
    No relations found.
    skrall=# show search_path;
      search_path   
    ----------------
     "$user",public
    (1 row)
    
    skrall=# create schema skrall;
    CREATE SCHEMA
    skrall=# create table test(id serial);
    NOTICE:  CREATE TABLE will create implicit sequence "test_id_seq" for serial column "test.id"
    CREATE TABLE
    skrall=# \d
                List of relations
     Schema |    Name     |   Type   | Owner  
    --------+-------------+----------+--------
     skrall | test        | table    | skrall
     skrall | test_id_seq | sequence | skrall
    (2 rows)
    
    skrall=# select * from test;
     id 
    ----
    (0 rows)
    
    skrall=# 
    

    【讨论】:

    • 很好,感谢您提供的信息...那对我来说似乎无法正常工作。
    • 添加了一些信息,它按预期工作。不确定问题可能是什么。什么版本的 PostgreSQL?
    猜你喜欢
    • 2019-12-25
    • 2012-07-07
    • 2014-11-07
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    相关资源
    最近更新 更多