db2 的安全性由兩方面組成:認證和授權
認證
認證就是系統驗證使用者身份的過程。說的簡單點,就是驗證使用者名稱和密碼,因為db2使用者同時也是作業系統使用者,所以,首先必須得到作業系統的認可。在預設情況下,db2使用的就是基於作業系統的使用者認證。當然,你也可以指定其它認證方式。dbm cfg 的authentication引數決定在**進行使用者認證。
authentication可以設定為以下值:
server (default) 認證在伺服器端執行
client 認證在客戶端執行
server_encrypt 和server 引數相似,而且使用者的id 和密碼都經過加密
kerberos 認證使用kerberos 安全機制
sql_authentication_dataenc 在伺服器端進行認證,資料庫連線時必須使用資料加密
sql_authentication_dataenc_cmp 與上面類似,但當條件不允許的情況下,可以不對資料進行加密
gssplugin 使用外部的基於gss api 外掛程式的安全工具進行認證
檢視當前設定:db2 get dbm cfg | grep authentication
授權
授權是 db2 獲取有關已認證的 db2 使用者的資訊的過程,此資訊指示該使用者可執行的資料庫操作,以及可訪問的資料物件。
很多人都感覺db2的許可權非常難理解,其實非常簡單,大家之所以感覺難理解,主要原因是ibm把它介紹複雜了,然後,各種書籍、資料把db2 的官方資料翻譯出來呈現在大家面前,有的翻譯的可能並不是很好,所以大家就感覺難理解了。其實,大家完全可以把db2想象乙個倉庫,倉庫中有好多房間,房間中有好多東西。倉庫管理員有所有房間的鑰匙,你想進入某個房間時,你必須有該房間的鑰匙。如果你沒有鑰匙,你可以像管理員申請。那麼db2 有哪些房間呢(也就是db2的組成部分)? db2由 例項、資料庫、表空間、模式、表、檢視等組成。每個組成部分都定義了相應的許可權,如:你想訪問某個表,那麼你首先得連線資料庫,所以,你必須具有該資料庫的connect許可權,同時你還必須有該錶的select 許可權。這就相當於,你想進入乙個房間,你必須有該房間的鑰匙。下面我們來了解一下db2的不同組成部分定義了哪些許可權:
例項級別許可權:引用
sysadm 系統管理許可權
sysctrl 系統控制許可權
sysmaint系統維護許可權
sysmon 系統監視許可權
資料庫級別許可權:引用
accessctrl 允許擁有者授予和撤銷所有物件特權和資料庫許可權以及 accessctrl、dataaccess、dbadm 和 secadm 許可權
bindadd 允許擁有者在資料庫中建立新包
connect 允許擁有者連線到資料庫
createtab 允許擁有者在資料庫中建立新錶
create_external_routine 允許擁有者建立過程以供資料庫的應用程式和其他使用者使用
create_not_fenced_routine 允許擁有者建立未受防護的使用者定義的函式(udf)或過程
dataaccess 允許擁有者訪問儲存在資料庫表中的資料。
dbadm 允許擁有者充當資料庫管理員
explain 允許擁有者說明查詢方案,而不要求他們擁有訪問這些查詢方案所引用的表中資料的特權
implicit_schema 允許任何使用者隱式地建立模式
load 允許擁有者將資料裝入到表中。
quiesce_connect 允許擁有者在資料庫處於停頓狀態時訪問該資料庫。
secadm 允許擁有者充當資料庫的安全管理員。
sqladm 允許擁有者監視和調整 sql 語句。
wlmadm 允許擁有者充當工作負載管理員
grant createtab on database to user
revoke createtab on database from user
表空間特權引用
use 允許使用者在該錶空間中建立表
grant use of tablespace to user
revoke use of tablespace from user
模式特權引用
createin 允許使用者在模式中建立物件
alterin 允許使用者在模式中改變物件
dropin 允許使用者在模式中刪除物件
grant createin,dropin,alterin on schema to user
revoke createin,dropin,alterin on schema from user
表和檢視特權引用
select 允許使用者檢索表或檢視中的行、對錶建立檢視以及執行 export 實用程式。
insert 允許使用者將行插入表或檢視以及執行 import 實用程式。
update 允許使用者更改表或檢視中的條目,或表或檢視中的乙個或多個特定列的條目。使用者只能對特定的列擁有此特權。
delete 允許使用者從表或檢視中刪除行。
alter 允許使用者修改表,例如,為表新增列或唯一約束。具有 alter 特權使用者還可以 comment on 乙個表,或者表的一列。
index 允許使用者對錶建立乙個索引。索引建立者自動具有索引的 control 特權。
references 允許使用者建立和刪除乙個外來鍵,並指定該錶為關係中的父表。使用者可能只對特定的列擁有此特權。
control 給使用者提供對錶或檢視的所有特權,包括刪除它以及授予和撤銷各個表特權的功能。
grant select on table to user
revoke select on table from user
索引特權引用
control 允許使用者刪除和修改索引
grant control on index to user
revoke control on index from user
函式、過程、方法特權
execute 允許使用者執行函式、過程、方法
grant execute on function to user
grant execute on procedure to user
grant execute on method to user
程式包特權引用
execute 允許使用者執行或執行程式包
bind 允許使用者重新繫結或繫結該程式包以及新增具有相同程式包名和建立者的新程式包版本
control 給使用者提供重新繫結、刪除或執行程式包的功能,以及將那些特權授予其他使用者的功能
revoke execute on package from user
grant execute on package to user
使用者、使用者組、public組引用
db2 的使用者是作業系統使用者,當然,db2使用者組也是作業系統使用者組。由上面的介紹大家就可以知道賦予使用者許可權是非常繁瑣的,為了方便許可權管理,我們可以把許可權賦給使用者組,這樣,任何屬於該組的使用者都可以獲得相應的許可權。值得注意的是db2還定義了乙個public組,任何人或組都屬於public組,當乙個資料庫建立時,下面的特權都會自動的授予public 組:connect,createtab,implicit schema,bindadd,這就是當我們新建乙個作業系統使用者,沒有賦給它任何許可權,而它卻可以連線資料庫的原因。
賦予使用者例項級別許可權引用
細心的朋友可能已經發現了,我們在介紹例項級別許可權的時候沒有說明如何賦予使用者例項級別許可權,那是因為我們不能通過grant和revoke語句賦予和撤銷許可權,而且例項級別許可權也不能賦予單個使用者,只能賦予使用者組。那麼到底該怎麼賦予使用者組例項級別許可權呢?在dbm cfg中定義以下4個引數,我們只要修改這幾個引數就可以賦予使用者組相應的例項級許可權。
db2 get dbm cfg | grep group
sysadm_group
sysctrl_group
sysmaint_group
sysmon_group
探索容器安全性 概述
編者的話 本文是 google雲平台 gcp 上的容器安全性系列部落格文章中的第一篇,介紹了容器安全的以下幾個方面 基礎設施安全 軟體 鏈和執行時安全,並澄清了容器不是強大的安全邊界,可能要依靠 google雲平台專案 提供的隔離。最後提供了幾場即將到來的在kubecon eu關於容器安全的講座資訊...
2執行緒安全性
當多個執行緒訪問可變的同乙個狀態變數沒有正確的同步,那麼就會出現錯誤,有三種方式可以修復這種錯誤 將狀態變數修改為不可變的變數 在訪問狀態變數時使用同步 編寫併發應用程式的時候,一種準確地程式設計方式是 首先使 正確執行,然後在提高 的速度。即便如此,最好也只是當測試結果和應用需求告訴你必須提高效能...
db2體系結構概述
系統環境變數 全域性註冊變數 db2set parameter value g db2例項 例項級別註冊變數 db2set parameter value i instancename 資料庫管理器 例項 配置檔案dbm cfg db2 get dbm cfg db2 update dbmcfg u...