GaussDB 數據庫架構師修煉(十三)安全管理(3)-行級訪問控制

1 背景

行級訪問控制特性將數據庫的訪問控制精確到數據表行級別?,只允許用戶查看?、更新或刪除特定的行數據。

2 實例場景

實例以醫生只能看到治療的病人,不能看其它醫生的病人為例:

1)醫院病人的信息表pat_info

csdn=> set search_path=csdn;
SET
csdn=>
csdn=> create table pat_info(patient varchar2(64),doctor varchar2(64),age int);
CREATE TABLE
csdn=> insert into pat_info(patient,doctor,age)values('peter','mary',25),('bob','mary',56),('julie','tom',38);
INSERT 0 3
csdn=>
csdn=> select * from pat_info;patient | doctor | age
---------+--------+-----peter   | mary   |  25bob     | mary   |  56julie   | tom    |  38
(3 rows)csdn=>

2) 創建行級訪問控制策略?,使得醫生只能查看屬于自己的病?人信息?,并打開表上的行級訪問控制開關:

csdn=> CREATE  ROW  LEVEL SECURITY  POLICY  rl_select  ON
csdn-> pat_info  FOR select USING(doctor=current_user);
CREATE ROW LEVEL SECURITY POLICY
csdn=> alter table pat_info enable row level security;
ALTER TABLE
csdn=>
csdn=> \d+ pat_info;Table "csdn.pat_info"Column  |         Type          | Modifiers | Storage  | Stats target | Description
---------+-----------------------+-----------+----------+--------------+-------------patient | character varying(64) |           | extended |              |doctor  | character varying(64) |           | extended |              |age     | integer               |           | plain    |              |
Row Level Security Policies:POLICY "rl_select" FOR SELECTTO publicUSING (((doctor)::name = "current_user"()))
Has OIDs: no
Options: orientation=row, compression=no, storage_type=USTORE, segment=off, enable_rowsecurity=truecsdn=>

3) 創建兩個用戶tom,mary并授予usage與select權限;

[Ruby@dtest1 ~]$ gsql -h 192.168.0.71 -dcsdn -p8000 -U root -W '*******' -ar
gsql ((GaussDB Kernel 505.2.1 build 159cea95) compiled at 2024-12-27 09:22:44 commit 10161 last mr 21504 release)
SSL connection (cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128)
Type "help" for help.csdn=>
csdn=>csdn=> create user mary password '*******';
CREATE ROLE
csdn=> create user tom password '*******';
CREATE ROLE
csdn=> grant usage on schema csdn to mary;
GRANT
csdn=> grant usage on schema csdn to tom;
GRANT
csdn=> grant select on csdn.pat_info to tom;
GRANT
csdn=> grant select on csdn.pat_info to mary;
GRANT
csdn=> \q

4)驗證一下tom、mary用戶查詢結果

mary只能看到peter、bob兩個病人。

[Ruby@dtest1 ~]$ gsql -h 192.168.0.71 -dcsdn -p8000 -U mary -W '******' -ar
gsql ((GaussDB Kernel 505.2.1 build 159cea95) compiled at 2024-12-27 09:22:44 commit 10161 last mr 21504 release)
SSL connection (cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128)
Type "help" for help.csdn=> set search_path=csdn;
SET
csdn=> select * from pat_info;patient | doctor | age
---------+--------+-----peter   | mary   |  25bob     | mary   |  56
(2 rows)csdn=> \q

tom只能看到julie

[Ruby@dtest1 ~]$ gsql -h 192.168.0.71 -dcsdn -p8000 -U tom -W '*****' -ar
gsql ((GaussDB Kernel 505.2.1 build 159cea95) compiled at 2024-12-27 09:22:44 commit 10161 last mr 21504 release)
SSL connection (cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128)
Type "help" for help.csdn=> set search_path=csdn;
SET
csdn=> select * from pat_info;patient | doctor | age
---------+--------+-----julie   | tom    |  38
(1 row)csdn=>

3 行級別安全實現原理

1)行級訪問控制的目的是控制表中行級數據可見性,通過在數據表上預定義Filter,在查詢優化階段將滿足條件 的表達式應用到執行計劃上,影響最終的執行結果。

2)當前受影響的SQL語句包括SELECT?UPDATE?DELETE?

3)用戶可以在數據表創建行訪問控制( Row ?Level?Security)策略,當數據庫用戶對數據表訪問時,若SQL滿足?數據表特定的RLS策略,在查詢優化階段將滿足條件的表達式,按照屬性( PERMISSIVE ?| ?RESTRICTIVE)類???型,通過ORAND方式拼接,應用到執行計劃上。

4 實現操作步驟

步驟1:打開行訪問控制策略開關:

ALTER TABLE  tablename ENABLE  ROW  LEVEL  SECURITY;

步驟2:創建行訪問控制策略,當前用戶只能查看用戶自身的數據:

CREATE?ROW?LEVEL?SECURITY?POLICY??tablename_rls?ON??tablename?USING(role?= ?CURRENT_USER);

注意:tablename為所創建的表名,?tablename_rls為創建的行級訪問控制策略名。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93541.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93541.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93541.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Wi-Fi 與蜂窩網絡(手機網絡)的核心區別,以及 Wi-Fi 技術未來的發展方向

在日常生活中,我們既離不開家里的 Wi-Fi,也離不開手機的 4G/5G 網絡。它們都能把我們連接到互聯網,但底層的工作方式卻大不相同。一、設計初衷的不同Wi-Fi誕生于 1997 年的 IEEE 802.11 標準,定位是局域網無線替代。它的目標是讓電…

C++編程實戰:高效解決算法與數據結構問題

個人主頁 &#xff1a; zxctscl 專欄 【C】、 【C語言】、 【Linux】、 【數據結構】、 【算法】 如有轉載請先通知 題目1. 數字統計2. 兩個數組的交集3. 牛牛的快遞4. 點擊消除5. 最小花費爬樓梯6. 簡寫單詞1. 數字統計 BC153 數字統計 #include <iostream> using na…

《零基礎入門AI:深度學習中的視覺處理(卷積神經網絡(CNN)進階)》

一、卷積知識擴展 1. 二維卷積 單通道版本 對于單通道輸入圖像 III (尺寸 HWH \times WHW) 和卷積核 KKK (尺寸 FFF \times FFF)&#xff0c;輸出特征圖 OOO 的計算公式為&#xff1a; O(i,j)∑m0F?1∑n0F?1I(im,jn)?K(m,n)O(i,j) \sum_{m0}^{F-1} \sum_{n0}^{F-1} I(im, j…

pyecharts可視化圖表-pie:從入門到精通(進階篇)

歡迎來到pyecharts餅圖系列教程的進階篇&#xff01;在上一篇基礎教程中&#xff0c;我們學習了餅圖的基本概念和簡單實現。在本文中&#xff0c;我們將深入探索pyecharts中餅圖的六種高級用法和自定義選項&#xff0c;包括環形餅圖、富文本標簽餅圖、滾動圖例餅圖、環形圖、嵌…

【JAVA 核心編程】面向對象高級:類變量與方法 抽象類與接口

一、類變量與類方法&#xff08;靜態變量&#xff09; 1&#xff09;類變量 class Child{private String name;//定義一個變量count&#xff0c;是一個類變量&#xff08;靜態變量&#xff09;static靜態//該變量最大的特點就是會被Child 類的所有對象訪問public static int co…

【Java基礎面試題】數據類型

Java面試高頻總結&#xff1a;基本數據類型深度解析 &#x1f4ca; 八種基本數據類型詳解數據類型關鍵字字節數位數默認值取值范圍核心特性字節型byte180-128 ~ 127最小整數類型短整型short2160-32,768 ~ 32,767較少使用整型int4320-2 ~ 2-1 (約21億)最常用整數類型長整型long8…

攻防世界—unseping(反序列化)

一.審題<?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($this->method, array("ping"))) {call_u…

AI熱點周報(8.10~8.16):AI界“冰火兩重天“,GPT-5陷入熱議,DeepSeek R2模型訓練受阻?

名人說&#xff1a;博觀而約取&#xff0c;厚積而薄發。——蘇軾《稼說送張琥》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 目錄3分鐘速覽版&#xff1a;一張表看懂本周AI大事一、GPT-5&#xff1a;期待越高&#x…

Python_vue3_django旅拍在線婚紗攝影網站的設計與實現016023190_源碼LW_講解安裝

目錄前言-本系統介紹已開發項目效果實現截圖開發技術詳細介紹論文設計框架系統測試核心代碼參考示例總結源碼獲取詳細視頻演示或者查看其他版本&#xff1a;文章底部獲取博主聯系方式&#xff01;前言-本系統介紹 利用Python語言、MySQL數據庫&#xff0c;Django框架&#xff0…

Python爬蟲-爬取政務網站的文檔正文內容和附件數據

前言 本文是該專欄的第67篇,后面會持續分享python爬蟲干貨知識,記得關注。 本文,筆者以某政務網站為例子。基于Python爬蟲采集某政務網站的文檔正文內容和其關聯的附件數據。 具體的實現思路以及完整實現代碼邏輯,筆者將在正文進行詳細介紹。廢話不多說,跟著筆者直接往下…

Python:如何在Pycharm中顯示geemap地圖?

01 說明 或許在舊版本的python和jupyter中并不能成功. 作為參考&#xff0c;這里給出實驗成功的版本&#xff1a;名稱版本通道geemap0.36.1conda-forgejupyter1.1.1conda-forgepycharm2024.1.4 (Professional Edition)nullpython3.11.13conda-forge此外&#xff0c;由于顯示底圖…

力扣3:無重復字符的最長子串

力扣3:無重復字符的最長子串題目思路代碼題目 給定一個字符串 s &#xff0c;請你找出其中不含有重復字符的 最長 子串 的長度。 思路 這道題的思路其實是很簡單的&#xff0c;最后我們需要得到子串的長度所以我們可以定義兩個變量即子串的左邊界和右邊界這樣有了左右邊界就…

Git登錄配置的詳細方法

Git登錄綁定主要涉及配置用戶信息和設置身份驗證。以下是詳細的配置方法&#xff1a; 1. 配置基本用戶信息 # 全局配置用戶名和郵箱 git config --global user.name "你的用戶名" git config --global user.email "你的郵箱example.com"# 或者為單個倉庫配…

測試工程師的AI轉型指南:從工具使用到測試策略重構

測試工程師的AI轉型指南&#xff1a;從工具使用到測試策略重構 測試工程師正站在職業轉型的十字路口。當GitHub Copilot能自動生成測試用例&#xff0c;AI性能工具能預測系統瓶頸&#xff0c;傳統“手動執行用例、人工分析結果”的工作模式正被顛覆。某互聯網公司測試團隊的調研…

3D打印——給開發板做外殼

3D打印——給開發板做外殼前言一、建立開發板3D模型根據開發板尺寸繪制草圖繪制PCB草圖&#xff08;手動&#xff09;繪制PCB草圖&#xff08;導入&#xff09;拉伸PCB板下載零件3D模型裝配零件二、建立外殼3D模型盒子蓋子&#xff08;卡扣&#xff09;最終效果三、問題記錄前言…

Spring AI架構分析

Spring AISpring AI開發框架提供對接應用與AI模型的集成開發能力&#xff0c;讓開發者更加容易地開發智能體以及其他生成式人工智能的應用&#xff1a;模型&#xff08;Model&#xff09;AI模型是算法與數據的集合&#xff0c;用于處理信息以及生成信息&#xff0c;主要AI模型的…

Javar如何用RabbitMQ訂單超時處理

RabbitMQ 訂單超時處理方案 使用 RabbitMQ 的 TTL 死信隊列&#xff08;DLX&#xff09; RabbitMQ 的 TTL&#xff08;Time-To-Live&#xff09; 和 死信隊列&#xff08;Dead Letter Exchange&#xff09; 是處理訂單超時的常見方案。核心思路是設置消息的過期時間&#xff0…

記錄一下 StarRocks 點查的 Profile Metrics

背景 Starrocks 3.5 補充兩個點查的 profile 一個是沒有開啟點查的情況&#xff0c;也就是SET enable_short_circuit false; 一個是開啟點查的情況&#xff0c;也就是SET enable_short_circuit true; 其中建表語句如下&#xff1a; CREATE TABLE ac_account (id bigint(20) …

react echarts圖表監聽窗口變化window.addEventListener(‘resize’)與ResizeObserver()

發生問題場景 系統頁面使用tabs標簽頁,當有多個組件&#xff0c;有使用eCharts圖表的頁面時&#xff0c;其中的一個頁面或其他頁面使用了F11的頁面全屏&#xff0c;關閉全屏后圖表會收縮起來(注:固定eCharts的width、height 的參數值是無影響&#xff0c;按照固定參數大小展示)…

Leaflet賦能:WebGIS視角下的省域區縣天氣可視化實戰攻略

目錄 前言 一、空間數據基礎 1、省域空間檢索 2、區縣天氣信息檢索 二、天氣數據簡介 1、省域天氣數據獲取 2、區縣名稱不一致 三、SpringBoot后臺實現 1、Java后臺天氣數據查詢 2、控制層實現 四、WebGIS前端實現 1、氣溫顏色及圖例初始化 2、氣溫數據展示實現 五…