• 售前

  • 售后

热门帖子
入门百科

postgresql限制某个用户仅毗连某一个数据库的操纵

[复制链接]
天主的爱 显示全部楼层 发表于 2021-10-26 13:02:39 |阅读模式 打印 上一主题 下一主题
创建数据库bbb且owner为用户b:
  1. postgres9.6@[local]:5432 postgres# create database bbb owner b;
  2. CREATE DATABASE
  3. Time: 259.099 ms
复制代码
默认情况下使用用户c也可以毗连数据库bbb:
  1. postgres9.6@[local]:5432 postgres# \c bbb c
  2. You are now connected to database "bbb" as user "c".
复制代码
回收public的connect on database bbb权限:
  1. c@[local]:5432 bbb# \c postgres postgres9.6
  2. You are now connected to database "postgres" as user "postgres9.6".
  3. postgres9.6@[local]:5432 postgres# revoke connect on database bbb from public;
  4. REVOKE
  5. Time: 2.088 ms
复制代码
此时用户c没有了毗连数据库bbb的权限:
  1. postgres9.6@[local]:5432 postgres# \c bbb c
  2. FATAL: permission denied for database "bbb"
  3. DETAIL: User does not have CONNECT privilege.
  4. Previous connection kept
复制代码
但bbb数据库的owner用户b可以毗连数据库:
  1. postgres9.6@[local]:5432 postgres# \c bbb b
  2. You are now connected to database "bbb" as user "b".
  3. b@[local]:5432 bbb#
复制代码
此种情况下超等用户也可以毗连该数据库:
  1. b@[local]:5432 bbb# \c bbb postgres9.6
  2. You are now connected to database "bbb" as user "postgres9.6".
  3. postgres9.6@[local]:5432 bbb#
  4. postgres9.6@[local]:5432 bbb# \du
  5.                   List of roles
  6. Role name |             Attributes             | Member of
  7. -------------+------------------------------------------------------------+-----------
  8. a      |                              | {}
  9. b      |                              | {}
  10. c      |                              | {}
  11. postgres9.6 | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
复制代码
别的一种方法:从pg_hba.conf中限定:
  1. # TYPE DATABASE    USER      ADDRESS         METHOD
  2. # "local" is for Unix domain socket connections only
  3. local  all       all                  trust
  4. # IPv4 local connections:
  5. host  all       all       127.0.0.1/32      trust
  6. ...
  7. #
  8. host  all  all        0.0.0.0/0       md5
复制代码
补充:Postgres限制每个用户只能毗连指定命量的session,防止服务器资源告急
限制每个用户只能毗连指定命量的session,防止服务器资源告急
(1)创建测试用户test:
  1. highgo=#create user test;
  2. CREATEROLE
  3. highgo=#\du
  4.                List of roles
  5. Role name |          Attributes          | Member of
  6. -----------+------------------------------------------------+----------
  7. highgo  | Superuser, Create role, Create DB, Replication | {}
  8. test   |                        | {}
复制代码
(2)设置仅答应用户test使用一个毗连
  1. highgo=#ALTER ROLE test CONNECTION LIMIT 1;
  2. ALTERROLE
复制代码
(3)在session 1中使用test用户毗连highgo数据库
  1. highgo=>\c highgo test
  2. Youare now connected to database "highgo" as user "test".
  3. highgo=>
复制代码
(4)在session 2中也使用test用户毗连highgo数据库,会出现如下错误:
  1. highgo=#\c highgo test
  2. 致命错误: 由角色"test"发起的连接太多了
  3. Previousconnection kept
复制代码
(5)查询用户test链接限制
  1. highgo=>SELECT rolconnlimit FROM pg_roles WHERE rolname = 'test';
  2. rolconnlimit
  3. --------------
  4.       1
  5. (1row)
复制代码
以上为个人经验,渴望能给大家一个参考,也渴望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝见教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作