淺談YashanDB三權分立

YashanDB發表於2024-12-02

什麼是三權分立?

三權分立,即是對DBA的職責進行劃分,定義不同管理職位具備並行使不同角色,互相限制和監督,從機制上儘可能地防止因誤操作刪除或修改不屬於職責範圍內的資料或物件,保障系統整體安全,

內建角色

YashanDB內建了不同管理許可權的角色,方便使用者進行不同職責的管理員定義,管理角色列表如下:

角色名稱 許可權描述
DBA 未開啟三權分立:具有幾乎所有許可權(除SHUTDOWN)。 開啟三權分立:不具有審計、安全管理相關許可權,只對當前使用者schema下的表、索引、自定義檢視具有DML許可權,但仍具有系統表與系統檢視的檢視許可權,以及資料庫的DDL許可權。
AUDIT_ADMIN 具有建立、刪除、使能、修改、去使能審計策略等與審計相關的許可權。
SECURITY_ADMIN 具有管理使用者、角色與許可權等安全相關的許可權。
SYSDBA 具有執行SHUTDOWN、備份、BUILD(包括yasrman、yasbak備份工具)的許可權。
SYSOPER 只具有執行SHUTDOWN的許可權。
SYSBACKUP 只具有執行備份、BUILD(包括yasrman、yasbak備份工具)許可權。

如何使用?

資料庫引數ENABLE_SEPARATE_DUTY控制三權分立開關,預設關閉,重啟生效

--資料庫引數修改方式
ALTER SYSTEM SET ENABLE_SEPARATE_DUTY=true SCOPE=SPFILE;

使用示例

1.確認資料庫沒有開啟三權分立開關

SQL> show parameter ENABLE_SEPARATE_DUTY

NAME                                                             VALUE                                                            
---------------------------------------------------------------- ---------------------------------------------------------------- 
ENABLE_SEPARATE_DUTY                                             FALSE                                                           

1 row fetched.

2.建立測試使用者並分別賦予內建許可權

SQL> CREATE USER user1 IDENTIFIED BY "user1";

Succeed.

SQL> CREATE USER user2 IDENTIFIED BY "user2";

Succeed.

SQL> CREATE USER user3 IDENTIFIED BY "user3";

Succeed.

--user1使用者賦dba角色許可權
SQL> GRANT dba TO user1;

Succeed.

--user2使用者賦審計相關許可權
SQL> GRANT AUDIT_ADMIN TO user2;

Succeed.

--user3使用者賦安全相關許可權
SQL> GRANT SECURITY_ADMIN TO user3;

Succeed.

SQL> GRANT RESOURCE TO user3;

Succeed.

3.檢視檢視

--檢視檢視
SQL> select * from DBA_ROLE_PRIVS;

GRANTEE                                                          GRANTED_ROLE                                                     ADMIN_OPTION 
---------------------------------------------------------------- ---------------------------------------------------------------- ------------ 
USER1                                                            DBA                                                              N           
USER2                                                            AUDIT_ADMIN                                                      N           
USER3                                                            SECURITY_ADMIN                                                   N           
USER3                                                            RESOURCE                                                         N           

3 rows fetched.

4.測試user1使用者具有許可權相關、審計相關的許可權操作

SQL> conn user1/user1

Connected to:
YashanDB Server Enterprise Edition Release 23.2.1.100 x86_64 - X86 64bit Linux

SQL> grant select any table to user2;

Succeed.

SQL> revoke select any table from user2;

Succeed.

SQL> create AUDIT POLICY p1 PRIVILEGES SELECT ANY TABLE, DELETE ANY TABLE;

Succeed.

SQL> drop audit policy p1;

Succeed.

5.測試user2使用者僅具有審計相關許可權,無安全相關許可權

SQL> conn user2/user2

Connected to:
YashanDB Server Enterprise Edition Release 23.2.1.100 x86_64 - X86 64bit Linux

SQL> create AUDIT POLICY p1 PRIVILEGES SELECT ANY TABLE, DELETE ANY TABLE;

Succeed.

SQL> drop audit policy p1;

Succeed.

--user2無法授權許可權
SQL> grant select any table to user3;

YAS-02213 insufficient privileges

6.測試user3使用者僅安全相關許可權,無審計相關許可權

SQL> conn user3/user3

Connected to:
YashanDB Server Enterprise Edition Release 23.2.1.100 x86_64 - X86 64bit Linux

SQL> grant select any table to user2;

Succeed.

SQL> revoke select any table from user2;

Succeed.

SQL> create AUDIT POLICY p1 PRIVILEGES SELECT ANY TABLE, DELETE ANY TABLE;

YAS-02213 insufficient privileges

7.開啟三權分立開關

SQL> conn / as sysdba

Connected to:
YashanDB Server Enterprise Edition Release 23.2.1.100 x86_64 - X86 64bit Linux

SQL> ALTER SYSTEM SET ENABLE_SEPARATE_DUTY=true SCOPE=SPFILE;

Succeed.

SQL> shutdown immediate;

Succeed.

8.測試user1使用者無許可權相關和審計相關的許可權操作

SQL> conn user1/user1

Connected to:
YashanDB Server Enterprise Edition Release 23.2.1.100 x86_64 - X86 64bit Linux

SQL> grant select any table to user2;

YAS-02213 insufficient privileges

SQL> create AUDIT POLICY p1 PRIVILEGES SELECT ANY TABLE, DELETE ANY TABLE;

YAS-02213 insufficient privileges

9.測試user2、user3使用者許可權無變化

SQL> conn user2/user2

Connected to:
YashanDB Server Enterprise Edition Release 23.2.1.100 x86_64 - X86 64bit Linux

SQL> create AUDIT POLICY p2 PRIVILEGES SELECT ANY TABLE;

Succeed.

SQL> drop audit policy p2;

Succeed.

--user2無安全相關許可權
SQL> grant select any table to user1;

YAS-02213 insufficient privileges

SQL> conn user3/user3

Connected to:
YashanDB Server Enterprise Edition Release 23.2.1.100 x86_64 - X86 64bit Linux

SQL> grant select any table to user1;

Succeed.

SQL> revoke select any table from user1;

Succeed.

--user3無審計相關許可權
SQL> create AUDIT POLICY p3 PRIVILEGES DELETE ANY TABLE;

YAS-02213 insufficient privileges

--user3使用者正常建立表,普通使用者許可權無變化
SQL> create table t (c1 int);

Succeed.

總結

  1. 三權分立限制了使用者對資料庫的訪問和操作,可以精確控制使用者對資料庫的操作,提升了資料庫的安全性。

  2. 開啟三權分立影響的是各管理使用者的系統特權,普通使用者以及使用者下的物件特權不會受到影響

相關文章