记GaussDB(for PostgreSQL)入门SQL操作

目录

前言

[一、登录GaussDB(for PostgreSQL)](#一、登录GaussDB(for PostgreSQL))

二、相关SQL操作

[1. 权限执行矩阵表](#1. 权限执行矩阵表)

[2. 建库,建用户,给用户授权](#2. 建库,建用户,给用户授权)

[3. 建表及测试](#3. 建表及测试)

[4. 更细粒度的权限控制](#4. 更细粒度的权限控制)

总结


前言

数据库:GaussDB(for PostgreSQL)

连接工具:DBeaver(海狸),需要找到合适版本的JDBC驱动进行连接。

GaussDB(for PostgreSQL)实例,登录的IP组,端口,用户名(我这里使用root),密码

因为我是第一次使用GaussDB(for PostgreSQL)数据库,所以我来这里做下记录。


一、登录GaussDB(for PostgreSQL)

GaussDB(for PostgreSQL)数据库中有一个或多个超级用户,用户属性是pg_superuser的用户,比如postgres用户属性可能默认是pg_superuser,那么就是超级用户。

我这里被分配的登录用户(root)非超级用户,但是被属于了一定的权限。

DBeaver登录方式,新建一个连接如图:

需要输入IP地址,端口,数据库,用户名和密码然后点击测试连接是否通过,通过就确定。

这里没有数据库的就填写默认postgres或gaussdb库。选择编辑驱动设置可以更换JDBC驱动包:

把其它的驱动库都删除,换成你的就行。因为是图形工具连接是需要JBDC驱动的,如果是命令行客户端登录就不需要。以后的文章记录再说这一点。

注意:一定要选择匹配的JDBC驱动包版本,不然报错连接不上数据库。

我在连接的时候就尝试了多个版本的驱动包。

我在https://jdbc.postgresql.org/download/这个地址下载了这时候最新的42.7.8的驱动包都报错,"SCRAM认证错误",较早的时候用的MDS,这个时候可能是scram-sha-256这个了。

最后能登录的驱动是从这里下载的:openGauss-JDBC-6.0.3.tar.gz --解压后用postgresql.jar

openGauss软件 | openGauss下载 | openGauss软件包 | openGauss社区https://opengauss.org/zh/download/

二、相关SQL操作

1. 权限执行矩阵表

操作 所需最低权限 建议执行用户 说明
创建数据库 CREATEDB超级用户 postgres(超级用户) 普通用户无法创建数据库
创建用户/角色 CREATEROLE超级用户 postgres(超级用户) 创建用户是系统级操作
授予数据库权限 数据库所有者或超级用户 postgres 或 数据库所有者
在数据库中创建表 CREATE 权限 + 数据库连接权限 业务库的所有者(专门管理员) 在授权后
授予表权限 表所有者或超级用户 表所有者或 postgres

2. 建库,建用户,给用户授权

复制代码
说明:以下操作postgres用户是超级用户

1 建立自己的业务库(我这里root用户执行)
-- 用户:postgres(或具有CREATEDB权限的用户)
CREATE DATABASE myapp_db 
    ENCODING 'UTF8'
    OWNER root;  -- 设置所有者

2 创建业务库的用户(我这里root用户执行)
-- 用户:postgres(或具有CREATEROLE权限的用户)
CREATE USER app_admin WITH 
    PASSWORD 'AdminPass123!'
    NOSUPERUSER
    NOCREATEDB     -- 不能创建数据库
    NOCREATEROLE   -- 不能创建用户
    LOGIN;

3 授予用户对数据库的连接权限(我这里root用户执行)
-- 用户:数据库所有者或超级用户执行
GRANT CONNECT ON DATABASE myapp_db TO app_admin;
复制代码
4 连接/切换到业务数据库(myapp_db )继续授权 
我这里是DBeaver工具上新建连接以root用户登录,连接到新建的myapp_db库进行操作。也就是执行授权的用户还是root.
-- 操作:授予schema权限(必须在目标数据库中执行,这里就是myapp_db)
-- 用户:postgres(或schema所有者)(我这里root用户执行,root拥有public模式[SCHEMA])
GRANT CREATE, USAGE ON SCHEMA public TO app_admin; 

5 设置新建用户的默认权限
-- 操作:设置默认权限(影响未来创建的对象)
-- 用户:postgres(我这里root用户执行)
ALTER DEFAULT PRIVILEGES IN SCHEMA public 
    GRANT ALL ON TABLES TO app_admin;
    
ALTER DEFAULT PRIVILEGES IN SCHEMA public 
    GRANT ALL ON SEQUENCES TO app_admin;

个人记录:这里的授权貌似一种继承关系,用户A拥有的权限才有可能授予给B。

3. 建表及测试

复制代码
1 用新用户(app_admin)登录
新建一个DBeaver连接,使用app_admin用户登录myapp_db库。

2 创建表
-- 用户:app_admin执行
CREATE TABLE test_table (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100)
);
--添加数据, 用户:app_admin执行
INSERT INTO test_table (name) VALUES ('测试数据');
SELECT * FROM test_table;

3 测试越权操作(应该失败)
-- 用户:app_admin执行
CREATE DATABASE my_db2;  -- 失败:无CREATEDB权限
CREATE USER my_user2;    -- 失败:无CREATEROLE权限

4. 更细粒度的权限控制

复制代码
-- 创建不同权限级别的用户
-- 只读用户
CREATE USER app_readonly WITH PASSWORD 'ReadonlyPass!';
GRANT CONNECT ON DATABASE myapp_db TO app_readonly;
\c myapp_db --这是命令行指令,不是SQL语句
GRANT USAGE ON SCHEMA public TO app_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO app_readonly;

-- 读写用户(应用使用)
CREATE USER app_rw WITH PASSWORD 'RwPass!';
GRANT CONNECT ON DATABASE myapp_db TO app_rw;
\c myapp_db --这是命令行指令,不是SQL语句
GRANT USAGE ON SCHEMA public TO app_rw;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_rw;
GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO app_rw;

-- 创建专门的 schema 进行隔离(不同业务模块使用不同 schema)
\c myapp_db postgres  -- 用超级用户连接,这是命令行指令,不是SQL语句
CREATE SCHEMA finance;
GRANT USAGE ON SCHEMA finance TO app_admin;

-- 5.3 权限委派(app_admin 可以授权给他人)
-- 超级用户执行:
GRANT app_admin TO some_other_user;  -- 让其他用户继承 app_admin 角色

5. 相关语句补充

复制代码
-- 查看当前连接用户
SELECT current_user;
SELECT session_user;

-- 检查是否是超级用户
SELECT rolsuper FROM pg_roles WHERE rolname = current_user;

-- 检查用户的权限
SELECT 
    rolname,
    rolsuper,      -- 是否是超级用户
    rolcreaterole, -- 是否能创建角色
    rolcreatedb,   -- 是否能创建数据库
    rolcanlogin    -- 是否能登录
FROM pg_roles 
WHERE rolname = 'app_admin';

-- 给库创建专门的管理用户(比如叫 app_admin)
CREATE USER app_admin WITH 
    PASSWORD 'StrongPass123!'  -- 请使用强密码
    NOSUPERUSER                -- 不是超级用户
    NOCREATEDB                 -- 不能创建数据库
    NOCREATEROLE               -- 不能创建角色/用户
    LOGIN                      -- 允许登录
    CONNECTION LIMIT 20        -- 连接数限制
    VALID UNTIL '2025-12-31';  -- 有效期(可选)

总结

总结是不想总结了,

相关推荐
ascarl20102 小时前
Oracle 12c 官方卸载工具 (Deinstall Tool) 标准流程
数据库·oracle
之歆2 小时前
Agent:链式工作流模式
数据库
n***33352 小时前
MySQL数据可视化实战指南
数据库·mysql·信息可视化
忧郁的Mr.Li2 小时前
Redis的过期删除策略和内存淘汰策略
数据库·redis·缓存
時肆4852 小时前
MySQL数据可视化实战指南
数据库·mysql·信息可视化
yumgpkpm2 小时前
基于GPU的Spark应用加速 Cloudera CDP/华为CMP鲲鹏版+Nvidia英伟达联合解决方案
大数据·数据库·人工智能·hadoop·elasticsearch·spark·cloudera
一人の梅雨2 小时前
阿里巴巴商品详情接口实战:B2B供应链视角下的高可用集成与数据价值挖掘
大数据·数据库·人工智能
天码-行空2 小时前
Oracle 19c(19.3.0.0)完整安装教程(Windows+Linux双环境)
linux·运维·数据库·oracle
Mr__Miss2 小时前
Redis的多级缓存
数据库·redis·缓存