瀚高資料庫企業版中的許可權問題

瀚高PG實驗室發表於2021-12-29
文件用途
企業版V6.0.1中,普通使用者可以連線查詢其他使用者owner的資料庫,並且可以在他的public模式下進行create、delete、update、drop自己的表等操作,存在安全隱患。
詳細資訊

問題

highgo=# create user a with password 'xxxxxxxx'; --建立a使用者
CREATE ROLE
highgo=# create database db_a with owner a;   --建立資料庫db_a,owner為使用者a
CREATE DATABASE
highgo=# create user b with password 'xxxxxxxx'; --建立b使用者
CREATE ROLE
highgo=# create database db_b with owner b;   --建立資料庫db_b,owner為使用者b
CREATE DATABASE
highgo=# \q
[highgo@localhost etc]$ psql -U a -d db_b    --使用者a連線資料庫db_b
Password for user a: 
psql (6.0.1)
PSQL: Release 6.0.1
Type "help" for help.
db_b=> create table by_a (id int);       --執行建立表操作成功。insert、update、drop經測試也可正常執行。
CREATE TABLE

分析

非超級使用者a為什麼可以連線任何資料庫db_b,不僅可以連線還可以在public模式下面建立自己的object並對其執行增刪改查等操作。

這其實是由瀚高資料庫的邏輯結構決定的,在瀚高資料庫中邏輯結構有4層:例項(集簇)→資料庫→schema→資料庫物件。一個資料庫集簇下面可以有多個資料庫,每個資料庫可以有多個schema,每個schema又可以有多個資料庫物件,包括table、view、function等。他與oracle不同的是使用者並屬於邏輯結構中的任何一層,是獨立之外的object,他不屬於某個資料庫或者schema,在瀚高資料庫中庫與使用者沒有直接的關聯關係,所以會出現上面的許可權疑問。

解決

當然我們仍然可以通過許可權操作來實現我們想要的效果,使資料庫只有超級使用者、屬主使用者可以連線,排除安全隱患。

revoke all on database db_b from public; --此處public代表所有普通使用者。

如果後期又想賦予該許可權,可以執行以下逆命令。

grant all on database db_b to public;



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69994931/viewspace-2849959/,如需轉載,請註明出處,否則將追究法律責任。

相關文章