我先创建一个用户:CREATE USER user1;
然后取消用户在postgres数据库中的所有权限:REVOKE ALL ON DATABASE postgres FROM user1;
执行这两步后,user1依然可以连接数据库postgres,而且还可以在其中建表,这是为什么呢?如何在PostgreSQL中指定特定用户只能访问指定的数据库呢?希望大家能帮助我,这太纠结了。

解决方案 »

  1.   

    我再帖下PostgreSQL的REVOKE语句格式
    REVOKE [ GRANT OPTION FOR ]
        { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
        ON DATABASE dbname [, ...]
        FROM { [ GROUP ] rolename | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]难道是我语句上的问题么?
      

  2.   

    问题已经解决:
    1、应该删除公共权限,即PUBLIC的权限
    2、只删除角色的权限是不够的,因为角色属于PUBLIC,PUBLIC还是有访问和创建的权限的,所以上面的语句是没有用的(并不是说没执行,只是目的没达到)
    3、牢记PostgreSQL中的角色组权限和角色权限,其中有着继承关系