活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业服务商合作专区 国家云助力中小企业腾飞,高额上云补贴重磅上线
  • 出海产品促销专区 NEW 爆款云主机低至2折,高性价比,不限新老速来抢购!
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心
      文档中心

      数据仓库服务

      数据仓库服务

        • 产品动态
        • 产品简介
        • 产品定义
        • 产品优势
        • 功能特性
        • 应用场景
        • 术语解释
        • 与其他云服务的关系
        • DWS权限管理
        • 如何访问DWS
        • 使用限制
        • 技术指标
        • 计费说明
        • 资源节点
        • 产品规格
        • 产品价格
        • 计费模式
        • 购买
        • 变更
        • 续订
        • 退订
        • 快速入门
        • 注册天翼云账号
        • 入门前准备
        • 创建集群
        • 连接集群
        • 查看其它资料并清理资源
        • 用户指南
        • 使用简介
        • 准备工作
        • 创建与删除集群
        • 创建专属集群
        • 包年/包月计费操作
        • 删除集群
        • 连接集群
        • 连接集群的方式
        • 获取集群连接地址
        • 使用gsql命令行客户端连接集群
        • 下载客户端
        • 使用Linux gsql客户端连接集群
        • 使用Windows gsql客户端连接集群
        • 使用SSL进行安全的TCP/IP连接
        • 使用Data Studio图形界面客户端连接集群
        • 使用JDBC和ODBC连接集群
        • 使用Python第三方库psycopg2连接集群
        • 使用Python第三方库PyGreSQL连接集群
        • 管理数据库连接
        • 监控与告警
        • Cloud Eye监控集群
        • 事件通知
        • 事件通知概述
        • 查看事件
        • 告警管理
        • 告警管理简介
        • 告警规则
        • 订阅告警通知
        • 变配与扩容
        • 查看巡检
        • 节点管理
        • 节点变更
        • 集群扩容
        • 集群重分布
        • 重分布
        • 查看重分布详情
        • 集群缩容
        • 规格变更
        • 集群高可用
        • 管理快照
        • 快照概述
        • 手动快照
        • 自动快照
        • 查看快照信息
        • 恢复快照
        • 集群容灾
        • 容灾概述
        • 创建容灾
        • 查看容灾信息
        • 容灾管理
        • 容灾互斥案例
        • 集群绑定和解绑ELB
        • 管理CN节点
        • 集群运维
        • 智能运维
        • 智能运维概览
        • 管理运维计划
        • 查看运维任务
        • 解除只读
        • 管理快照
        • 重启集群
        • 重置密码
        • 升级集群
        • 审计日志
        • 审计日志概述
        • 管理控制台审计日志
        • 数据库审计日志
        • 设置数据库审计日志
        • 转储数据库审计日志
        • 查看数据库审计日志
        • 集群管理
        • 修改数据库参数
        • 查看集群状态
        • 查看集群详情
        • 修改集群名称
        • 管理集群访问域名
        • 集群拓扑图
        • 删除集群
        • 管理企业项目
        • 管理创建失败的集群
        • 集群主备恢复
        • 启停集群
        • 数据库用户管理
        • 升级集群
        • 集群日志管理
        • 集群安全管理
        • 设置三权分立
        • 资源管理
        • 概述
        • 资源池
        • 功能介绍
        • 添加资源池
        • 修改资源池
        • 删除资源池
        • 资源管理计划
        • 资源管理计划操作
        • 资源管理计划阶段
        • 空间管理
        • 管理数据源
        • 管理MRS数据源
        • 逻辑集群管理
        • 逻辑集群概述
        • 添加/删除逻辑集群
        • 管理逻辑集群
        • 教程:已有数据的物理集群转换逻辑集群
        • 教程:新物理集群划分为逻辑集群
        • 最佳实践
        • 导入导出
        • 导入数据最佳实践
        • GDS实践指南
        • 教程:从OBS导入数据到集群
        • 教程:使用GDS从远端服务器导入数据
        • 调优表实践
        • 表结构设计
        • 调优表概述
        • 选择表模型
        • 步骤1:创建初始表并加装样例数据
        • 步骤2:测试初始表结构下的系统性能并建立基线
        • 步骤3:调优表操作具体步骤
        • 步骤4:创建新表并加载数据
        • 步骤5:测试新的表结构下的系统性能
        • 步骤6:调优表性能评估
        • 附录:表创建语法
        • 附录使用说明
        • 初始表创建
        • 设计调优后二次表创建
        • 外表创建
        • 数据库管理
        • SQL查询优秀实践
        • 分析正在执行的SQL
        • 数据倾斜查询优秀实践
        • 导入过程存储倾斜即时检测
        • 快速定位查询存储倾斜的表
        • 用户管理优秀实践
        • 查看表和数据库的信息
        • 安全管理
        • 基于角色的权限管理(RBAC)
        • 实现数据列的加解密
        • 常见问题
        • 计费类
        • 购买类
        • 操作类
        • 通用问题
        • 集群管理
        • 数据库连接
        • 数据导入导出
        • 帐户、密码、权限
        • 数据库使用
        • 数据库性能
        • 相关协议
        • 数据仓库服务产品服务协议
        • 文档下载
        • 数据仓库服务用户操作指南
        • 数据仓库服务用户开发指南
        • 数据仓库服务工具指南
        • 数据仓库服务SQL语法参考
        • 数据仓库服务故障排除
        • 数据仓库服务错误码参考
          无相关产品

          本页目录

          帮助中心数据仓库服务常见问题操作类帐户、密码、权限
          帐户、密码、权限
          更新时间 2023-11-28 15:32:27
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          最近更新时间: 2023-11-28 15:32:27
          分享文章
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          本章节主要介绍操作类问题中有关帐户、密码、权限的问题。

          DWS如何实现业务隔离

          业务隔离

          DWS中可以使用Database和Schema实现业务的隔离,区别在于:

          • Database之间无法直接互访,通过连接隔离实现彻底的权限隔离。各个Database之间共享资源极少,可实现连接隔离、权限隔离等。
          • Schema隔离的方式共用资源较多,可以通过GRANT与REVOKE语法便捷地控制不同用户对各Schema及其下属对象的权限,从而赋给业务更多的灵活性。

          从便捷性和资源共享效率上考虑,推荐使用Schema进行业务隔离。建议系统管理员创建Schema和Database,再赋予相关用户对应的权限。

          权限控制

          图16-3 权限控制.png

          DATABASE

          数据库Database是数据库对象的物理集合,不同Database之间资源完全隔离(除部分共享对象之外)。即Database是对业务的物理隔离,不同Database的之间的对象不能相互访问。比如在Database A中无法访问Databse B中的对象。因此登录集群的时候必须显示指定要连接的Databse。

          SCHEMA

          数据库里面通过Schema把数据库对象进行逻辑划分,在Database中,通过Schema实现对数据库对象的逻辑隔离。

          通过权限管理实现在同一个session下对不同Schema下对象的访问和操作权限。Schema下则是各种应用程序会接触到的对象,比如表,索引,数据类型,函数,操作符等。

          同一个Schema下,不能存在同名的数据库对象;但是不同Schema下的对象名可以重复。

          gaussdb=> CREATE SCHEMA myschema; 
          CREATE SCHEMA 
          gaussdb=> CREATE SCHEMA myschema_1; 
          CREATE SCHEMA 
           
          gaussdb=> CREATE TABLE myschema.t1(a int, b int) DISTRIBUTE BY HASH(b); 
          CREATE TABLE 
          gaussdb=> CREATE TABLE myschema.t1(a int, b int) DISTRIBUTE BY HASH(b); 
          ERROR:  relation "t1" already exists 
          gaussdb=> CREATE TABLE myschema_1.t1(a int, b int) DISTRIBUTE BY HASH(b); 
          CREATE TABLE
          

          Schema实现了对业务的逻辑划分,反过来这些业务对象也对Schema形成一种依赖关系,因此当Schema下存在对象时,删除Schema的时候会报错,并提示具体的依赖信息。

          gaussdb=> DROP SCHEMA myschema_1; 
          ERROR: cannot drop schema myschema_1 because other objects depend on it  
          Detail: table myschema_1.t1 depends on schema myschema_1  
          Hint: Use DROP ... CASCADE to drop the dependent objects too.
          

          当删除Schema的时候加上CASCADE选项,把Schema以及依赖此Schema的选项连带删除。

          gaussdb=> DROP SCHEMA myschema_1 CASCADE; 
          NOTICE:  drop cascades to table myschema_1.t1 
          gaussdb=> DROP SCHEMA
          

          USER/ROLE

          用户或角色是数据库服务器(集群)全局范围内的权限控制系统,是集群业务的所有者和执行者,用于各种集群范围内所有的对象权限管理。因此角色不特定于某个单独的数据库,但角色登录集群的时候必须要显式指定登录的用户名,以保证当前连接执行的操作者的透明性。同时数据库也会通过权限管理限定用户的访问和操作权限。

          用户是权限的最终体现者,所有的权限管理最终都体现在用户对数据库对象的操作权限是否被允许。

          权限管理

          DWS中的权限管理分为三种场景:

          • 系统权限

          系统权限又称为用户属性,包括SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN和LOGIN。

          系统权限一般通过CREATE/ALTER ROLE语法来指定。其中,SYSADMIN权限可以通过GRANT/REVOKE ALL PRIVILEGE授予或撤销。但系统权限无法通过ROLE和USER的权限被继承,也无法授予PUBLIC。

          • 用户权限

          将一个角色或用户的权限授予一个或多个其他角色或用户。在这种情况下,每个角色或用户都可视为拥有一个或多个数据库权限的集合。

          当声明了WITH ADMIN OPTION,被授权的用户可以将该权限再次授予其他角色或用户,以及撤销所有由该角色或用户继承到的权限。当授权的角色或用户发生变更或被撤销时,所有继承该角色或用户权限的用户拥有的权限都会随之发生变更。

          数据库系统管理员可以给任何角色或用户授予/撤销任何权限。拥有CREATEROLE权限的角色可以赋予或者撤销任何非系统管理员角色的权限。

          • 数据对象权限

          将数据库对象(表和视图、指定字段、数据库、函数、模式等)的相关权限授予特定角色或用户。GRANT命令将数据库对象的特定权限授予一个或多个角色。这些权限会追加到已有的权限上。

          SCHEMA隔离应用示例

          示例一:

          Schema的owner默认拥有该Schema下对象的所有权限,包括删除权限;Database的owner默认拥有该Database下对象的所有权限,包括删除权限。因此建议对Database和Schema的创建要做比较严格的控制,一般建议使用管理员创建Database和Schema,然后把相关的权限控制赋给业务用户。

          1.dbadmin在数据库testdb下把创建Schema的权限赋给普通用户user_1。

          testdb=> GRANT CREATE ON DATABASE testdb to user_1; 
          GRANT
          

          2.切换到普通用户user_1。

          testdb=> SET SESSION AUTHORIZATION user_1 PASSWORD '********'; 
          SET
          

          用户user_1在数据库testdb下创建名为myschema_2的Schema。

          testdb=> CREATE SCHEMA myschema_2; 
          CREATE SCHEMA
          

          3.切换到管理员dbadmin。

          testdb=> RESET SESSION AUTHORIZATION; 
          RESET
          

          管理员dbadmin在模式myschema_2下创建表t1。

          testdb=> CREATE TABLE myschema_2.t1(a int, b int) DISTRIBUTE BY HASH(b); 
          CREATE TABLE
          

          4.切换到普通用户user_1。

          testdb=> SET SESSION AUTHORIZATION user_1 PASSWORD '********'; 
          SET
          

          普通用户user_1删除管理员dbadmin在模式myschema_2下创建的表t1。

          testdb=> drop table myschema_2.t1; 
          DROP TABLE
          

          示例二:

          因为Schema的逻辑隔离的功能,访问数据库对象实际上要通过Schema和具体对象的两层校验。

          1.把表myschema.t1的权限赋给用户user_1。

          gaussdb=> GRANT SELECT ON TABLE myschema.t1 TO user_1; 
          GRANT
          

          2.切换到用户user_1。

          SET SESSION AUTHORIZATION user_1 PASSWORD '********'; 
          SET
          

          查询表myschema.t1。

          gaussdb=> SELECT * FROM myschema.t1; 
          ERROR:  permission denied for schema myschema 
          LINE 1: SELECT * FROM myschema.t1;
          

          3.切换到管理员dbadmin。

          gaussdb=> RESET SESSION AUTHORIZATION; 
          RESET
          

          把myschema.t1的权限赋给用户user_1。

          gaussdb=> GRANT USAGE ON SCHEMA myschema TO user_1; 
          GRANT
          

          4.切换到普通用户user_1。

          gaussdb=> SET SESSION AUTHORIZATION user_1 PASSWORD '********'; 
          SET
          

          查询表myschema.t1。

          gaussdb=> SELECT * FROM myschema.t1; 
           a | b 
          ---+--- 
          (0 rows)
          

          数据库密码到期了,如何修改?

          数据库管理员dbadmin的密码,可登录管理控制台选择集群所在行右边的“更多 > 重置密码”进行修改。

          出于安全机制考虑,DWS在集群参数中通过以下2个关键参数管理帐户密码,在管理控制台,单击集群名称,切换到“参数修改”可进行参数修改。

          • failed_login_attempts:输入密码错误的次数,超出设置值,数据库帐户会被自动锁定,可通过dbadmin管理帐户执行以下语句解锁。
          ALTER USER user_name ACCOUNT UNLOCK;
          
          • password_effect_time:帐户密码的有效期,单位为天,默认为90。

          如何给指定用户赋予某张表的权限?

          给指定用户赋予某张表的权限主要通过以下语法实现,本章主要介绍常见的几种场景,包括只读(SELECT)、插入(INSERT)、改写(UPDATE)和拥有所有权限。

          语法格式

          GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ANALYZE | ANALYSE } [, ...]  
                | ALL [ PRIVILEGES ] } 
              ON { [ TABLE ] table_name [, ...] 
                 | ALL TABLES IN SCHEMA schema_name [, ...] } 
              TO { [ GROUP ] role_name | PUBLIC } [, ...]  
              [ WITH GRANT OPTION ];
          

          场景介绍

          假设当前有用户u1u5,在系统中有对应的同名Schema u1u5,各用户的权限管控如下:

          • u2作为只读用户,需要表u1.t1的SELECT权限。
          • u3作为插入用户,需要表u1.t1的INSERT权限。
          • u4作为改写用户,需要表u1.t1的UPDATE权限。
          • u5作为拥有所有权限的用户,需要表u1.t1的所有权限。

          16.5.3 如何给指定用户赋予某张表的权限.png

          表u1.t1的表权限分类

          用户名 用户类型 Grant授权语句 查询 插入 修改 删除
          u1 所有者 - √ √ √ √
          u2 只读用户 GRANT SELECT ON u1.t1 TO u2; √ x x x
          u3 插入用户 GRANT INSERT ON u1.t1 TO u3; x √ x x
          u4 改写用户 GRANT SELECT,UPDATE ON u1.t1 TO u4; 须知 授予UPDATE权限必须同时授予SELECT权限,否则会出现信息泄露。 √ x √ x
          u5 拥有所有权限的用户 GRANT ALL PRIVILEGES ON u1.t1 TO u5; √ √ √ √

          操作步骤

          以下将演示不同权限的授权方法和验证过程。

          1.打开窗口1(即dbadmin连接会话窗口,后续不再提示),使用系统管理员dbadmin连接DWS数据库,创建用户u1u5(系统默认会创建u1u5的同名SCHEMA)。

          CREATE USER u1 PASSWORD '{password}'; 
          CREATE USER u2 PASSWORD '{password}'; 
          CREATE USER u3 PASSWORD '{password}'; 
          CREATE USER u4 PASSWORD '{password}'; 
          CREATE USER u5 PASSWORD '{password}';
          

          2.在SCHEMA u1下创建表u1.t1。

          CREATE TABLE u1.t1 (c1 int, c2 int);
          

          3.为表中插入两条数据。

          INSERT INTO u1.t1 VALUES (1,2); 
          INSERT INTO u1.t1 VALUES (1,2);
          
          1. DWS中引入了SCHEMA层概念,如果有SCHEMA,需要先给用户赋予SCHEMA的使用权限。
          GRANT USAGE ON SCHEMA u1 TO u2,u3,u4,u5;
          

          5.给只读用户u2赋予表u1.t1的查询权限。

          GRANT SELECT ON u1.t1 TO u2;
          

          6.打开窗口2(即用户u2连接会话窗口,后续不再提示),使用用户u2连接DWS数据库,验证u2可以查询u1.t1表,但是不能写入和修改,此时u2为只读用户。

          SELECT * FROM u1.t1; 
          INSERT INTO u1.t1 VALUES (1,20); 
          UPDATE u1.t1 SET c2 = 3 WHERE c1 =1;
          

          即用户u2连接会话窗口,后续不再提示.png

          7.切回窗口1,分别给u3、u4、u5赋予对应的权限。

          GRANT INSERT ON u1.t1 TO u3;    --插入用户u3,可以插入数据 
          GRANT SELECT,UPDATE ON u1.t1 TO u4;   --改写用户u4,可以修改表 
          GRANT ALL PRIVILEGES ON u1.t1 TO u5;   --拥有所有权限的用户u5,可以对表进行查询、插入、改写和删除
          

          8.打开窗口3,使用用户u3连接DWS数据库,验证u3可以插入u1.t1,但是不能查询和修改,此时u3为插入用户。

          SELECT * FROM u1.t1; 
          INSERT INTO u1.t1 VALUES (1,20); 
          UPDATE u1.t1 SET c2 = 3 WHERE c1 =1;
          

          使用用户u3连接DWS数据库.png

          9.打开窗口4,使用用户u4连接DWS数据库,验证u4可以修改u1.t1,同时还可以查询,但是不能插入,此时u4为改写用户。

          SELECT * FROM u1.t1; 
          INSERT INTO u1.t1 VALUES (1,20); 
          UPDATE u1.t1 SET c2 = 3 WHERE c1 =1;
          

          使用用户u4连接DWS数据库.png

          10.打开窗口5,使用用户u5连接DWS数据库,验证u5可以查询、插入、修改和删除u1.t1,此时u5为拥有所有权限的用户。

          SELECT * FROM u1.t1; 
          INSERT INTO u1.t1 VALUES (1,20); 
          UPDATE u1.t1 SET c2 = 3 WHERE c1 =1; 
          DELETE FROM u1.t1;
          

          使用用户u5连接DWS数据库.png

          11.最后切回窗口1,通过函数has_table_privilege分别查询每个用户的权限。

          SELECT * FROM pg_class WHERE relname = 't1';
          

          返回结果,查看relacl字段,该字段回显结果如下。" rolename =xxxx/yyyy" --表示rolename对该表有xxxx权限,且权限来自yyyy;

          例如下图,与以上验证结果完全一致。

          • u1=arwdDxtA/u1, 表示u1为owner,拥有所有权限。
          • u2=r/u1,表示u2拥有读权限。
          • u3=a/u1,表示u3拥有插入权限。
          • u4=rw/u1,表示u4拥有读和修改权限。
          • u5=arwdDxtA/u1,表示u5拥有所有权限。

          如何给指定用户赋予某个SCHEMA的权限?

          给某个用户授权某个SCHEMA的权限,包括三个场景(本章节针对SCHEMA层级权限,仅演示查询权限,如果需要其他权限,可以参考《常见问题-操作类-帐户、密码、权限》中“如何给指定用户赋予某张表的权限?”章节:

          • SCHEMA下当前某张表权限。
          • SCHEMA下当前所有表的权限。
          • SCHEMA下未来创建的表的权限。

          假设有两个用户u1和u2,对应的同名SCHEMA是u1和u2,用户u2需要访问SCHEMA u1的表(包括当前的某张表、所有表、未来创建的表)。

          16.5.4 如何给指定用户赋予某个SCHEMA的权限.png

          1.打开窗口1(即dbadmin连接会话窗口,后续不再提示),使用系统管理员dbadmin连接DWS数据库,创建用户u1和u2(系统默认会创建u1和u2的同名SCHEMA)。

          CREATE USER u1 PASSWORD '{password}'; 
          CREATE USER u2 PASSWORD '{password}';
          

          2.在SCHEMA u1下创建表u1.t1和u1.t2。

          CREATE TABLE u1.t1 (c1 int, c2 int); 
          CREATE TABLE u1.t2 (c1 int, c2 int);
          

          3.给用户u2赋予SCHEMA u1的访问权限。

          GRANT USAGE ON SCHEMA u1 TO u2;
          

          4.( 某张表权限 )给用户u2赋予SCHEMA u1下某张表u1.t1的查询权限。

          GRANT SELECT ON u1.t1 TO u2;
          

          5.打开窗口2(即用户u2连接会话窗口,后续不再提示),使用用户u2连接DWS数据库,验证u2可以查询u1.t1表,但是不能查询u1.t2表。

          SELECT * FROM u1.t1; 
          SELECT * FROM u1.t2;
          

          即用户u2连接会话窗口,后续不再提示2.png

          6.( 所有表权限 )切回窗口1,使用dbadmin给用户u2赋予SCHEMA u1下所有表的查询权限。

          GRANT SELECT ON ALL TABLES IN SCHEMA u1 TO u2;
          

          7.切回窗口2,再次验证u2可以查询所有表。

          SELECT * FROM u1.t1; 
          SELECT * FROM u1.t2;
          

          步骤 7切回窗口2,再次验证u2可以查询所有表.png

          8.切回窗口1,创建一张新的表u1.t3。

          CREATE TABLE u1.t3 (c1 int, c2 int);
          

          9.切回窗口2,验证发现用户u2没有u1.t3的查询权限,说明u2虽然有SCHEMA u1下所有表的访问权限,但是对于赋权后新创建的表还是没有访问权限(即u2对SCHEMA u1未来的表权限是没有的)。

          SELECT * FROM u1.t3;
          

          验证发现用户u2没有u1.t3的查询权限.png

          10.(未来表权限) 切回窗口1,给用户u2赋予SCHAMA u1未来创建的表的访问权限,并创建一张新的表u1.t4。

          ALTER DEFAULT PRIVILEGES FOR ROLE u1 IN SCHEMA u1 GRANT SELECT ON TABLES TO u2; 
          CREATE TABLE u1.t4 (c1 int, c2 int);
          

          11.切回窗口2,验证发现用户u2可以访问u1.t4。但是对于之前的u1.t3还是没有访问权限(以上ALTER DEFAULT PRIVILEGES语句的授权范围只是未来创建的表,对于已经创建的表,还是要使用GRANT 单张表重新授权),此时需要参考步骤4重新授权u1.t3即可。

          SELECT * FROM u1.t4;
          

          验证发现用户u2可以访问u1.t4.png

          如何创建数据库只读用户?

          场景介绍

          在业务开发场景中,数据库管理员通过SCHEMA来划分不同的业务,例如在金融行业中,负债业务属于SCHEMA s1,资产业务属于SCHEMA s2。

          当前需要在数据库中创建一个只读用户user1,允许这个用户访问负债业务SCHEMA s1下所有的表(包括未来创建的新表),供日常读取,但是不允许做数据插入、修改或删除。

          实现原理

          DWS有基于角色的用户管理,需要先创建一个的只读角色role1,再将对应的角色授权到实际的用户user1即可。

          操作步骤

          1.使用系统管理员dbadmin连接DWS数据库。

          2.执行以下SQL语句创建角色role1。

          CREATE ROLE role1 PASSWORD disable;
          

          3.执行以下SQL语句,为角色role1进行授权。

          GRANT usage ON SCHEMA s1 TO role1;     --赋予SCHEMA s1的访问权限; 
          GRANT select ON ALL TABLES IN SCHEMA s1 TO role1;    --赋予SHCEMA s1下所有表的查询权限; 
          ALTER DEFAULT PRIVILEGES FOR USER tom IN SCHEMA s1 GRANT select ON TABLES TO role1;     --赋予SCHEMA s1未来创建的表的权限,其中tom为SCHEMA s1的owner
          

          4.执行以下SQL语句,将角色role1授权到实际用户user1。

          GRANT role1 TO user1;
          

          5.使用只读用户user1进行SCHAMA s1下所有表数据的日常读取。

          如何创建数据库私有用户和私有表?

          场景介绍

          在业务开发场景中,普通用户默认创建的表,系统管理员dbadmin还是有权访问的,并没有做到完全私有。而在三权分立开启下,管理员dbadmin虽然对普通用户的表没有访问权限,但同时也没有控制权限(DROP、ALTER、TRUNCATE)。

          当前业务开发场景中,需要创建一个私有用户和私有表(即私有用户创建的表),这个私有表只有私有用户本身可以访问,系统管理员dbadmin和其他普通用户均无权访问(INSERT、DELETE、UPDATE、SELECT、COPY),但也希望在未经私有用户授权的情况下,可允许系统管理员dbadmin做DROP/ALTER/TRUNCATE操作。因此,私有用户应运而生,私有用户即拥有INDEPENDENT属性的用户。

          私有用户即拥有INDEPENDENT属性的用户.png

          实现原理

          通过创建INDEPENDENT属性的用户来实现。

          操作步骤

          1.使用系统管理员dbadmin连接DWS数据库。

          2.执行以下SQL语句创建私有用户u1。

          CREATE USER u1 WITH INDEPENDENT IDENTIFIED BY "password";
          

          3.使用u1重新连接DWS数据库,创建测试表,并插入数据。

          CREATE TABLE test (id INT, name VARCHAR(20)); 
          INSERT INTO test VALUES (1, 'joe'); 
          INSERT INTO test VALUES (2, 'jim');
          

          4.切换成dbadmin用户重新连接DWS数据库,并执行以下SQL语句验证是否可以访问,结果提示无权访问。

          SELECT * FROM u1.test;
          

          步骤 4切换成dbadmin用户重新连接DWS数据库.png

          5.执行控制语句DROP,仍然可以删除成功。

          DROP TABLE u1.test;
          

          行控制语句DROP,仍然可以删除成功.png

          如何REVOKE某用户的connect on database权限?

          DWS提供了一个隐式定义的拥有所有角色的组PUBLIC,所有创建的用户和角色默认拥有PUBLIC所拥有的权限。要撤销或重新授予用户和角色对PUBLIC的权限, 可通过在GRANT和REVOKE指定关键字PUBLIC实现。

          DWS会将某些类型的对象上的权限授予PUBLIC。默认情况下,对表、表字段、序列、外部数据源、外部服务器、模式或表空间对象的权限不会授予PUBLIC,而以下这些对象的权限会授予PUBLIC:数据库的CONNECT权限和CREATE TEMP TABLE权限、函数的EXECUTE特权、语言和数据类型(包括域)的USAGE特权。当然,对象拥有者可以撤销默认授予PUBLIC的权限并专门授予权限给其他用户。为了更安全,建议在同一个事务中创建对象并设置权限,这样其他用户就没有时间窗口使用该对象。另外,这些初始的默认权限可以使用ALTER DEFAULT PRIVILEGES命令修改。

          可参考以下示例,REVOKE某用户的connect on database权限:

          1.执行以下命令连接DWS 集群的默认数据库postgres:

          gsql -d postgres -h 192.168.0.89 -U dbadmin -p 8000 -r
          

          根据界面提示输入密码后,显示如下信息表示gsql工具已经连接成功:

          postgres=>
          

          2.创建用户u1。

          CREATE USER u1 IDENTIFIED BY 'password'; 
          CREATE USER
          

          3.确认u1正常访问。

          gsql -d postgres -h 192.168.0.89 -U u1 -p 8000 -W password -r 
          gsql ((GaussDB 8.1.0 build be03b9a0) compiled at 2021-03-12 14:18:02 commit 1237 last mr 2001 release) 
          SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, bits: 128) 
          Type "help" for help.
          

          4.撤销public的connect on database权限。

          gsql -d postgres -h 192.168.0.89 -U dbadmin -p 8000 -r 
          postgres=> 
           
          REVOKE CONNECT ON database gaussdb FROM public; 
          REVOKE
          
          说明

          若直接使用revoke connect on database postgres from u1命令撤销u1用户的权限不会生效,因为数据库的CONNECT权限授予了PUBLIC,需指定关键字PUBLIC实现。

          5.验证结果,显示如下内容表示用户u1的connect on database权限已成功撤销。

          gsql -d postgres -h 192.168.0.89 -U u1 -p 8000 
          gsql: FATAL:  permission denied for database "gaussdb" 
          DETAIL:  User does not have CONNECT privilege.
          

          如何查看某个用户有哪些表的权限?

          场景一:查看用户有哪些表的权限 ,可以通过information_schema.table_privileges查看。例如

          SELECT * FROM information_schema.table_privileges WHERE GRANTEE='user_name'; 
          

          16.5.8 如何查看某个用户有哪些表的权限.png

          • grantor :赋权用户
          • grantee:被赋权用户
          • table_catalog:数据库名
          • table_schema:模式名
          • table_name:对象名
          • privilege_type:被赋予的权限

          如上图所示,表示用户u2拥有Schema u2下的t2的所有权限和Schema u1下的t1的SELECT 权限 。

          场景二:查看用户是否有某张表的权限 ,可以通过以下方法。

          1.执行以下语句查询pg_class系统表。

          select * from pg_class where relname = 'tablename';
          

          查看relacl字段,该字段回显结果如下,权限参数参见下表“权限的参数说明”。

          • " rolename =xxxx/yyyy" --表示rolename对该表有xxxx权限,且权限来自yyyy;
          • "=xxxx/yyyy" -- 表示public对该表有xxxx权限,且权限来自yyyy。

          例如下图:

          joe=arwdDxtA,表示joe用户有所有权限(ALL PRIVILEGES)。

          leo=arw/joe,表示leo用户拥有读、写、改权限,该权限来自joe授权。

          表示joe用户有所有权限.png

          权限的参数说明

          参数 参数说明
          r SELECT(读)
          w UPDATE(写)
          a INSERT(插入)
          d DELETE
          D TRUNCATE
          x REFERENCES
          t TRIGGER
          X EXECUTE
          U USAGE
          C CREATE
          c CONNECT
          T TEMPORARY
          A ANALYZE
          arwdDxtA ALL PRIVILEGES(用于表)
          * 给前面权限的授权选项

          2.如果要查某用户对某张表是否有某种权限,也可以通过访问权限查询函数has_table_privilege进行查询。

          select * from has_table_privilege('用户名','表名','select');
          

          例如,查询joe对表t1是否有查询权限。

          select * from has_table_privilege('joe','t1','select');
          

          查询joe对表t1是否有查询权限.png

          Ruby是什么用户?

          在执行SELECT * FROM pg_user语句查看当前系统的用户时,看到Ruby用户且拥有很多权限。

          Ruby用户为官方运维使用帐户,DWS数据库创建后,默认生成Ruby帐户,不涉及安全风险,请放心使用。

          16.5.9 Ruby是什么用户.png

          文档反馈

          建议您登录后反馈,可在建议与反馈里查看问题处理进度

          鼠标选中文档,精准反馈问题

          选中存在疑惑的内容,即可快速反馈问题,我们会跟进处理

          知道了

          上一篇 :  数据导入导出
          下一篇 :  数据库使用
          搜索 关闭
          ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
          公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
          备案 京公网安备11010802043424号 京ICP备 2021034386号
          ©2025天翼云科技有限公司版权所有
          京ICP备 2021034386号
          备案 京公网安备11010802043424号
          增值电信业务经营许可证A2.B1.B2-20090001
          用户协议 隐私政策 法律声明