PostgreSQL之安全机制
文章平均质量分 62
涉及PostgreSQL数据库安全机制的认证安全、数据安全等方方面面。
瀚高PG实验室
瀚高PG实验室(Highgo PG Lab)依托于瀚高DBA运维团队及瀚高数据库PG内核研发团队,旨在深入研究PostgreSQL技术、使用技巧、内核探秘、PG教学等,并进行分享。欢迎大家关注、交流。
展开
-
postgres中的hook机制
利用钩子(hooks),你可以实现许多功能,如创建自定义的查询规划器(custom planner)、输出自定义的解释计划(EXPLAIN)、运行个性化版本的实用工具,或者在执行层面控制查询处理。通过利用这些钩子,你可以修改查询规划过程、自定义解释计划的输出、添加个性化的实用工具或者控制查询在执行阶段的行为,从而满足特定的需求或实现定制化的功能。通过利用这些工具,PostgreSQL开发人员可以在服务器的不同环节插入自己的代码逻辑,扩展服务器的功能或实现自定义的行为,而不需要修改核心代码。原创 2024-03-15 10:16:40 · 1024 阅读 · 0 评论 -
PostgreSQL 约束
PostgreSQL 约束PostgreSQL 约束用于规定表中的数据规则。如果存在违反约束的数据行为,行为会被约束终止。约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。约束确保了数据库中数据的准确性和可靠性。约束可以是列级或表级。列级约束仅适用于列,表级约束被应用到整个表。以下是在 PostgreSQL 中常用的约束。NOT NULL:指示某列不能存储 NULL 值。UNIQUE:确保某列的值都是唯一的。PRI原创 2021-11-25 16:22:52 · 1409 阅读 · 0 评论 -
PostgresSQL访问接口
在一个完整的应用架构中,PG数据库工作在操作系统与应用程序之间,可以运行在各种操作系统上(Linux,Windows,AIX,FreeBSD,Solaris)和其他的类UNIX操作系统上。不同的编程语言使用不同的驱动程序连接到PG数据库,总的来说这些驱动分为两类:① 使用纯语言实现的PG驱动,例如JDBC、.NET等方式。这种连接方式不需要libpq库。② 通过包装PG的C原创 2018-03-07 15:50:31 · 1758 阅读 · 1 评论 -
unix_socket_directories参数
unix_socket_directories参数指定服务器侦听客户端应用程序连接的Unix域套接字的目录。默认值通常是/tmp,但可以更改。此参数只能在服务器启动时设置。除了名为.s.PGSQL.nnnn的套接字文件本身之外,其中nnnn是服务器的端口号,将在每个unix_socket_directories目录中创建一个为.s.PGSQL.nnnn.lock的普通文件。 这两个文件都不应该手动原创 2018-02-08 16:09:41 · 2598 阅读 · 1 评论 -
Postgresql_TCP-IP下监听的配置(listen_addresses)
进入正文前,需要掌握以下知识:关于网络的一个知识点localhost 是个域名,不是地址,它可以被配置为任意的 IP 地址,通常情况下都指向 127.0.0.1(ipv4)和 ::1(ipv6)关于listen_addresses的简单理解:允许Postgres server 监听程序绑定在某种类型(IPV4/IPV6)IP 或者某个具体IP上因为我们知道一个host上可以有多个网卡,每个网卡原创 2017-12-05 11:35:02 · 12322 阅读 · 1 评论 -
使用psql命令基于udp(unix-domain-socket)协议连接postgresql数据库
netstat命令用法参考链接:https://linux.cn/article-2434-1.htmlhttps://segmentfault.com/a/1190000008633528关于UDP与TCP的关系:http://blog.csdn.net/li_ning_/article/details/52117463对于数据库连接而言,通过netstat可以查看当前连接协议,是udp还是tcp原创 2017-11-27 10:39:05 · 3135 阅读 · 0 评论 -
PostgreSQL角色和权限
PostgreSQL是通过角色来管理数据库访问权限的,我们可以将一个角色看成是一个数据库用户,或者一组数据库用户。角色可以拥有数据库对象,如表、索引,也可以把这些对象上的权限赋予其它角色,以控制哪些用户对哪些对象拥有哪些权限。 一、数据库角色: 1. 创建角色: CREATE ROLE role_name;原创 2017-12-21 22:36:39 · 1084 阅读 · 0 评论 -
PostgreSQL之psql 访问数据库的密码验证
psql 访问数据库涉及5个要素: -U 用户名 -W 交互方式输入密码 -h 主机名 -p 端口号 -d 数据库名一般客户端访问需要指定以上5个要素,类似于Oracle客户端 tnsnames.ora文件中的相关设定。服务端通过psql访问数据库如果不指定,通常会查找用户环境变量的相关设置(譬如.bash_profile文件或创建的.mylocalenv文件)。当然验证过程...原创 2018-04-03 23:54:16 · 10970 阅读 · 0 评论 -
postgreSQL默认的隔离级别及修改
SQL标准的4种隔离机制。Isolation levelDirty readsNon-repeatable readsPhantomsRead Uncommittedmay occurmay occurmay occurRead Committeddon't occurmay occur原创 2017-11-02 20:21:28 · 23422 阅读 · 4 评论 -
PostgreSQL中的冻结管理
PostgreSQL将事务ID分成两部分:过去20亿是可见的,未来20亿是不可见的。所有可见行必须始终存在于过去的20亿中。未来的对于当前事务是不可见的。PostgreSQL通过专门标记旧行来避免这种数据丢失问题。冻结(Freezing)是标记旧的实时元组(即数据库行)的进程。它与vacuum相反,vacuum是旧的死元组占用的空间,任何事务都不可见。这两个进程都是由vacuum管理的。...原创 2019-02-21 10:50:04 · 2074 阅读 · 0 评论 -
参数log_statement 设置为ddl级别及以上存在密码泄露风险
目录环境症状问题原因解决方案环境系统平台:N/A版本:4.1.1症状log_statement参数,一般设置为ddl级别以上的选项,但是该方式存在风险,任何修改用户密码的操作都将被明文记录到日志中,建议在修改用户密码前,临时关闭该参数。问题原因在生产环境中,数据库日志记录功能必不可少。log_statement参数控制数据库日志记录哪些SQL,可以选...原创 2019-02-25 09:26:02 · 1095 阅读 · 0 评论 -
数据库的语言显示
首先应该知道常见的消息显示是分为系统层面和数据库层面的:系统层面很简单,直接修改LANG值,重载生效就可以了:export LANG=en_US.UTF-8 【临时生效,也可写入~/.bash_profile文件中】 (中文为zh_CN.UTF-8)永久生效:修改/etc/sysconfig/i18n文件 (安装中文支持包:yumgroupinstallchinese-su...原创 2018-11-08 15:56:31 · 529 阅读 · 0 评论 -
PostgreSQL之V10用户密码认证及加密算法scram-sha-256
PG V10官方手册关于用户密码的描述PostgreSQL数据库口令独立于操作系统用户口令。每个数据库用户的口令被存储在pg_authid系统目录中。口令可以用 SQL 命令CREATE USER和ALTER ROLE管理,例如CREATE USER foo WITH PASSWORD 'secret', 或者psql命令\password。如果没有为一个用户设置口令,那么存储的口...原创 2018-10-12 10:56:06 · 9674 阅读 · 0 评论 -
如何有效的防止Out Of Memory Killer (OOM)干掉关键进程
内核参数overcommit_memory 它是 内存分配策略可选值:0、1、2。0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。2, 表示内核允许分配超过所有物理内存和交换空间总和的内存内核参数vm.overcommit_ra...原创 2018-04-27 17:12:40 · 1761 阅读 · 0 评论 -
Postgresql 之 数据库认证
密码存储的安全注意事项 CREATE ROLE name [ [ WITH ] option [ … ] ] | [ ENCRYPTED | UNENCRYPTED ] PASSWORD ‘password’ ENCRYPTED 存储为MD5 UNENCRYPTED 存储为明文示例: alter role rep encrypted password ‘123’; ALT原创 2018-01-17 00:26:04 · 3751 阅读 · 0 评论 -
postgresql如何禁止在数据库执行drop table操作
如何禁止数据库执行drop table的操作?创建触发器函数:CREATE OR REPLACE FUNCTION abort_DROP_TABLE()RETURNS event_triggerLANGUAGE plpgsqlAS BEGINiftgtag=′DROPTABLE′THENRAISEEXCEPTION′commandENDif;END;BEGIN if tg_tag = 'DROP TABLE' THEN RAISE EXCEPTION 'command原创 2021-06-25 15:17:51 · 1567 阅读 · 0 评论 -
怎么查看postgresql数据库用户系统权限、对象权限
作者:瀚高PG实验室 (Highgo PG Lab)-徐云鹤使用pg数据库可以通过如下方法查询用户的系统权限和对象权限。1、查看某用户的系统权限SELECT * FROM pg_roles WHERE rolname='postgres';2、查看某用户的表权限select * from information_schema.table_privileges where grantee='postgres';3、查看某用户的usage权限select * from in..原创 2020-12-18 14:59:17 · 19391 阅读 · 10 评论