DB2傻瓜1000問(七)、DB2資料庫安全部分

litterbaby發表於2007-06-08

DB2傻瓜1000問(七)
總結:康標

email:

[@more@]

7、DB2資料庫安全部分
263、 資料庫安全計劃應該如何定義?
1) 允許誰訪問例項和/或資料庫
2) 在哪裡以及如何檢驗使用者的密碼
3) 使用者被授予的許可權級別
4) 允許使用者執行的命令
5) 允許使用者讀取和/或修改的資料
6) 允許使用者建立、修改和/或刪除的資料庫物件

264、 DB2的安全機制有哪幾種?
DB2 中有三種主要的安全機制:
1) 身份驗證(authentication)
2) 授權(authorization)
3) 特權(privilege)

265、 什麼是身份驗證?
身份驗證是使用者在嘗試訪問 DB2 例項或資料庫時遇到的第一種安全特性。DB2 身份驗證與底層作業系統的安全特性緊密協作來檢驗使用者 ID 和密碼。DB2 還可以利用 Kerberos 這樣的安全協議對使用者進行身份驗證。

266、 什麼是授權?
授權決定使用者和/或使用者組可以執行的操作以及他們可以訪問的資料物件。使用者執行高階資料庫和例項管理操作的能力由指派給他們的許可權決定。在 DB2 中有 5 種不同的許可權級別:SYSADM、SYSCTRL、SYSMAINT、DBADM 和 LOAD。

267、 什麼是特權?
特權的粒度比授權要細,可以分配給使用者和/或使用者組。特權定義使用者可以建立或刪除的物件。它們還定義使用者可以用來訪問物件(比如表、檢視、索引和包)的命令。DB2 9 中新增的一個概念是基於標籤的訪問控制(LBAC),它允許以更細的粒度控制誰有權訪問單獨的行和/或列。

268、 什麼是伺服器?
資料庫伺服器 是資料庫實際所在的機器(在分割槽的資料庫系統上可能是多臺機器)。

269、 什麼是閘道器?
閘道器 是一臺執行 DB2 Connect 產品的機器。DB2 客戶機可以透過閘道器連線駐留在主機上的 DB2 資料庫。閘道器也稱為 DB2 Connect 伺服器。

270、 什麼是客戶機?
DB2 資料庫客戶機 是對伺服器上的資料庫執行查詢的機器。這些客戶機可以是本地的(駐留在與資料庫伺服器相同的物理機器上),也可以是遠端的(駐留在單獨的機器上)。

271、 什麼時間進行DB2身份認證?
在發出 attach 或 connect 命令時,它在底層作業系統安全特性的幫助下完成這個任務。

272、 DB2身份驗證型別是那些?
SERVER
身份驗證在伺服器上進行。

SERVER_ENCRYPT
身份驗證在伺服器上進行。密碼在客戶機上進行加密,然後再傳送到伺服器。

CLIENT
身份驗證在客戶機上進行(例外情況見 處理不可信的客戶機)。

*KERBEROS
由 Kerberos 安全軟體執行身份驗證。

*KRB_SERVER_ENCRYPT
如果客戶機設定是 KERBEROS,那麼由 Kerberos 安全軟體執行身份驗證。否則使用 SERVER_ENCRYPT。

DATA_ENCRYPT
身份驗證在伺服器上進行。伺服器接受加密的使用者 ID 和密碼,並對資料進行加密。這個選項的操作方式與 SERVER_ENCRYPT 相同,但是資料也要加密。

DATA_ENCRYPT_CMP
身份驗證方式與 DATA_ENCRYPT 相同,但是允許不支援 DATA_ENCRYPT 的老式客戶機使用 SERVER_ENCRYPT 身份驗證進行連線。在這種情況下,資料不進行加密。如果進行連線的客戶機支援 DATA_ENCRYPT,就會進行資料加密,而不能降級到 SERVER_ENCRYPT 身份驗證。這個身份驗證型別只在伺服器的資料庫管理程式配置檔案中是有效的,而且在客戶機或閘道器例項上使用 CATALOG DATABASE 時是無效的。

GSSPLUGIN
身份驗證方式由一個外部 GSS-API 外掛決定。

GSS_SERVER_ENCRYPT
身份驗證方式由一個外部 GSS-API 外掛決定。在客戶機不支援伺服器的 GSS-API 外掛之一的情況下,使用 SERVER_ENCRYPT 身份驗證。

273、 如何檢視資料庫身份認證型別?
db2 get dbm cfg
伺服器連線認證 (SRVCON_AUTH) = NOT_SPECIFIED
資料庫管理器認證 (AUTHENTICATION) = SERVER

274、 如何在伺服器上設定身份驗證?
在資料庫伺服器上,在資料庫管理程式配置(DBM CFG)檔案中使用 AUTHENTICATION 引數設定身份驗證。請記住,DBM CFG 檔案是一個例項級配置檔案。因此,AUTHENTICATION 引數影響這個例項中的所有資料庫。
db2 update dbm cfg using authentication server_encrypt
db2stop
db2start

275、 如何在閘道器上設定身份驗證?
使用 catalog database 命令在閘道器上設定身份驗證。
db2 catalog database myhostdb at node nd1 authentication SERVER
db2 terminate

276、 如何在客戶機上設定身份驗證?
連線伺服器資料庫的客戶機
db2 catalog database sample at node nd1 authentication SERVER
連線主機資料庫的客戶機
db2 catalog database myhostdb at node nd1 authentication SERVER

277、 為什麼要使用安全外掛構架?
透過使用標準的 GSS-API 呼叫,使用者可以編寫一個安全外掛並將對使用者 ID 進行身份驗證的工作交給一個外部安全程式。這樣使用者可以根據自己需要編寫加密演算法。

278、 什麼是Kerberos 身份驗證?
Kerberos 身份驗證為 DB2 提供了一種無需透過網路傳送使用者 ID 和密碼的使用者身份驗證方法。Kerberos 安全協議作為第三方身份驗證服務執行身份驗證,它使用傳統的密碼術建立一個共享的金鑰。這個金鑰成為使用者的憑證,在請求本地或網路服務時在所有情況下都使用它檢驗使用者的身份。透過使用 Kerberos 安全協議,可以實現對遠端 DB2 資料庫伺服器的單點登入。

279、 DB2授權主要控制資料庫安全計劃的那些方面?
DB2 授權控制資料庫安全計劃的以下方面:
1) 使用者被授予的許可權級別
2) 允許使用者執行的命令
3) 允許使用者讀取和/或修改的資料
4) 允許使用者建立、修改和/或刪除的資料庫物件

280、 DB2的授權由那些組成?
DB2的授權由兩部分組成:
特權組和高階資料庫管理程式(例項級)維護和實用操作組成

281、 DB2的授權那些是例項級許可權?
SYSADM、SYSCTRL 和 SYSMAINT 是例項級許可權。

282、 什麼是例項級許可權?
例項級命令是針對這個例項中的所有資料庫的命令。
這些許可權只能分配給組;
可以透過 DBM CFG 檔案分配這些許可權。

283、 DB2的授權那些是資料庫級許可權?
針對特定資料庫的 DBADM 和 LOAD 許可權可以分配給使用者或使用者組。可以使用 GRANT 命令顯式地分配這些許可權。

284、 資料庫級許可權和例項級許可權有那些區別?
資料庫級許可權以分配給使用者或使用者組。而例項級許可權只能分配給組。
資料庫級許可權使用 GRANT 命令顯式地分配這些許可權。而例項級許可權是透過 DBM CFG 檔案分配這些許可權。

285、 如何檢視自己擁有那些許可權和資料庫級特權?
db2 get authorizations

286、 什麼是SYSADM許可權?
DB2 中的 SYSADM 許可權是最高許可權。對一個 DB2 例項擁有 SYSADM 許可權的使用者能夠對這個例項、這個例項中的任何資料庫以及這些資料庫中的任何物件發出任何 DB2 命令。

287、 如何設定SYSADM許可權?
SYSADM 許可權由 DBM CFG 檔案中的 SYSADM_GROUP 引數控制。可以將這個許可權授予某個組
db2 update dbm cfg using SYSADM_GROUP db2grp1

288、 在WINDOWS上SYSADM許可權預設是那個組擁有?
Administrator

289、 在UNIX上SYSADM許可權預設是那個組擁有?
建立這個例項的使用者的主組。

290、 更新 DBM CFG 檔案的使用者是那些?
只允許擁有 SYSADM 使用者更新 DBM CFG 檔案。

291、 什麼是SYSCRL許可權?
SYSCTRL 只是對例項執行所有的管理和維護命令,但是不能訪問資料庫中的任何資料。使用者可以對例項中的任何資料庫執行的命令示例如下:
1) db2start/db2stop
2) db2 create/drop database
3) db2 create/drop tablespace
4) db2 backup/restore/rollforward database
5) db2 runstats(針對任何表)
6) db2 update db cfg for database dbname

292、 如何獲得SYSCTRL許可權?
db2 update dbm cfg using SYSCTRL_GROUP group name

293、 什麼是SYSMAINT許可權?
SYSMAINT 使用者只能執行與維護相關的任務,比如:
1) db2start/db2stop
2) db2 backup/restore/rollforward database
3) db2 runstats(針對任何表)
4) db2 update db cfg for database dbname

294、 如何獲得SYSMAINT許可權?
db2 update dbm cfg using SYSMAINT_GROUP group name

295、 SYSMAINT許可權和SYSCTRL許可權的區別是那些?
區別是SYSCTRL許可權有以下許可權:
1) db2 create/drop database
2) db2 create/drop tablespace
而SYSMAINT許可權沒有。

296、 什麼是DBADM許可權?
DBADM 許可權是一個資料庫級許可權,而不是例項級許可權。
1) drop database
2) drop/create tablespace
3) backup/restore database
4) update db cfg for database db name
5) db2 create/drop table
6) db2 grant/revoke(任何特權)
7) db2 runstats(任何表)

297、 如何獲得DBADM許可權?
有三種:
1、db2 create database test
這個命令將資料庫 test 上的 DBADM 許可權隱式地授予發出此命令的使用者。
2、db2 connect to sample
db2 grant dbadm on database to user tst1
這個命令只能由 SYSADM 使用者發出;它向使用者 tst1 授予示例資料庫上的 DBADM 許可權。注意,在授予 DBADM 許可權之前,發出這個命令的使用者必須連線到示例資料庫。
3、db2 grant dbadm on database to group db2grp1
這個命令將 DBADM 許可權授予 db2grp1 組中的每個使用者。同樣,只有 SYSADM 使用者能夠發出這個命令。

298、 什麼是LOAD許可權?
LOAD 許可權是一個資料庫級許可權,所以它可以被分配給使用者和使用者組。顧名思義,LOAD 許可權允許使用者對錶發出 LOAD 命令。當用大量資料填充表時,LOAD 命令通常用來替代插入或匯入命令,它的速度更快。根據您希望執行的 LOAD 操作型別,僅僅擁有 LOAD 許可權可能還不夠。可能還需要表上的特定特權。
擁有 LOAD 許可權的使用者可以執行以下命令:
1) db2 quiesce tablespaces for table
2) db2 list tablespaces
3) db2 runstats(任何表)
4) db2 load insert(必須有表上的插入特權)
5) db2 load restart/terminate after load insert(必須有表上的插入特權)
6) db2 load replace(必須有表上的插入和刪除特權)
7) db2 load restart/terminate after load replace(必須有表上的插入和刪除特權)

299、 如何獲得LOAD許可權?
只有擁有 SYSADM 或 DBADM 許可權的使用者能夠對使用者或使用者組授予或撤消 LOAD 許可權。以下示例演示 LOAD 許可權如何允許我們的使用者使用 LOAD 命令將資料裝載進 sales 表中。假設已經發出了命令 db2 connect to sample。
1、
db2 grant load on database to user tst1
db2 grant insert on table sales to user tst1
有了 LOAD 許可權和插入特權,tst1 就可以對 sales 表發出 LOAD INSERT 或 LOAD RESTART,或者在 LOAD INSERT 之後發出 TERMINATE。
2、
db2 grant load on database to group grp1
db2 grant delete on table sales to group grp1
db2 grant insert on table sales to group grp1
有了 LOAD 許可權以及刪除和插入特權,grp1 的任何成員就可以對 sales 表發出 LOAD REPLACE 或 LOAD RESTART,或者在 LOAD REPLACE 之後發出 TERMINATE。

300、 特權是如何分類的?
特權分成兩類:
1) 資料庫級特權(針對資料庫中的所有物件)
2) 物件級特權(與特定的物件相關聯)。

301、 什麼是資料庫級特權?
1) CREATETAB: 使用者可以在資料庫中建立表。
2) BINDADD: 使用者可以使用 BIND 命令在資料庫中建立包。
3) CONNECT: 使用者可以連線資料庫。
4) CREATE_NOT_FENCED: 使用者可以建立 unfenced 使用者定義函式(UDF)。
5) IMPLICIT_SCHEMA: 使用者可以在資料庫中隱式地建立模式,而不需要使用 CREATE SCHEMA 命令。
6) LOAD: 使用者可以將資料裝載進表中。
7) QUIESCE_CONNECT: 使用者可以訪問處於靜默(quiesced)狀態的資料庫。
8) CREATE_EXTERNAL_ROUTINE: 使用者可以建立供應用程式和資料庫的其他使用者使用的過程。

302、 物件級許可權總結?
特權名稱 相關物件 描述
CONTROL 表、檢視、索引、包、別名、不同的型別、使用者定義函式、序列 提供對物件的全部許可權。擁有這種特權的使用者還可以向其他使用者授予或撤消對物件的特權。
DELETE 表、檢視 允許使用者從物件中刪除記錄。
INSERT 表、檢視 允許使用者透過 INSERT 或 IMPORT 命令將記錄插入物件中。
SELECT 表、檢視 提供使用選擇語句來檢視物件內容的能力。
UPDATE 表、檢視 允許使用者使用更新語句修改物件中的記錄。
ALTER 表 允許使用者使用更改語句更改物件定義。
INDEX 表 允許使用者使用建立索引語句在物件上建立索引。
REFERENCES 表 提供在物件上建立或刪除外來鍵約束的能力。
BIND 包 允許使用者重新繫結現有的包。
EXECUTE 包、過程、函式、方法 允許使用者執行包和例程。
ALTERIN 模式 允許使用者修改模式中的物件定義。
CREATEIN 模式 允許使用者在模式中建立物件。
DROPIN 模式 允許使用者刪除模式中的物件。

303、 表的許可權是那些?
CONTROL DELETE INSERT SELECT UPDATE ALTER INDEX REFERENCES

304、 檢視的許可權是那些?
CONTROL DELETE INSERT SELECT UPDATE

305、 包的許可權是那些?
CONTROL BIND EXECUTE

306、 過程、函式、方法的許可權是那些?
EXECUTE

307、 別名的許可權是那些?
CONTROL

308、 模式特權是什麼?
1) CREATEIN 允許使用者在模式內建立物件。
2) ALTERIN 允許使用者更改模式內的物件。
3) DROPIN 允許使用者刪除模式內的物件。

309、 什麼是表空間許可權?
USE OF TABLESPACE
允許使用者在特定表空間內建立表。這一特權無法用於 SYSCATSPACE 或任何系統臨時表空間。

310、 什麼是索引許可權?
CONTROL
允許使用者刪除索引。

311、 什麼是例程特權?
EXECUTE
允許使用者執行使用者定義的函式。

312、 什麼是順序特權?
USAGE
允許使用者為順序物件使用 NEXTVAL 和 PREVVAL 表示式。

313、 列出資料庫許可權的系統編目檢視名是什麼?
SYSCAT.DBAUTH

314、 列出表和檢視許可權的系統編目檢視名是什麼?
SYSCAT.TABAUTH

315、 列出列許可權的系統編目檢視名是什麼?
SYSCAT.COLAUTH

316、 列出包許可權的系統編目檢視名是什麼?
SYSCAT.PACKAGEAUTH

317、 列出索引許可權的系統編目檢視名是什麼?
SYSCAT.INDEXAUTH


318、 列出模式許可權的系統編目檢視名是什麼?
SYSCAT.SCHEMAAUTH


319、 列出伺服器許可權的系統編目檢視名是什麼?
SYSCAT.PASSTHRUAUTH


320、 列出例程(函式,儲存過程)許可權的系統編目檢視名是什麼?
SYSCAT.ROUTINEAUTH

321、 什麼是顯性特權?
可以使用 GRANT 和 REVOKE 命令顯式地 對使用者或組授予或撤消特權。

322、 什麼是隱性特權?
當發出某些命令時,DB2 可能會自動地授予特權,這就是隱性特權。而不需要像前面看到的那樣發出顯式的 GRANT 語句。

323、 什麼是隱性特權CREATE TABLE mytable?
授予的特權
mytable 上的 CONTROL
被授予特權的使用者
發出命令的使用者

324、 什麼是隱性特權CREATE SCHEMA myschema?
授予的特權
myschema 上的 CREATEIN、ALTERIN 和 DROPIN,以及將這些特權授予其他使用者的能力
被授予特權的使用者
發出命令的使用者

325、 什麼是隱性特權CREATE VIEW myview?
授予的特權
myview 上的 CONTROL(只有在使用者擁有 myview 定義中引用的所有表和檢視上的 CONTROL 特權的情況下)
被授予特權的使用者
發出命令的使用者

326、 什麼是隱性特權CREATE DATABASE mydb?
授予的特權
mydb 的系統編目表上的 SELECT,mydb 上的 IMPLICIT_SCHEMA *
被授予特權的使用者
PUBLIC

327、 什麼是間接特權?
當資料庫管理器執行包時,可以間接獲得的特權就是間接特權。

328、 如何將特權授予某人,並執行某人將特權擴充套件給他人?
授予特權 with grant option 允許授權 ID 將特定特權擴充套件給他人。

329、 什麼是基於標籤的訪問控制(LBAC)?
這個功能是DB2新增的一個概念,是為 DBA 提供了在表的行或列級限制讀/寫特權的能力。

330、 什麼是防火牆?
防火牆是一系列程式和硬體,位於閘道器伺服器上。用於防止沒有認證的連線到系統或者網路上。

331、 防火牆是如何分類的?
分成四類:
網路級別,包過濾,或者監視路由防火牆
典型程式級代理防火牆
關鍵級或者透明防火牆
SMLI防火牆

332、 DB2是如何進行資料加密的?
DB2可以對資料進行加密,主要透過三個函式來進行的:
加密函式
Encrypt (data-string-expression, password-string-expression, and hint-string-expression).

解密函式
Decrypt_Bin (encrypted-data, password-string-expression).

Decrypt_Char (encrypted-data, password-string-expression).

333、 如何進行行級加密?
-- Create emp table, set encryption password, and insert three rows:

create table emp (ssn varchar(124) for bit data);
set encryption password ='DNTTEAM';
insert into emp (ssn) values(encrypt('111-11-1111'));
insert into emp (ssn) values(encrypt('222-22-2222'));
insert into emp (ssn) values(encrypt('333-33-3333'));
-- Select data from emp table:

select ssn from emp

SSN
-----------------------------------------------------------------
x'0010F0FF0333D5A034E989260E4F99ED59070DD69B6E3C1B'
x'005EA2FF0333D5A05F167D1BC1E9EAD33D7D4987B57D5670'
x'00EE12FF0333D5A06174133D8E3A22756382F84B48F4DD05'

-- Set encryption password:

set encryption password ='DNTTEAM';
select decrypt_char(ssn) as ssn from emp;

SSN
-----------
111-11-1111
222-22-2222
333-33-3333

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

相關文章