• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    postgresql限制某个用户仅连接某一个数据库的操作
    POST TIME:2021-10-18 23:05

    创建数据库bbb且owner为用户b:

    postgres9.6@[local]:5432 postgres# create database bbb owner b;
    CREATE DATABASE
    Time: 259.099 ms

    默认情况下使用用户c也可以连接数据库bbb:

    postgres9.6@[local]:5432 postgres# \c bbb c
    You are now connected to database "bbb" as user "c".

    回收public的connect on database bbb权限:

    c@[local]:5432 bbb# \c postgres postgres9.6
    You are now connected to database "postgres" as user "postgres9.6".
    postgres9.6@[local]:5432 postgres# revoke connect on database bbb from public;
    REVOKE
    Time: 2.088 ms

    此时用户c没有了连接数据库bbb的权限:

    postgres9.6@[local]:5432 postgres# \c bbb c
    FATAL: permission denied for database "bbb"
    DETAIL: User does not have CONNECT privilege.
    Previous connection kept

    但bbb数据库的owner用户b可以连接数据库:

    postgres9.6@[local]:5432 postgres# \c bbb b
    You are now connected to database "bbb" as user "b".
    b@[local]:5432 bbb# 

    此种情况下超级用户也可以连接该数据库:

    b@[local]:5432 bbb# \c bbb postgres9.6
    You are now connected to database "bbb" as user "postgres9.6".
    postgres9.6@[local]:5432 bbb# 
    postgres9.6@[local]:5432 bbb# \du
                      List of roles
     Role name |             Attributes             | Member of 
    -------------+------------------------------------------------------------+-----------
     a      |                              | {}
     b      |                              | {}
     c      |                              | {}
     postgres9.6 | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
    

    另外一种方法:从pg_hba.conf中限定:

     # TYPE DATABASE    USER      ADDRESS         METHOD
    # "local" is for Unix domain socket connections only
    local  all       all                  trust 
    # IPv4 local connections:
    host  all       all       127.0.0.1/32      trust
    ...
    #
    host  all  all        0.0.0.0/0       md5
    

    补充:Postgres限制每个用户只能连接指定数量的session,防止服务器资源紧张

    限制每个用户只能连接指定数量的session,防止服务器资源紧张

    (1)创建测试用户test:

    highgo=#create user test;
    CREATEROLE
    highgo=#\du
                   List of roles
     Role name |          Attributes          | Member of
    -----------+------------------------------------------------+----------
     highgo  | Superuser, Create role, Create DB, Replication | {}
     test   |                        | {}
    

    (2)设置仅允许用户test使用一个连接

    highgo=#ALTER ROLE test CONNECTION LIMIT 1;
    ALTERROLE
    

    (3)在session 1中使用test用户连接highgo数据库

    highgo=>\c highgo test
    Youare now connected to database "highgo" as user "test".
    highgo=>
    

    (4)在session 2中也使用test用户连接highgo数据库,会出现如下错误:

    highgo=#\c highgo test
    致命错误: 由角色"test"发起的连接太多了
    Previousconnection kept
    

    (5)查询用户test链接限制

    highgo=>SELECT rolconnlimit FROM pg_roles WHERE rolname = 'test';
     rolconnlimit
    --------------
          1
    (1row)
    

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

    您可能感兴趣的文章:
    • postgresql修改完端口后直接psql连接数据库报错的解决
    • 启动PostgreSQL服务器 并用pgAdmin连接操作
    • SpringBoot连接使用PostgreSql数据库的方法
    • 解决postgreSql远程连接数据库超时的问题
    • navicat无法连接postgreSQL-11的解决方案
    • postgreSQL中的内连接和外连接实现操作
    上一篇:PostgreSQL用户、数据库及表的管理、操作与授权方式
    下一篇:Postgresql 赋予用户权限和撤销权限的实例
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信