PostgreSQL 1-1 源码安装 (linux / macos)

摘要 本文介绍介绍如何在2种个人PC中,使用源码安装PostgreSQL,包括: 在Windows操作系统中,如何基于VwWare虚拟机,搭建Linux环境。并在Linux中,通过postgreSQL源码进行编译安装。 在MacOS操作系统中,如何使用云服务器中的Linux操作系统,搭建postgreSQL源码编译与学习环境。 目录 1 在Windows中安装PostgreSQL 1.1 目的 1.2 准备 1.3 编译源码 1.4 配置快捷命令 2 在MacOS中安装PostgreSQL 2.1 问题 2.2 调研云服务商 2.3 选择云服务器 2.4 配置云服务器 2.5 下载postgreSQL源码 1 在Windows中安装PostgreSQL 1.1 目的 通过postgreSQL源码进行编译安装,主要目的是: 方便通过源码调试跟踪 直接修改以增加调试信息或新功能 1.2 准备 首先,介绍如何准备centOS虚拟机,并安装git、VSCode、gdb等工具 已有windows 10/11 x86物理机 window 10中,安装vmware vmware中,安装centOS虚拟机 http://mirrors.huaweicloud.com/centos/8.4.2105/isos/x86_64/ centOS中,安装git,以及中文输入法 centOS中,安装VSCode https://code.visualstudio.com/docs/setup/linux#_rhel-fedora-and-centos-based-distributions centOS中,安装PostgresSQL依赖的第三方开源软件 sudo yum install -y readline readline-devel openssl openssl-devel zlib zlib-devel # 但是,部分linux可能会裁剪应用,因此可能需要安装如下软件 sudo yum install -y bison bison-devel flex flex-devel #[参考](https://blog.csdn.net/Linjingke32/article/details/80393576) 安装调试工具 ...

January 21, 2025 · 3 min · 465 words · Me

数据库安全 4 访问控制

1 访问控制的背景 在使用数据库存取数据的大部分场景中,数据库具有以下特点: 对象多:一个数据库集群中有多个database对象,1个database对象中有多个schema对象,1个schema对象中有多个table、index等对象 用户多:一个数据库中,有多个用户,每个用户可访问的数据库对象不同 在该场景中,通过访问控制机制,可限制某个对象访问数据库对象的范围 2 访问控制的原理 访问控制的模型是:主体、客体、操作。本文不解释基本概念。 主体 USER 角色: SYSADMIN 系统管理员 CREATEROLE 安全管理员 AUDITADMIN 审计管理员 MONADMIN 监控管理员 OPRADMIN 运维管理员 POLADMIN 安全策略管理员 客体 DATABASE SCHEMA TABLESPACE TABLE COLUMN FUNCTION PROCEDURE SEQUENCE FOREIGN SERVER LANGUAGE 操作 客体 CREATE DATABASE, SCHEMA, TABLESPACE ALTER DATABASE, SCHEMA, TABLESPACE, TABLE, FUNCTION, PRODUCE, FOREIGN SERVER, DIRECOTRY, PACKAGE DROP DATABASE, SCHEMA, TABLESPACE, TABLE, FUNCTION, PRODUCE, FOREIGN SERVER, DIRECOTRY, PACKAGE TRUNCATE TABLE VACUUM TABLE INDEX TABLE TRIGGER TABLE SELECT TABLE, COLUMN, SEQUENCE INSERT TABLE, COLUMN UPDATE TTABLE, COLUMN, SEQUENCE DELETE TABLE TEMPORARY DATABASE EXECUTE FUNCTION, PROCEDURE, PACKAGE 语法: ...

February 5, 2025 · 6 min · 1187 words · Me

强制访问控制

1 背景 1.1 友商分析 oracle 范围:行级、列级 实现:动态谓词过滤 金仓 范围:列级 mysql 无 sql server 范围:行级 实现:谓词过滤 oracle 基于标签的访问控制OLS:绝密HS、机密S、秘密C、公开P https://docs.oracle.com/en/database/oracle/oracle-database/26/olsag/part1.html#GUID-C20C62AE-2A30-45F9-AEEA-52A0D3286FBA -- 1 定义策略 SA_SYSDBA.CREATE_POLICY(policy_name => 'HR_POLICY', column_name => 'HR_LABEL') -- 2 定义标签 SA_COMPONENTS.CREATE_LEVEL('HR_POLICY', 1000, 'PUBLIC', 'P'); -- 3 设置标签属性 SA_USER_ADMIN.SET_LEVELS('HR_POLICY', 'SCOTT', 'C', 'S'); SA_USER_ADMIN.SET_COMPARTMENTS('HR_POLICY', 'SCOTT', 'FIN'); -- 4 插入数据(主动定义标签) INSERT INTO employees (emp_id, emp_name, salary, HR_LABEL) VALUES (1001, 'John Doe', 50000, CHAR_TO_LABEL('HR_POLICY', 'C:FIN')); sql server:无 kngbase 行级 链接:https://help.kingbase.com.cn/v8/safety/safety-guide/label-and-mac.html#id5 范围:table, view, index, procedure, function, package, sequence, trigger, synonym ...

March 16, 2026 · 1 min · 201 words · Me

海量 mac 设计

1 强制访问控制 1.1 功能简述 从实现的角度看,当用户执行SQL时,强制访问控制主要实现以下功能: CREATE ACCESS POLICY ..:在系统表中,记录ACCESS POLICY,以及其中的LABLE等信息 CREATE TABLE ..:创建表时,如果设置acess_policy字段,则自动为表新增1列隐藏列,列名为access_label INSERT ..:向表插入数据时,根据当前用户的write_label,自动为数据生成access_label列的值。 SELECT ..:从表查询数据时,根据当前用户的read_label,自动为查询语句添加过滤条件has_mac_permission(access_label, read_label) 另外,如果为表设置访问策略,需在索引中同时设置访问策略: CREATE INDEX ..:自动为索引新增1列,列名为access_label 对于一些其他语法,也许单独适配,包括: COPY ..:自动修改旧数据的access_label值 1.2 实现方案 1.2.1 整体流程 本文重点从源码角度,介绍强制访问控制策略如何基于隐藏列,实现强制访问控制,包括:创建、填充、匹配隐藏列等流程。 核心功能的大致流程如下: User Vastbase Disk +---------------------------------------------------+---------------------------------------------------------+ # 管理员 | 1. CREATE ACCESS POLICY .. LEVEL .. LABEL .. --> | | 2. 存储access policy至系统表vb_access_policy --> | 3. 存储access level至系统表vb_access_level --> | 4. 存储access label至系统表vb_access_label --> | 5. CREATE TABLE .. (access_policy=..) --> | | 6. 识别是否设置access_policy | 7. 自动添加隐藏列access_label | 8. 存储access_policy至系统表pg_class --> | 9. 存储accessl_label定义至系统表pg_attribute --> | 10. CREATE USER .. ACCESS POLICY .. READ LABEL .. WRITE LABEL --> | | 11. 存储access_policy, read_label, write_label至系统表pg_authid --> # 普通用户 | 12. vsql -U username -W password --> | | 14. set read_label = .. / write_label = .. --> | | 15. 查询pg_authid,判断read_label/write_label是否合法 <-- | 16. 设置临时的read_label/write_label | 17. 如何用户未自动设置read_label/write_label,自动根据pgauthid设置 | 18. INSERT .. --> | | 19. 查询pg_class,判断表是否有access_policy <-- | 20. 自动为隐藏列赋值,取值为write_label | 21. SELECT .. --> | | 22. 查询pg_class,判断表是否有access_policy <-- | 23. 语义分析 | 24. 查询重写:自动新增过滤条件:WHERE has_mac_permission(access_label, read_label) | 24. 计划执行:扫描Tuple,根据过滤条件,过滤不满足权限检查的Tuple 1.2.2 详细流程 一、创建策略 当用户创建策略时,例如: ...

March 23, 2026 · 4 min · 759 words · Me

海量 mac 需求

1 简介 1.1 目的 本文主要包括以下关键内容: 介绍访问控制的基本概念 调研其他厂商实现强制控制的方式 设计Vastbase强制访问控制特性,介绍如何使用强制访问特性 1.2 适用范围 Vastbase V5版本。 1.3 术语定义、首字母缩写词和缩略语 MAC:Mandatory Access Control,强制访问控制,主体访问客体时,基于主体、客体属性,强制控制访问权限。 DAC:Discretionary Access Control,自主访问控制,数据拥有者可自行设置访问权限。 1.4 参考资料 oracle 强制访问控制(标签访问控制 RLS):https://docs.oracle.com/en/database/oracle/oracle-database/26/olsag/part1.html#GUID-C20C62AE-2A30-45F9-AEEA-52A0D3286FBA oceanbase 强制访问控制(兼容oracle):https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004475944 kingbase 强制访问控制:https://bbs.kingbase.com.cn/kingbase-doc/v8.6.7.24/safety/safety-guide/label-and-mac.html dm 强制访问控制:https://eco.dameng.com/document/dm/zh-cn/pm/mandatory-access-control.html GB/T-20009-数据库管理系统安全评估准则:https://drive.weixin.qq.com/s?k=AHUAfwdSAA82aDcvvD postgresql 行级访问控制 RLS:https://www.postgresql.org/docs/current/ddl-rowsecurity.html 2 强制访问控制 2.1 功能简述 一、基本概念 访问控制的定义:对主体访问客体的行为,系统按照安全策略进行限制与管理的安全机制。 按安全策略分类,可将访问控制分为很多类,其中,常见的策略有: 自主访问控制DAC:客体的拥有者,可自行向其他主体赋予访问权限。 强制访问控制MAC:系统为主体、客体分配安全标签,通过主体、客体的安全标签控制访问权限,很多情况下,即使客体的拥有者也无法向其他主体赋予访问权限。 角色访问控制RBAC:不在本文讨论范围。 在数据库领域,主体通常指数据库用户,客体通常指数据库对象,例如DATABASE、SCHEMA、TABLE、COLUMN、ROW、FUNCTION等。 自主访问控制比较成熟,几乎所有关系数据库,都提供自主访问控制特性,例如,TABLE(客体)的属主(主体),可通过GRANT .. TO ..等语法,为其他用户(主体)赋予权限。 强制访问控制理论比较成熟,但是,除oracle支持强制访问控制,以及oceanbase等几款产品兼容oracle强制访问控制之外,大部分关系数据库不支持强制访问控制。 实现强制访问控制时,通常将主体、客体的安全标签,简化为安全等级,当主体访问客体时,比较主体、客体等级高低,以判断访问权限。在机密性场景,遵循不上读、不下写原则。在完整性场景,遵循不下读、不上写原则。 本需求将从0设计强制访问控制特性,在保障功能、性能、易用性、可用性、可维护性、可扩展性等的前提下,让特性达到商用标准。 二、竞品分析 oracle支持强制访问控制,客体是ROW,即行级强制访问控制。oceanbase、kingbase、dm的访问控制,与oracle一致。sql server、postgresql等其他产品不支持强制访问控制。 oracle强制访问控制使用示例如下: -- 1 定义策略 SA_SYSDBA.CREATE_POLICY(policy_name => 'p1', column_name => 'lab_col1') -- 2 定义级别 SA_COMPONENTS.CREATE_LEVEL(policy_name => 'p1', level_num => 1, short_name => 'x1', long_name => 'x1'); SA_COMPONENTS.CREATE_LEVEL('p1', 20, 'x2', 'x2'); SA_COMPONENTS.CREATE_LEVEL('p1', 30, 'x3', 'x3'); -- 3 定义组件 SA_COMPONENTS.CREATE_LEVEL(policy_name =>'p1', comp_num => 100, short_name => 'sec', long_name => 'security'); SA_COMPONENTS.CREATE_LEVEL('p1', 200, 'stg', 'storage'); -- 4 创建标签 SA_SYSDBA.CREATE_LABEL(policy_name => 'p1', label_tag => 'sec_normal', label_value => 'x1:security', data_label => TRUE); SA_SYSDBA.CREATE_LABEL('p1', 'sec_leader', 'x3:security', false); -- 5 为主体设置属性 SA_USER_ADMIN.SET_LEVELS(policy_name => 'p1', user_name => 'user1', max_level => 'x2', min_level => 'x1', default_level => 'x1', row_level => 'x1'); SA_USER_ADMIN.SET_COMPARTMENTS(policy_name => 'p1', user_name => 'user1', read_comps => 'sec', write_comps => 'sec', default_comps => 'sec', row_comps => 'sec'); -- 6 为客体设置属性 CREATE TABLE t1(c1 INT); SA_USER_ADMIN.APPLY_TABLE_POLICY(policy_name=> 'p1', shema_name => 's1', table_name => 't1', table_options => 'READ_CONTROL, WRITE_CONTROL, CHECK_CONTROL', label_function => 'f_create_t1_label(level, comp)'); -- 7 插入数据(主动定义标签) INSERT INTO t1 (c1, lab_col1) VALUES (1, CHAR_TO_LABEL('p1', 'x1:sec')); 三、实现思路 在数据库领域,除oracle外,没有其他可借鉴的方案。oracle的设计,太复杂,易用性太低。 本需求将参考oracle的思想,简化oracle设计。 ...

March 23, 2026 · 6 min · 1130 words · Me
心情不好的时候可以点一下 🐱
×
🤖 Doubao AI ×
Hi! 我是你的技术助手。关于代码、架构或 Bug,随时问我!🚀