目錄
3.1.1.?關(guān)于用戶安全
3.1.2.?預(yù)定義管理用戶
3.1.3.?創(chuàng)建用戶
3.1.4.?修改用戶
3.1.5.?刪除用戶
3.1.6.?用戶資源限制
3.1.7.?用戶的數(shù)據(jù)字典視圖
3.1.1.?關(guān)于用戶安全
您可以通過設(shè)置口令和指定特殊限制來保護用戶帳戶。 KingbaseES 數(shù)據(jù)庫初始化完成后,會創(chuàng)建三個用戶:數(shù)據(jù)庫管理員、安全管理員(sso)、審計管理員(sao)。還可以創(chuàng)建普通用戶來訪問數(shù)據(jù)庫,運行數(shù)據(jù)庫應(yīng)用。若要查找這些用戶的狀態(tài),請查詢相關(guān)的數(shù)據(jù)字典視圖。
每個 KingbaseES 數(shù)據(jù)庫都有一個有效數(shù)據(jù)庫用戶的列表。開啟數(shù)據(jù)庫實例服務(wù)后,使用數(shù)據(jù)庫中定義的有效用戶名連接到數(shù)據(jù)庫實例。 創(chuàng)建用戶帳戶時,可以指定對用戶帳戶的限制。您可以對用戶設(shè)置過期時間、連接數(shù)等限制。KingbaseES 數(shù)據(jù)庫提供了一組數(shù)據(jù)庫視圖,您可以查詢這些視圖以查找資源和會話信息等信息。
3.1.2.?預(yù)定義管理用戶
3.1.2.1.?管理用戶定義
在KingbaseES中,除了在系統(tǒng)初始化過程中可以創(chuàng)建的三個用戶:數(shù)據(jù)庫管理員、安全管理員、審計管理員外,還可以創(chuàng)建普通用戶來訪問數(shù)據(jù)庫,運行數(shù)據(jù)庫應(yīng)用。為了方便,這三個初始化用戶也可以簡稱為管理員、審計員、安全員。
3.1.2.2.?三權(quán)分立
KingbaseES 安全版本支持將管理特權(quán)三權(quán)分立為三個管理員,并在初始化的時候創(chuàng)建數(shù)據(jù)庫管理員、安全管理員和審計管理員。三權(quán)分立的安全管理體制是為了解決數(shù)據(jù)庫超級用戶權(quán)力過度集中的問題,參照行政、立法、司法三權(quán)分立的原則來設(shè)計的安全管理機制。
KingbaseES中,由于三權(quán)分立的約束,數(shù)據(jù)庫管理員,安全管理員,審計管理員各自維護自己權(quán)限許可范圍內(nèi)的用戶,不同目的的用戶應(yīng)由相應(yīng)的管理員創(chuàng)建。即:數(shù)據(jù)庫管理員用戶不能創(chuàng)建和修改安全員和審計員,也不能將一個普通用戶修改為安全員或者審計員,安全管理員只能創(chuàng)建和修改安全員并且不能將安全員修改為非安全員,審計管理員只能創(chuàng)建和修改審計員并且不能將審計員修改為非審計員。
3.1.2.2.1.?特權(quán)用戶
-
系統(tǒng)管理員(system)
主要負責執(zhí)行數(shù)據(jù)庫日常管理的各種操作和自主存取控制。
-
安全管理員(sso)
主要負責強制訪問規(guī)則的制定和管理,監(jiān)督審計管理員和普通用戶的操作,不能創(chuàng)建和操作普通對象。
-
審計管理員(sao)
主要負責數(shù)據(jù)庫的審計,監(jiān)督系統(tǒng)管理員和安全管理員的操作,不能創(chuàng)建和操作普通對象。
3.1.2.2.2.?與其他模塊關(guān)系
-
審計
-
系統(tǒng)管理員
系統(tǒng)管理員不可以修改審計參數(shù),不可以定義審計策略,也不可以查看審計記錄。
-
安全管理員
安全管理員只可以設(shè)置及刪除對審計管理員和普通用戶的審計策略,只可以查看普通用戶和審計管理員的審計結(jié)果記錄。
-
審計管理員
只可以由審計管理員開啟和關(guān)閉審計的GUC參數(shù)。審計管理員可以設(shè)置及刪除對安全管理員和系統(tǒng)管理員的審計策略,只可以查看安全管理員和系統(tǒng)管理員的審計結(jié)果記錄。
-
-
安全
-
系統(tǒng)管理員
不可以進行安全功能的操作。
-
安全管理員
只可以由安全員開啟安全開關(guān)GUC參數(shù)。只可以由安全員設(shè)置及刪除標記,策略等安全功能。
-
審計管理員
不可以進行安全功能的操作。
-
3.1.2.2.3.?相關(guān)參數(shù)
-
sepapower.separate_power_grant
是否由sso用戶控制使用DCL語句,默認值為false。
3.1.2.2.4.?相關(guān)限制
CREATE
sao和sso不可以創(chuàng)建用戶及普通對象ALTER
sao和sso不可以修改對象定義DROP
sao和sso不可以刪除對象ALTER USER/ROLE
sao和sso只可以修改自己的密碼GRANT/REVOKE
sao不可以進行授權(quán)操作 不可以為sao和sso授權(quán)和撤權(quán) 不允許其他用戶成為sao和sso的成員 不允許sao和sso成為其他用戶的成員DROP USER/ROLE
依賴于是否有CREATE ROLE的權(quán)限,并且sao和sso不可以被刪除。SHOW
sao和sso允許使用SHOW命令。ALTER SYSTEM SET
系統(tǒng)管理員和普通用戶不可以修改審計和安全的參數(shù) 審計員只可以修改審計參數(shù) 安全員只可以修改安全參數(shù)SET/RESET
sao和sso不允許使用SET/RESET命令。
3.1.2.2.5.?插件增強支持
通過加載可選的sso_update_user插件可以滿足某些特殊場景的三權(quán)分立需求,對管理員和安全員的權(quán)限做出進一步的劃分。
加載插件
修改kingbase.conf文件中?
shared_preload_libraries
?參數(shù)后重啟數(shù)據(jù)庫,創(chuàng)建插件并切換用戶為安全管理員sso,打開插件開關(guān)。shared_preload_libraries = 'sso_update_user' create extension sso_update_user; CREATE EXTENSION show sso_update_user.sso_update_user_enable; sso_update_user.sso_update_user_enable -------------------------------------- off (1 行記錄) alter system set sso_update_user.sso_update_user_enable = true; ALTER SYSTEM select sys_reload_conf(); sys_reload_conf ----------------- t (1 行記錄) show sso_update_user.sso_update_user_enable; sso_update_user.sso_update_user_enable -------------------------------------- on (1 行記錄)參數(shù)配置
sso_update_user.sso_update_user_enable
?默認為關(guān)閉狀態(tài)。卸載插件
修改 kingbase.conf 文件中?
shared_preload_libraries
?參數(shù)后重啟數(shù)據(jù)庫。shared_preload_libraries = ''參數(shù)開關(guān)開啟后限制
1)CREATE ROLE/USER: 系統(tǒng)管理員用戶在創(chuàng)建普通用戶時不可指定密碼等選項。
2)ALTER ROLE/USER: 只有sso和普通用戶本身可以更改普通用戶的密碼。
3)ALTER ROLE/USER: 系統(tǒng)管理員只能修改超級用戶,或超級用戶權(quán)限選項。
3.1.2.3.?受限D(zhuǎn)BA
受限D(zhuǎn)BA可以對當前DBA的權(quán)限進行一定限制。當功能開啟后DBA將不能更改以下對象:
Table
Database
Function(by name)
Language
large object
Namespace(by name)
Tablespace(by name)
Foreign data wrapper
Foreign server
Type(by name)
Relation(by oid)
Type(by oid)
Operator(by oid)
Function(by oid)
Namespace(by oid)
Tablespace(by oid)
Operator class(by oid)
search dictionary(by oid)
search configuration(by oid)
database(by oid)
conversion(by oid)
extension(by oid)
KingbaseES通過插件的方式來進行受限D(zhuǎn)BA。這種方式更為靈活,當數(shù)據(jù)庫的實用場景需要進行受限D(zhuǎn)BA管理時,加載插件即可。而不需要該功能時,卸載插件即可。
KingbaseES通過 1 個全局級參數(shù)配合插件來實現(xiàn)受限D(zhuǎn)BA管理。
3.1.2.3.1.?加載插件
修改 kingbase.conf 文件中 shared_preload_libraries 參數(shù)后重啟數(shù)據(jù)庫,創(chuàng)建插件并切換用戶為安全管理員sso打開受限D(zhuǎn)BA開關(guān)。
shared_preload_libraries = 'restricted_dba' create extension restricted_dba; CREATE EXTENSION show restricted_dba.restricted_enable; restricted_dba.restricted_enable ---------------------- off (1 行記錄) alter system set restricted_dba.restricted_enable = true; ALTER SYSTEM select sys_reload_conf(); sys_reload_conf ----------------- t (1 行記錄) show restricted_dba.restricted_enable; restricted_dba.restricted_enable ---------------------------------- on (1 行記錄)
3.1.2.3.2.?參數(shù)配置
restricted_dba.restricted_enable
?受限D(zhuǎn)BA開關(guān),默認為關(guān)閉狀態(tài)。
show restricted_dba.restricted_enable; restricted_dba.restricted_enable ---------------------- off (1 行記錄) alter system set restricted_dba.restricted_enable = true; ALTER SYSTEM select sys_reload_conf(); sys_reload_conf ----------------- t (1 行記錄) show restricted_dba.restricted_enable; restricted_dba.restricted_enable ---------------------------------- on (1 行記錄)
3.1.2.3.3.?卸載插件
修改 kingbase.conf 文件中?shared_preload_libraries
?參數(shù)后重啟數(shù)據(jù)庫。
shared_preload_libraries = ''
3.1.3.?創(chuàng)建用戶
使用CREATE USER語句創(chuàng)建用戶,用戶帳戶可以具有默認角色和表空間限制等限制。本節(jié)內(nèi)容包括:
-
創(chuàng)建用戶的權(quán)限?被授予CREATEROLE系統(tǒng)權(quán)限的用戶可以創(chuàng)建用戶。
-
新用戶的默認權(quán)限?創(chuàng)建新用戶帳戶時,默認此用戶有連接(LOGIN)數(shù)據(jù)庫的權(quán)限。
-
用戶名的限制?創(chuàng)建指定用戶名的用戶時,請注意命名名稱是否唯一等限制。
-
用戶密碼?使用PASSWORD關(guān)鍵字為用戶設(shè)置密碼
-
用戶的默認角色
3.1.3.1.?創(chuàng)建用戶的權(quán)限
已被授予CREATE ROLE 的系統(tǒng)權(quán)限的用戶可以創(chuàng)建用戶帳戶。如果要創(chuàng)建自己有權(quán)創(chuàng)建用戶的用戶,需要授予CREATEROLE權(quán)限,例如:
alter user test CREATEROLE;
CREATEROLE是一種特殊系統(tǒng)權(quán)限,不允許轉(zhuǎn)授。通常只有數(shù)據(jù)庫管理員或安全管理員具有此系統(tǒng)特權(quán)。
3.1.3.2.?新用戶的默認權(quán)限
創(chuàng)建新的用戶帳戶時,應(yīng)允許此用戶訪問數(shù)據(jù)庫。
-
使用 CREATE USER 語句創(chuàng)建新的用戶帳戶。例如:
create user test with password '123456';
-
新建用戶默認有LOGIN權(quán)限,也可以使用sql授予用戶連接權(quán)限,例如:
alter user test LOGIN;
3.1.3.3.?用戶名的限制
為用戶帳戶指定名稱時,需要注意一些限制。
-
用戶名的唯一性
每個數(shù)據(jù)庫中的用戶名都是唯一的,不能創(chuàng)建同名的用戶賬號。在創(chuàng)建用戶前,您可以通過系統(tǒng)視圖sys_user查詢當前數(shù)據(jù)庫已存在的用戶賬號。
-
用戶名的大小寫
KingbaseES V8R6數(shù)據(jù)庫不區(qū)分用戶名大小寫,默認用戶名稱都會轉(zhuǎn)成小寫。
3.1.3.4.?用戶密碼
KingbaseES使用PASSWORD關(guān)鍵字為用戶賬戶設(shè)置密碼,密碼使用單引號括起來。例如:
create user test with password '123456';
3.1.3.5.?用戶的默認角色
用戶建立連接后即具有默認角色的所有權(quán)限,新建用戶沒有設(shè)置默認角色時,其默認角色為空。用戶可通過SET ROLE 語句改變當前生效的角色,通過ALTER ROLE 語句修改用戶的默認角色。
3.1.4.?修改用戶
ALTER USER語句可以修改用戶帳戶,本節(jié)內(nèi)容包括:
-
關(guān)于修改用戶
-
修改管理員和普通用戶的密碼
-
修改sso和sao用戶的密碼
3.1.4.1.?關(guān)于修改用戶
在大多數(shù)情況下,您可以使用 SQL 語句修改用戶,例如,用戶可以修改自己的密碼。修改用戶訪問控制一般影響的是新建會話,而不會影響當前會話。例如,將test用戶的連接數(shù)限制設(shè)置成1000:
alter user test connection limit 1000;
3.1.4.2.?修改管理員和普通用戶的密碼
一般情況下,系統(tǒng)管理員可以修改所有普通用戶密碼。普通用戶可以修改自己的密碼,但不能修改其他用戶的密碼,除非有CREATEROLE權(quán)限。使用alter user password語句修改密碼,例如:
--授予權(quán)限 alter user test CREATEROLE; --修改管理員密碼 alter user system password 'system12345'; --修改普通用戶密碼 alter user test password '123';
當數(shù)據(jù)庫開啟三權(quán)分立狀態(tài)后,sso_update_user_enable參數(shù)處于打開狀態(tài)時,只有sso 和普通用戶本身可以更改普通用戶的密碼。系統(tǒng)管理員只能修改超級用戶,或超級用戶權(quán)限選項。
3.1.4.3.?修改sso和sao用戶的密碼
安全管理員(sso)和審計管理員(sao)的用戶密碼只能由自己修改。
3.1.5.?刪除用戶
DROP USER語句可以刪除用戶。本節(jié)內(nèi)容包括:
-
關(guān)于刪除用戶
-
終止用戶會話
-
刪除用戶對象
3.1.5.1.?關(guān)于刪除用戶
刪除用戶需要有CREATEROLE 特權(quán)。如果一個用戶的對象在任何數(shù)據(jù)庫中被引用,它就不能被刪除,如果嘗試刪除將會拋出一個錯誤。 刪除用戶時,KingbaseES數(shù)據(jù)庫會從數(shù)據(jù)字典中刪除用戶相關(guān)信息。
3.1.5.2.?終止用戶會話
當數(shù)據(jù)庫中還有用戶連接的會話時,則無法刪除此用戶。必須先終止用戶會話或者用戶可以退出會話,然后才能刪除用戶。如果需要強制終止會話,可以使用以下步驟:
-
查詢動態(tài)會話視圖sys_stat_activity,找到用戶的會話 PID。
例如,查詢test用戶的會話:
select datname,pid from sys_stat_activity where datname='test'; datname |pid | --------|-----| test |1336 |
-
使用系統(tǒng)函數(shù)sys_terminate_backend強行終止test用戶會話:
call sys_terminate_backend('1336');
用戶與數(shù)據(jù)庫斷開連接后,就可以使用DROP USER語句刪除該用戶。
3.1.5.3.?刪除用戶對象
如果用戶的對象還存在引用關(guān)系,被其他對象依賴,需要刪除依賴對象后才能刪除用戶。
DROP OWNED 常常被用來為移除一個或者多個用戶做準備。因為DROP OWNED 只影響當前數(shù)據(jù)庫中的對象,通常需要在包含將被刪除用戶所擁有的對象的每一個數(shù)據(jù)庫中都執(zhí)行這個命令。使用CASCADE 選項可能導(dǎo)致這個命令遞歸去刪除由其他用戶所擁有的對象。REASSIGN OWNED 命令是另一種選擇,它可以把一個或多個用戶所擁有的所有數(shù)據(jù)庫對象重新授予給其他用戶。不過,REASSIGN OWNED 不處理其他對象的特權(quán)。例如,刪除test用戶下的對象:
DROP OWNED BY TEST CASCADE;
3.1.6.?用戶資源限制
3.1.6.1.?用戶訪問控制
在KingbaseES 中,可以配置用戶連接數(shù)限制,以及限制賬號的使用期限。
3.1.6.1.1.?用戶連接數(shù)限制
在創(chuàng)建用戶的時候指定CONNECTION LIMIT 參數(shù)設(shè)置用戶連接數(shù)限制。如果用戶有登錄權(quán)限,此參數(shù)可以指定該用戶能建立多少并發(fā)連接。-1(默認值)表示無限制。注意這個限制僅針對于普通連接,預(yù)備事務(wù)和后臺工作者連接都不受這一限制管轄。
3.1.6.1.2.?用戶使用期限
在創(chuàng)建用戶的時候指定VALID UNTIL參數(shù)設(shè)置用戶使用期限,VALID UNTIL 機制設(shè)置一個日期和時間,在該時間點之后角色的口令將會失效。默認為不設(shè)置,口令將總是有效。
3.1.6.2.?用戶CPU限制
限制使用的CPU資源,KingbaseES中通過kdb_resource_group插件來實現(xiàn)用戶限額功能,通過sys_space_quota實現(xiàn)用戶表空間限額。
3.1.6.2.1.?使用用戶限額需要開啟資源組
-
資源組依賴于操作系統(tǒng)的cgroup功能,所以必須安裝cgroup并正確掛載和啟動,對應(yīng)的掛載的子系統(tǒng)目錄給予操作用戶寫入和讀取權(quán)限。
-
需要將動態(tài)庫添加到 kingbase.conf 文件的 shared_preload_libraries 中,并重啟數(shù)據(jù)庫。
shared_preload_libraries = 'kdb_resource_group' # (change requires restart)
-
在 kingbase.conf 文件中設(shè)置參數(shù),開啟資源組功能,默認是off為關(guān)閉狀態(tài)
resource_group_activated = on
-
在 kingbase.conf 文件中擴展內(nèi)的非必選參數(shù),設(shè)置cgroup的掛載主目錄,默認為'/sys/fs/cgroup',修改后需要重啟數(shù)據(jù)庫生效
kdb_resource_group.resource_group_path = '/sys/fs/cgroup' #(change requires restart)
-
在 kingbase.conf 文件中擴展內(nèi)的非必選參數(shù),設(shè)置kingbase可使用操作系統(tǒng)CPU的總量,默認為100,取值范圍1~100,修改后需要刪除cgroup下的kingbase節(jié)點,命令如下:cgdelete -r cpu:kingbase。并重啟數(shù)據(jù)庫生效。
kdb_resource_group.resource_group_total_cpu = 100 #(change requires restart)
3.1.6.2.2.?資源組管理
創(chuàng)建一個資源組
CREATE RESOURCE GROUP group_name WITH (resource_name = value);
group_name為創(chuàng)建的資源組名稱, 一個數(shù)據(jù)庫內(nèi)唯一,該對象不屬于某個模式下。 resource_name為設(shè)置控制資源類型的名稱,目前支持cpu_shares和cpu_cfs_quota_us。 value為資源的值,為數(shù)字類型。
不同參數(shù)取值范圍不同,非值域報錯。
修改一個資源組的限制值
ALTER RESOURCE GROUP group_name SET (resource_name = value);
刪除一個資源組
DROP RESOURCE GROUP group_name;
查看資源組信息
select * from sys_resgroup;
查看資源組資源值,通過系統(tǒng)表sys_resgroupcapability來查看資源組關(guān)聯(lián)的相關(guān)值限制。 系統(tǒng)表 sys_resgroupcapability,任何用戶都可以查詢。
select * from sys_resgroupcapability;
reslimittype |
屬性名 |
含義 |
---|---|---|
3 4 |
cpu_cfs_quota_us cpu_shares |
絕對CPU使用率 相對CPU使用率 |
設(shè)置一個資源組的相對CPU使用率
ALTER RESOURCE GROUP group_name SET (cpu_shares = value);
value 默認值: 10000 取值范圍:10-10000
設(shè)置一個資源組的CPU絕對使用率限制
ALTER RESOURCE GROUP group_name SET (CFS_QUOTA_US = value);
value 默認值:100,不限制cpu使用 取值范圍:整數(shù),1-100。
3.1.6.2.3.?資源組關(guān)聯(lián)用戶
ALTER RESOURCE GROUP rgroup2 set (user='user1');
此SQL語句將user1用戶加入到rgroup2資源組中,user1用戶將受到rgroup2中資源組的資源使用控制。
查看資源組與用戶關(guān)聯(lián)關(guān)系,通過系統(tǒng)表sys_resauthid可查詢數(shù)據(jù)庫用戶和資源組的關(guān)聯(lián)
select * from sys_resauthid;
開啟資源組后連接數(shù)據(jù)庫報錯或警告時,確認GUC參數(shù)設(shè)置,以及cgroup目錄的權(quán)限和擁有者,可以使用以下命令清除資源組的kingbase節(jié)點,然后重新連接數(shù)據(jù)庫會再次創(chuàng)建cgroup的kingbase節(jié)點。
cgdelete -r cpu:kingbase
3.1.7.?用戶的數(shù)據(jù)字典視圖
KingbaseES數(shù)據(jù)庫提供了一組數(shù)據(jù)字典視圖,這些視圖提供有關(guān)用于創(chuàng)建用戶和配置用戶的信息。
3.1.7.1.?常見的用戶信息系統(tǒng)視圖
一些常見的關(guān)于用戶的系統(tǒng)視圖如下表所示:
視圖 |
描述 |
---|---|
ALL_OBJECTS |
描述當前用戶可訪問的所有對象 |
ALL_USERS |
列出對當前用戶可見的用戶,但不對其進行描述 |
DBA_OBJECTS |
描述數(shù)據(jù)庫中的所有對象 |
DBA_USERS |
描述數(shù)據(jù)庫的所有用戶 |
USER_OBJECTS |
描述當前用戶擁有的所有對象 |
USER_USERS |
僅描述當前用戶 |
sys_user |
描述關(guān)于數(shù)據(jù)庫用戶的信息 |
sys_roles |
描述關(guān)于數(shù)據(jù)庫角色的信息 |
SYS_STAT_ACTIVITY |
列出當前數(shù)據(jù)庫會話的會話信息 |
3.1.7.2.?查詢所有用戶和相關(guān)信息
sys_user系統(tǒng)視圖提供關(guān)于數(shù)據(jù)庫所有用戶的信息,如下所示:
select * from "sys_user"; usename |usesysid |usecreatedb |usesuper |userepl |usebypassrls |passwd |valuntil |useconfig | --------|---------|------------|---------|--------|-------------|---------|---------|----------| system |10 |true |true |true |true |******** | |NULL | sao |9 |false |false |false |false |******** | |NULL | sso |8 |false |false |false |false |******** | |NULL | ads |16601 |false |false |false |false |******** | |NULL | u1 |16603 |false |false |false |false |******** | |NULL | t1 |16604 |false |false |false |false |******** | |NULL | sa |16605 |true |false |false |false |******** | |NULL | test |16394 |false |false |false |false |******** | |NULL |
3.1.7.3.?查詢數(shù)據(jù)庫用戶會話情況文章來源:http://www.zghlxwxcb.cn/news/detail-461013.html
SYS_STAT_ACTIVITY系統(tǒng)動態(tài)視圖列出了當前數(shù)據(jù)庫中所有用戶會話的情況,例如,查詢test用戶下運行sql的內(nèi)容:文章來源地址http://www.zghlxwxcb.cn/news/detail-461013.html
select datid,datname,pid,query from SYS_STAT_ACTIVITY where datname='test'; datid |datname |pid |query | ------|--------|------|-----------------------------------------------------------------------------------| 15022 |test |15872 |SELECT t.oid,t.* FROM pg_catalog.pg_type t WHERE typnamespace=$1 ORDER by t.oid |
到了這里,關(guān)于金倉數(shù)據(jù)庫KingbaseES安全指南--3.1. 用戶管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!