使用Python和Pandas實現的Amazon Redshift權限檢查與SQL生成用于IT審計

import pandas as pd
import psycopg2
from psycopg2 import sql# 連接Redshift
conn = psycopg2.connect(host='your-cluster.endpoint.redshift.amazonaws.com',port=5439,dbname='dev',user='admin',password='your-password'
)# 權限檢查函數
def check_redshift_permissions(conn):"""獲取所有權限信息"""permissions = {'table_level': [],'column_level': [],'row_level': [],'data_masking': []}with conn.cursor() as cur:# 獲取表級權限cur.execute("""SELECT grantee, table_schema, table_name, privilege_type FROM information_schema.table_privilegesWHERE grantee != 'PUBLIC'""")permissions['table_level'] = cur.fetchall()# 獲取列級權限cur.execute("""SELECT grantee, table_schema, table_name, column_name, privilege_type FROM information_schema.column_privileges""")permissions['column_level'] = cur.fetchall()# 獲取行級權限(基于視圖定義)cur.execute("""SELECT viewname, definition FROM pg_views WHERE schemaname NOT IN ('pg_catalog', 'information_schema')""")for view in cur.fetchall():if ' WHERE ' in view[1].upper():permissions['row_level'].append((view[0],view[1].split('WHERE')[1].strip()))# 獲取數據掩碼函數cur.execute("""SELECT proname, prosrc FROM pg_proc WHERE proname LIKE 'mask%' OR proname LIKE 'dynamic_mask%'""")permissions['data_masking'] = cur.fetchall()return permissions# 獲取權限數據
permissions = check_redshift_permissions(conn)# 構建自然語言描述
permission_desc = []# 表級權限處理
table_df = pd.DataFrame(permissions['table_level'], columns=['角色', 'schema', '表名', '權限類型'])
for _, row in table_df.iterrows():desc = f"角色 {row['角色']} 在表 {row['schema']}.{row['表名']} 上擁有 {row['權限類型']} 權限"sql_stmt = f"GRANT {row['權限類型']} ON {row['schema']}.{row['表名']} TO {row['角色']};"permission_desc.append(('表級權限', desc, sql_stmt))# 列級權限處理
column_df = pd.DataFrame(permissions['column_level'],columns=['角色', 'schema', '表名', '列名', '權限類型'])
for _, row in column_df.iterrows():desc = f"角色 {row['角色']} 在表 {row['schema']}.{row['表名']}{row['列名']} 列上擁有 {row['權限類型']} 權限"sql_stmt = f"GRANT {row['權限類型']}({row['列名']}) ON {row['schema']}.{row['表名']} TO {row['角色']};"permission_desc.append(('列級權限', desc, sql_stmt))# 行級權限處理
for view, condition in permissions['row_level']:desc = f"視圖 {view} 實施了行級過濾,條件: {condition.split('/*')[0].strip()}"sql_stmt = f"CREATE VIEW {view} AS SELECT ... WHERE {condition};"  # 需要根據實際視圖定義補充permission_desc.append(('行級權限', desc, sql_stmt))# 數據掩碼處理
for func_name, func_def in permissions['data_masking']:desc = f"數據掩碼函數 {func_name} 實現規則: {func_def[:100]}..."sql_stmt = f"CREATE FUNCTION {func_name} ... \n{func_def};"permission_desc.append(('數據掩碼', desc, sql_stmt))# 打印結果
df = pd.DataFrame(permission_desc, columns=['權限類型', '描述', 'SQL示例'])
print("權限描述:")
print(df[['權限類型', '描述']].to_markdown(index=False))print("\n對應SQL語句示例:")
print(df[['權限類型', 'SQL示例']].to_markdown(index=False))conn.close()

輸出結果說明:

權限描述示例:
權限類型描述
表級權限角色 sales_dept 在表 sales_data.orders 上擁有 SELECT 權限
列級權限角色 hr_dept 在表 hr.employees 的 salary 列上擁有 SELECT 權限
行級權限視圖 sales_apac_view 實施了行級過濾,條件: region = ‘APAC’
數據掩碼數據掩碼函數 mask_ssn 實現規則: CASE WHEN …
對應SQL語句示例:
權限類型SQL示例
表級權限GRANT SELECT ON sales_data.orders TO sales_dept;
列級權限GRANT SELECT(salary) ON hr.employees TO hr_dept;
行級權限CREATE VIEW sales_apac_view AS SELECT … WHERE region = ‘APAC’;
數據掩碼CREATE FUNCTION mask_ssn …

完整權限控制SQL生成模板:

-- 角色體系
CREATE ROLE sales_dept;
CREATE ROLE hr_dept;-- 表級權限
GRANT SELECT ON TABLE sales_data.* TO sales_dept;
GRANT USAGE ON SCHEMA hr TO hr_dept;-- 列級權限
CREATE VIEW hr_limited_view AS
SELECT employee_id, name, department, CASE WHEN CURRENT_USER = 'hr_director' THEN salary ELSE NULL END AS salary
FROM employees;GRANT SELECT ON hr_limited_view TO hr_dept;-- 行級權限
CREATE VIEW sales_region_view AS
SELECT * FROM orders
WHERE region = CURRENT_SCHEMA();-- 動態數據掩碼
CREATE FUNCTION mask_email(email varchar) RETURNS varchar AS $$
BEGINRETURN regexp_replace(email, '(.)(.*)@', '\1***@');
END;
$$ LANGUAGE plpgsql;CREATE VIEW customer_masked_view AS
SELECT customer_id,mask_email(email) AS email,LEFT(phone, 3) || '****' AS phone
FROM customers;-- 權限組合
GRANT sales_dept TO user1;
GRANT hr_dept TO user2;

各權限類型說明:

  1. 表級權限

    • 控制對整張表的訪問
    • 典型操作:SELECT/INSERT/UPDATE/DELETE
    • 最佳實踐:通過角色授權,避免直接授予用戶
  2. 列級權限

    • 通過創建受限視圖實現
    • 使用CASE語句動態控制列可見性
    • 配合列加密保護敏感數據
  3. 行級權限

    • 使用視圖WHERE子句過濾數據
    • 動態條件:CURRENT_USER/SESSION變量
    • 可結合安全策略(Security Policy)
  4. 數據掩碼

    • 使用自定義函數實現動態脫敏
    • 支持條件掩碼(根據用戶角色不同顯示不同數據)
    • 常用方法:正則替換、數值模糊、部分隱藏

權限管理建議:

  1. 使用三層角色體系:

    -- 組織級角色
    CREATE ROLE org_analyst;
    -- 部門角色
    CREATE ROLE dept_finance;
    -- 功能角色
    CREATE ROLE sensitive_data_access;GRANT sensitive_data_access TO dept_finance;
    GRANT dept_finance TO org_analyst;
    
  2. 定期審計腳本:

    -- 檢查權限分布
    SELECT * FROM svv_user_grants;
    -- 查看列權限
    SELECT * FROM svv_column_privileges;
    -- 審計數據訪問
    SELECT * FROM svl_userlog;
    
  3. 自動化清理:

    # 自動撤銷過期權限示例
    def revoke_expired_permissions():expired_users = query_db("SELECT user_name FROM expired_users")for user in expired_users:execute_sql(f"REVOKE ALL PRIVILEGES ON ALL TABLES FROM {user}")
    

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

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

相關文章

Cribl 數據脫敏 更多方法 MASK (三)

我做過好幾個cribl 數據脫敏的實驗: Cribl 脫敏mask-CSDN博客

Android Studio下載安裝教程

## 什么是Android Studio Android Studio是Google官方推出的Android應用開發集成環境(IDE),基于IntelliJ IDEA開發,專門用于Android應用開發。它包含了代碼編輯器、可視化布局編輯器、應用性能分析工具、模擬器等功能,為開發者提供了一站式的…

如何測試登錄模塊?全面測試思路解析

思路如下: 面試官問"如何測試一個登錄模塊?"時,考察的是你的測試思維是否全面,能否覆蓋功能、安全、性能、兼容性等多個維度。下面我會從不同角度詳細展開,確保回答既系統又深入。 1. 功能測試(Functional Testing) 1.1 正常流程測試 ? 正確的用戶名+密碼:…

MySQL基礎篇 | 數據庫概述及在TencentOS中安裝MySQL8.0.42版本

MySQL基礎篇 | 在TencentOS中安裝MySQL8.0.42版本 1. 數據庫概述2. 部署前準備工作2.1. 安裝依賴包2.2. GCC版本升級3. MySQL服務部署3.1. 編譯部署MySQL3.2. 初始化數據庫3.3. 啟動數據庫4. 數據庫配置4.1 配置環境變量4.2. 首次登錄設置1. 數據庫概述 SQL Server:SQL Server…

Angular教程前言:歷史、安裝與用途

Angular 是一個強大且流行的開源前端 Web 應用程序框架,由 Google 開發并維護 1。它在現代 Web 開發中占據著重要的地位,尤其在構建動態、高效且可擴展的 Web 應用程序方面表現出色,特別適用于單頁應用程序 (SPA) 和復雜的用戶界面 1。本教程…

systemd和OpenSSH

1 systemd 1.1 配置文件 /etc/systemd/system /lib/systemd/system /run/systemd/system /usr/lib/systemd/user 1.2 commands systemctl list-unit-files | grep enable systemctl cat dlt-daemon.service systemctl cat dlt-system.service systemctl show dlt-daemon.ser…

如何實現一個可視化的文字編輯器(C語言版)?

一、軟件安裝 Visual Studio 2022 Visual Studio 2022 是微軟提供的強大集成開發環境(IDE),廣泛用于C/C、C#、Python等多種編程語言的開發。它提供了許多強大的工具,幫助開發者編寫、調試和優化代碼。 1.下載 Visual Studio 202…

ArrayList的特點及應用場景

ArrayList的特點及應用場景 一、ArrayList核心特點 基于動態數組實現 底層使用Object[]數組存儲元素 默認初始容量為10 擴容機制:每次擴容為原來的1.5倍(int newCapacity oldCapacity (oldCapacity >> 1)) 快速隨機訪問 實現了R…

深挖Java基礎之:變量與類型

今天我要介紹的是在Java中對變量和類型的一些相關知識點的介紹,包括對基本數據類型,引用類型,變量命名規則和類型轉換以及其注意事項的解明。 java變量與類型:Java 是靜態類型語言,變量必須先聲明類型后使用。變量是存…

數據結構與算法學習筆記(Acwing提高課)----動態規劃·背包模型(一)

數據結構與算法學習筆記----動態規劃背包模型(一) author: 明月清了個風 first publish time: 2025.5.1 ps??背包模型是動態規劃中的重要模型,基礎課中已對背包模型的幾種模版題有了講解,[鏈接在這](數據結構與算法學習筆記----背包問題_有 n 件物品…

Java關鍵字解析

Java關鍵字是編程語言中具有特殊含義的保留字,不能用作標識符(如變量名、類名等)。Java共有50多個關鍵字(不同版本略有差異),下面我將分類詳細介紹這些關鍵字及其使用方式。 一、數據類型相關關鍵字 1. 基…

vue自定義表頭內容excel表格導出

1、安裝 npm install xlsx file-saver 2、使用 import * as XLSX from xlsx import { saveAs } from file-saverconst exportAccounts (data) > {// 將對象數組轉換為 worksheetconst worksheet XLSX.utils.json_to_sheet(data)// 創建 workbook 并附加 sheetconst wor…

鴻蒙NEXT開發組件截圖和窗口截圖工具類SnapshotUtil(ArkTs)

import { image } from kit.ImageKit; import { componentSnapshot, window } from kit.ArkUI; import { AppUtil } from ./AppUtil; import { ArrayUtil } from ./ArrayUtil;/*** 組件截圖和窗口截圖工具類* author 鴻蒙布道師* since 2025/04/28*/ export class SnapshotUtil…

C#與SVN的深度集成:實現版本控制自動化管理?

目錄 1. 環境準備 2. 創建 C# 工程 3. 引用 SharpSvn 庫 4. 編寫代碼 1. 環境準備 2. 創建 C# 工程 3. 引用 SharpSvn 庫 4. 編寫代碼 5. 代碼說明 6. 注意事項 1. 環境準備 首先,需要安裝 SharpSvn 庫。可以從 SharpSvn 官方網站 下載適合 .NET Framewor…

本文不定期更新,用于收錄各種怪異的python腳本

1.計算自然數對數底 a b 1 for n in range(1, 1001):a a * n 1b b * n t a % br . for i in range(1, 1001):t 10if t < b:r 0else:r str(t // b)t % bprint(str(a//b) r) 得到 2.7182818284590452353602874713526624977572470936999595749669676277240766303…

日志之ClickHouse部署及替換ELK中的Elasticsearch

文章目錄 1 ELK替換1.1 Elasticsearch vs ClickHouse1.2 環境部署1.2.1 zookeeper 集群部署1.2.2 Kafka 集群部署1.2.3 FileBeat 部署1.2.4 clickhouse 部署1.2.4.1 準備步驟1.2.4.2 添加官方存儲庫1.2.4.3 部署&啟動&連接1.2.4.5 基本配置服務1.2.4.6 測試創建數據庫和…

2025年大一ACM訓練-搜索

2025年大一ACM訓練-搜索 前期知識&#xff1a;DFS&#xff0c;本文搜索題解法以深度優先搜索為主 1.1 DFS 的定義 深度優先搜索&#xff08;Depth-First Search&#xff09;是一種用于遍歷樹或圖的算法。核心思想是盡可能“深入”訪問圖的每個節點&#xff0c;直到無法繼續前進…

Nginx核心功能02

目錄 一&#xff0c;正向代理 1&#xff0c;編譯安裝Nginx &#xff08;1&#xff09;安裝支持軟件 &#xff08;2&#xff09;創建運行用戶&#xff0c;組和日志目錄 &#xff08;3&#xff09;編譯安裝Nginx &#xff08;4&#xff09;添加Nginx系統服務 2&#xff0c…

rk3568安全啟動功能實踐

本文主要講述筆者在rk3568芯片上開發安全啟動功能實踐的流程。其中主要參考瑞芯微官方文檔《Rockchip_Developer_Guide_Secure_Boot_for_UBoot_Next_Dev_CN.pdf》。文檔中描述邏輯不是很清晰而且和當前瑞芯微的sdk中安全啟動的流程匹配度不高。本文就不再對瑞芯微官方文檔的內容…

[操作系統] 線程互斥

文章目錄 背景概念線程互斥的引出互斥量鎖的操作初始化 (Initialization)靜態初始化動態初始化 加鎖 (Locking)阻塞式加鎖非阻塞式加鎖 (嘗試加鎖/一般不考慮) 解鎖 (Unlocking)銷毀 (Destruction)設置屬性 (Setting Attributes - 通過 pthread_mutex_init) 鎖本身的保護互斥鎖…