postgresql限制某个用户仅连接某一个数据库的操作

创建数据库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)

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

(0)

相关推荐

  • PostgreSQL 自定义自动类型转换操作(CAST)

    背景 PostgreSQL是一个强类型数据库,因此你输入的变量.常量是什么类型,是强绑定的,例如 在调用操作符时,需要通过操作符边上的数据类型,选择对应的操作符. 在调用函数时,需要根据输入的类型,选择对应的函数. 如果类型不匹配,就会报操作符不存在,或者函数不存在的错误. postgres=# select '1' + '1'; ERROR: operator is not unique: unknown + unknown LINE 1: select '1' + '1'; ^ HINT:

  • PostgreSQL报错 解决操作符不存在的问题

    最近才接触到一个用PostgreSQL的项目,然后在开发的过程中发现了这样的一个问题. 错误: 操作符不存在: character = integer 反正还有很多报错的,原因都是类型的转换问题.在mysql中似乎对类型这个概念不是那么敏感,而在PostgreSql中Integer .Long.Date.String 等等之间转换都会存在操作符不存在的报错. 所以在使用非实体进行数据传输的时候,例如Map等等就需要手动设置数据类型. Long orgId = (maps.get("orgId&q

  • postgresql 赋权语句 grant的正确使用说明

    grant select on all tables in schema public to username; 此句是有效的复制语句 PG中有schema的概念, 以下的语句就是不行 网上得来终觉浅,错误比较多,还是要自己试试才行. 补充:postgresql关于访问视图需要的权限 某个用户访问一个视图,这个用户需要具备这个视图的schema的usage和这个视图本身的select权限,如果视图的基表来自其他schema,可能还需要其他schema的usage权限(根据postgresql改造

  • PostgreSQL用户、数据库及表的管理、操作与授权方式

    摘要 PostgreSQL的常用命令 1.登录数据库 /* 切换到数据库用户 */ su - postgres /* 登录 */ psql 登录成功显示如下: bash-4.2$ psql psql (9.3.17) Type "help" for help. postgres=> 2.切换数据库 /* 登录指定数据库 */ psql -U user -d dbname /* 列举数据库 */ \l /* 切换数据库 */ \c dbname 3.用户管理 /* 创建用户 */

  • Postgresql 赋予用户权限和撤销权限的实例

    1.对数据库授权 postgresql 授权某个数据库的权限给wang 账号 使该账号 只能操作指定DB 不能操作其他DB alter user wang set default_transaction_read_only=on; grant all on database test to wang; grant select on all database test to wang; grant select on all tables in schema public to wang; //

  • PostgreSQL 实现快速删除一个用户

    背景 在多租户场景或者其他场景下,很多时候需要主动清理一些用户,本文将介绍PostgreSQL 下如何快速删除一个用户(role). 具体方法 一般情况下直接执行 drop role xxx; 就可以把这个用户删除.但是很多时候会因为用户有依赖而报错. 权限依赖 postgres=# create role test with login; CREATE ROLE postgres=# grant all on database postgres to test; GRANT postgres=

  • postgresql限制某个用户仅连接某一个数据库的操作

    创建数据库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"

  • PowerShell连接SQL SERVER数据库进行操作的实现代码

    核心代码 #配置信息 $Database = 'DemoDB' $Server = '"WIN-AHAU9NO5R6U\DOG"' $UserName = 'kk' $Password = '123456' #创建连接对象 $SqlConn = New-Object System.Data.SqlClient.SqlConnection #使用账号连接MSSQL $SqlConn.ConnectionString = "Data Source=$Server;Initial

  • Django使用mysqlclient服务连接并写入数据库的操作过程

    目录 Django使用mysqlclient服务连接并写入数据库 准备 一.安装mysqlclient服务 二.settings.py文件 1.将子应用写入 2.配置数据库 三.配置urls.py文件 1.初始化应用下的urls.py文件 2.子应用下的urls.py文件 四.配置models.py模型类 五.配置views.py视图类文件 六.在template中编辑HTML页面[比较简易] 七.创建并执行可迁移文件[做过的请省略这一步] 八.效果 九.小结 Django使用mysqlclie

  • PostgreSQL 角色与用户管理介绍

    一.角色与用户的区别 角色就相当于岗位:角色可以是经理,助理.用户就是具体的人:比如陈XX经理,朱XX助理,王XX助理.在PostgreSQL 里没有区分用户和角色的概念,"CREATE USER" 为 "CREATE ROLE" 的别名,这两个命令几乎是完全相同的,唯一的区别是"CREATE USER" 命令创建的用户默认带有LOGIN属性,而"CREATE ROLE" 命令创建的用户默认不带LOGIN属性(CREATE U

  • 干掉一堆mysql数据库,仅需这样一个shell脚本(推荐)

    一大早就被电话吵醒了,云某项目数据库全挂了,启动不了(睡得太死,没听到报警短信),吓得不轻啊! 电话中说所有mysql数据库主库都启动不了,但从库正常,怀疑是主库去连其它阿里云的主库了.这些数据库,以前是从阿里云迁移到idc机房的,因此他有这个判断. 赶紧打开电脑,连***,登录其中一个数据库服务器,试着执行如下命令启动mysql服务 [root@bbsmysql121 backup]#mysqld_safe –user=mysql & 启动失败,又换一台数据库服务器尝试,还是失败.考虑到所有的

  • Django中使用session保持用户登陆连接的例子

    使用session保持用户登陆连接 在 view 中 login() 视图函数里增加如下语句 不允许重复登录语句 if request.session.get('is_login',None): return HttpResponseRedirect(reverse('index')) 一旦用户名和密码输入正确,就往 session 字典内写入用户状态和数据 request.session['is_login'] = True request.session['user_id'] = db_us

  • Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法

    前言 本文主要介绍的是关于Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法,分享出来供大家参考学习,下面来看看详细的介绍: 实现方法: 数据源在配置文件中的配置 <pre name="code" class="java"><?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.spring

  • js之点击 超连接,提示一个层.点击空白层消失

    请教一下.点击 超连接,提示一个层.点击空白.层消失. 原生js版 提示 BODY { BACKGROUND: #fff; FONT: 76%/1.5 Arial,sans-serif; COLOR: #333 } input{ width:200px;border: 1px solid #86B9D6; } #reg_div{ color: #154BA0; border: 1px solid #86B9D6; background: #D9EEF9; position: absolute;

  • Oracle数据库url连接最后一个orcl代表的是配置的数据库SID

    今天生产上项目启动访问 一个数据库的时候,出现了 ORA-12505, TNS:listener does not currently know of SID given in connect desc . 后面看了下,我的数据库配置为: driverClassName=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@158.58.88.102:1521:eskdb username=root password=aaa111 然后看了下

  • vs code连接sql server数据库步骤及遇到的问题小结

    最近因为要在vs code上连接到sql server数据库,第一次尝试,之前用 java的时候使用jdbc连接过数据库,感觉用vs code连接数据库步骤要简单一些,网上写的博客也不是特别多,就顺便把我的步骤记录下来,仅供参考,这里也参考了官网给出的连接方法,链接放在文章下方了. 第一步,安装mssql扩展 先在vs code的扩展里面找到SQL Server(mssql)扩展,并下载安装即可. 下载好之后会出现SQL SERVER的版块.(请忽略已经连接好的数据库) 第二步,连接到 SQL

随机推荐