Tải bản đầy đủ (.pdf) (48 trang)

Bổ sung các khả năng an toàn mới trong DB2 9.5, Phần 1: Hiểu rõ các vai trò trong DB2 9.5 pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (614.13 KB, 48 trang )

Bổ sung các khả năng an toàn mới trong DB2 9.5, Phần 1: Hiểu rõ các vai trò
trong DB2 9.5
Bảo đảm an toàn cho cơ sở dữ liệu của bạn
Paul Read, Giám đốc giới thiệu sản phẩm của IBM, EMC
Tóm tắt:
IBM® DB2® 9.5 cung cấp các tùy chọn mới để bảo đảm an toàn chặt chẽ hơn và
cho phép các mức độ chi tiết và linh hoạt hơn trong việc quản trị cơ sở dữ liệu.
Hướng dẫn này là phần đầu tiên trong hai hướng dẫn nói về các vai trò (role) và
các bối cảnh tin cậy. Hãy làm theo các bài tập trong hướng dẫn này, và tìm hiểu
cách tận dụng các đặc tính mới là các vai trò trong DB2 trong việc phối hợp với
các công nghệ e-business cốt yếu khác như các dịch vụ Web, máy chủ ứng dụng
Web và máy chủ cơ sở dữ liệu DB2.
Trước khi bạn bắt đầu
Về hướng dẫn này
Hướng dẫn này sẽ dẫn dắt bạn qua một loạt các bài tập để làm quen với các vai
trò, một đặc tính mới trong DB2 9.5. Hướng dẫn này dành cho các chuyên gia kỹ
thuật DB2, các quản trị viên cơ sở dữ liệu, và các lập trình viên. Bạn phải có hiểu
biết tốt về DB2 trên Linux, UNIX, và Windows (sau đây gọi là DB2 LUW). Bạn
cũng cần phải quen thuộc với cửa sổ lệnh DB2 và việc chạy các kịch bản lệnh
DB2. Sử dụng Data Studio IBM mới, bạn có thể tạo và quản lý các vai trò. Tuy
nhiên, chúng không được hỗ trợ trong trung tâm điều khiển DB2.


Các mục tiêu
Hướng dẫn này sẽ giúp bạn làm quen với các khái niệm và các đặc tính của các vai
trò trong DB2 9.5. Trong các bài tập này, bạn sẽ tìm hiểu về:
 Các khái niệm cơ bản về vai trò
 Cách tạo và quản lý các vai trò
 Cách sử dụng các truy vấn SQL và các công cụ khác nhau để phân tích
cách dùng các vai trò



Các yêu cầu về hệ thống
Để chạy các ví dụ trong hướng dẫn này, bạn cần bạn cần có:
 DB2 9.5 Express-C
 Microsoft Windows 2003, XP hay Linux (Môi trường đã hợp lệ)
 Phiên bản Java® Runtime Environment 1.4.2 hoặc mới hơn
Ngoài ra bạn phải bảo đảm phần cứng của mình đáp ứng được các yêu cầu chạy
DB2 9.5. Xem trang Các yêu cầu hệ thống của DB2 9.5.)
Tải về DB2 9.5 Express-C đã có sẵn trong đường liên kết ở trên. DB2 9.5 là một
bản cài đặt đầy đủ, không phải là bản vá lỗi nâng cấp. Theo mặc định, DB2 sẽ tự
động khởi động sau khi cài đặt trừ khi bạn cài đặt nó không khởi động tự động
Sử dụng các kịch bản lệnh và dữ liệu mẫu có trong tệp tin nén kèm theo (xem
phần Tải về) để giải thích các khái niệm trong hướng dẫn này. Giải nén tệp tin,
chứa các nội dung vào trong một thư mục con có tên là DB2Roles (C:\DB2Roles
hay home/userid/DB2Roles). Thư mục này sẽ được nói đến với tên đơn giản là
DB2Roles, xuyên suốt toàn bộ hướng dẫn này. Hướng dẫn này cũng giả thiết rằng
bạn sử dụng các thư mục mặc định trong khi cài đặt DB2 và yêu cầu bạn tạo ra
một số userid (tên nhận dạng người dùng) và tất cả các bài tập sẽ sử dụng các
userid được tạo ra này.


Định nghĩa một vai trò
Một vai trò là một đối tượng cơ sở dữ liệu và có thể cấp hay hủy bỏ một hoặc
nhiều quyền ưu tiên (privileges), quyền hành động (authorities) hoặc các vai trò
DB2 khác đối với nó. Một vai trò không có chủ sở hữu và chỉ có người quản trị an
toàn (SECADM) có thể tạo ra hay hủy bỏ nó.
Bằng cách gắn kết một vai trò với một người sử dụng, người sử dụng này sẽ thừa
hưởng tất cả các quyền ưu tiên do vai trò đó nắm giữ, ngoài các quyền anh ta đã
có.
Lợi thế chủ yếu của các vai trò cơ sở dữ liệu là ở chỗ chúng đơn giản hóa việc

quản trị và quản lý các quyền trong một cơ sở dữ liệu. Ví dụ:
 Những người quản trị an toàn có thể kiểm soát truy nhập vào các cơ sở dữ
liệu của họ ở một mức trừu tượng gần với cấu trúc của các tổ chức của họ.
Ví dụ, nếu công ty có 12 chi nhánh và mọi người trong từng chi nhánh có
một tập hợp của các quyền giống nhau, thì SECADM sẽ thiết lập 12 vai trò
và sau đó cấp phát tư cách thành viên cho những người sử dụng dựa vào vị
trí của họ.
 Những người sử dụng được cấp phát tư cách thành viên trong các vai trò
dựa vào các trách nhiệm công việc của họ. Khi các trách nhiệm công việc
của người sử dụng thay đổi, việc này thường hay xảy ra trong các tổ chức
lớn, tư cách thành viên của anh ta có thể dễ dàng được cấp phát và hủy bỏ.
Ví dụ, nếu một người sử dụng chuyển từ chi nhánh New York đến chi
nhánh Boston, thì SECADM chỉ cần đơn giản hủy bỏ quyền truy nhập của
anh ta tới vai trò với New York và cấp phép truy nhập tới vai trò với chi
nhánh Boston.
 Việc phân định các quyền cũng được đơn giản hóa. Thay vì cấp phát tập
hợp các quyền giống nhau cho từng người dùng riêng lẻ trong một chức
năng công việc cụ thể, thì người quản trị có thể cấp phát tập hợp các quyền
này cho một vai trò đại diện cho chức năng công việc đó và sau đó cấp phát
vai trò này cho những người sử dụng có chức năng công việc đó. Ví dụ, các
công việc riêng lẻ có thể thường yêu cầu nhiều quyền khác nhau cho một
người sử dụng. Tuy nhiên, nếu cấp phát các quyền cho một vai trò thì sẽ
đơn giản hơn khi cấp phát hay hủy bỏ các quyền đó và không phải duy trì
các kịch bản lệnh lớn cho từng công việc. Nếu SECADM cần thay đổi các
quyền cho một vai trò , anh ta có thể thay đổi nó ở một nơi thôi, không phải
lặp lại tiến trình này với mọi người sử dụng.
 Các vai trò có thể được cập nhật mà không cần cập nhật các quyền cho mỗi
người sử dụng một cách riêng lẻ. Ví dụ, nếu SECADM cần thay đổi các
quyền cho chi nhánh ở New York, SECADM có thể thay đổi định nghĩa
của vai trò mà không phải lặp lại tiến trình này với mọi người sử dụng.

Tất cả các quyền ưu tiên và quyền hành động của DB2 có thể cấp trong một cơ sở
dữ liệu, trừ SECADM, đều có thể được cấp phát cho một vai trò. Bằng cách cấp
phát các quyền ưu tiên và quyền hành động chỉ cho các vai trò và cho người sử
dụng làm thành viên trong các vai trò đó, việc quản trị và quản lý các quyền trong
cơ sở dữ liệu được đơn giản hóa rất nhiều.

Xây dựng môi trường
Phần này giới thiệu một số mã lệnh mẫu, có sẵn để tải xuống cùng với hướng dẫn
này, để mô tả hành vi của các vai trò . (Xem phần Tải về.) Các mẫu dựa vào các
đối tượng cơ sở dữ liệu có thể được bổ sung vào cơ sở dữ liệu SAMPLE. Dữ liệu
cần thiết để điền vào các bảng có trong một tệp tin ASCII dùng dấu phân cách
(delimited) trong thư mục con DB2Roles có tên là data.del. Tất cả các kịch bản
lệnh nằm trong thư mục con Section 2.
Để chạy các kịch bản lệnh trong một cửa sổ lệnh DB2, sử dụng lệnh:
db2 –tvf scriptname.sql


Các kịch bản bó lệnh (có đuôi .bat) có thể chạy khi gõ tên vào cửa sổ này.
Các hướng dẫn
Đầu tiên, hãy đăng nhập vào hệ thống của bạn bằng userid của người quản trị/
userid gốc, rồi tạo ra các userid sau:
 DB2SEC cho SECADM
 MARK, ALLY, và SAUL sẽ là nhóm quản lý
 ADAM, DEBS, PETE, YANG, MARY, và ANNE
 ROSE, STAN, ALAN, LORI, EVAN, và KLEM
Các userid này không cần có bất kỳ các quyền hành động đặc biệt nào do chúng sẽ
chỉ được sử dụng với cơ sở dữ liệu DB2; Tất cả các quyền ưu tiên và quyền hành
động cần thiết sẽ được phát ra bằng SQL. Bạn cũng cần một nhóm có tên là
Pension_gp. Đặt ROSE vào trong nhóm này. Không thiết lập bất kỳ các quyền hạn
nào cho nhóm. Nếu sử dụng Windows, hãy chắc rằng những người sử dụng trên

không nằm trong nhóm Administrators.
Sơ đồ sau cho thấy sự phân cấp trong công ty và các vai trò sẽ được sử dụng trong
các bài tập:

Hình 1. Cấu trúc của các vai trò

Cần chú ý rằng một số tên xuất hiện trong hai hộp vì một số cá nhân có công việc
ở cả hai ban và vì thế họ cần có nhiều hơn một vai trò. KLEM là một người mới
được tuyển dụng nên anh ta chưa được gán tới một vai trò nào.
Trong các bài tập sau đây, DB2inst1 được sử dụng như người quản trị cơ sở dữ
liệu DB2 và cơ sở dữ liệu SAMPLE được dùng làm cơ sở dữ liệu. Tất cả các kịch
bản lệnh đều sử dụng userid DB2inst1 và một mật khẩu là "password". Bạn phải
soạn thảo các kịch bản lệnh khớp với hệ thống của mình nếu bạn sử dụng một cơ
sở dữ liệu hay số ID quản trị cơ sở dữ liệu (DBA) khác. Xin kiểm tra xem cơ sở
dữ liệu "Sample" hay cơ sở dữ liệu khả dụng khác đã tồn tại chưa. Nếu không, bạn
cần sử dụng lệnh DB2SAMPL, để tạo ra cơ sở dữ liệu SAMPLE vì nó được sử
dụng xuyên suốt các phần còn lại của hướng dẫn này.
Bây giờ, hãy thêm những người sử dụng mới và các bảng mới vào cơ sở dữ liệu
cho tập hợp các bài tập này:
1. Thêm những người sử dụng vào cơ sở dữ liệu.
2. Nối đến cơ sở dữ liệu với tư cách DBA và cấp các quyền ưu tiên sau đây:

Liệt kê lệnh 1. Cấp các quyền cho những người sử dụng cơ sở dữ liệu

GRANT CONNECT ON DATABASE TO USER MARK;


GRANT CONNECT ON DATABASE TO USER ALLY;

GRANT CONNECT ON DATABASE TO USER ADAM;



GRANT CONNECT ON DATABASE TO USER DEBS;

GRANT CONNECT ON DATABASE TO USER PETE;

GRANT CONNECT ON DATABASE TO USER YANG;


GRANT CONNECT ON DATABASE TO USER SAUL;

GRANT CONNECT ON DATABASE TO USER MARY;


GRANT CONNECT ON DATABASE TO USER ANNE;


GRANT CONNECT ON DATABASE TO USER ROSE;

GRANT CONNECT ON DATABASE TO USER STAN;

GRANT CONNECT ON DATABASE TO USER ALAN;


GRANT CONNECT ON DATABASE TO USER LORI;

GRANT CONNECT ON DATABASE TO USER EVAN;


GRANT SECADM ON DATABASE TO USER DB2SEC;


3.
hoặc sử dụng kịch bản lệnh AddUsers.sql để bổ sung thêm những người sử
dụng mới.
4. Tạo các bảng mới cho cơ sở dữ liệu SAMPLE bằng kịch bản lệnh
luwebase.sql, nó giả thiết rằng bạn đang đặt các bảng vào trong
USERSPACE1.
Phần sau đây bổ sung thêm các bảng cơ sở:

Liệt kê lệnh 2. Bổ sung thêm các bảng cơ sở

LE_DEPARTMENT

LE_EMPLOYEE
LE_EMP_PHOTO
LE_EMP_RESUME

LE_ORG
LE_SALES
LE_PENSIONS
5.
6. Nạp dữ liệu vào trong các bảng mới bằng kịch bản lệnh luweload.sql, bạn
phải soạn thảo kịch bản lệnh cho Linux hoặc khi bạn thay đổi các vị trí của
các tệp tin nạp vào.
7. Để hoàn thành công việc cài đặt, chạy kịch bản lệnh luweplus.sql để tạo ra
các khung nhìn, các chỉ mục và các đối tượng cơ sở dữ liệu khác bổ sung
thêm.
Xin hãy kiểm tra các lỗi và các cảnh báo khi bạn chạy các kịch bản lệnh SQL. Bạn
cũng có thể muốn kiểm tra các đối tượng, sử dụng Trung tâm điều khiển hay công
cụ khác để xác nhận xem bạn có các bảng và dữ liệu chưa.


Cài đặt và cấu hình các vai trò
Trong phần này, bạn sẽ tìm hiểu cách để :
 Tạo ra các vai trò mới
 Gán các quyền cho một vai trò
 Cấp tư cách vai trò cho các thành viên
Quyền hành động để quản lý thành viên trong một vai trò được trao cho
SECADM. SECADM sử dụng các lệnh DML tiêu chuẩn để quản lý các vai trò.
Tất cả các lệnh DML để sử dụng với các vai trò có thể được nhúng vào trong một
chương trình ứng dụng hay được đưa ra thông qua việc sử dụng các lệnh SQL
động. Đó là một lệnh khả thi có thể chuẩn bị động chỉ khi hành vi chạy
DYNAMICRULES có hiệu lực đối với gói đó.
Lệnh CREATE ROLE định nghĩa một vai trò tại một máy chủ hiện tại. vai trò phải
có một tên nhận diện duy nhất:
CREATE ROLE *role-name*


Lệnh DROP ROLE xóa bỏ một vai trò ở một máy chủ hiện tại, vai trò phải đã tồn
tại ở máy chủ hiện tại, và vai trò không thể bị xóa nếu nó hiện đang sử dụng như
một thuộc tính kết nối (SESSION_USER) hay như một bối cảnh tin cậy. Chỉ
SECAM mới có thể loại bỏ một vai trò.
DROP ROLE *role-name*


Lệnh GRANT và REVOKE ROLE được sử dụng để cấp phát hay hủy bỏ các vai
trò cho những người sử dụng, các nhóm hay cho các vai trò khác. Các lệnh này có
thể cũng được dùng để ủy quyền bằng WITH ADMIN OPTION. WITH ADMIN
OPTION cho phép người được ủy quyền (chỉ rõ ID) được quyền hành động cấp
phát hay hủy bỏ vai trò (chỉ rõ tên) cho/khỏi người khác.Ví dụ:


Liệt kê lệnh 3. Cấp hay hủy bỏ vai trò cho/khỏi người khác

GRANT ROLE *role-name* TO *authorization-name*

GRANT ROLE *role-name* TO *authorization-name*
WITH ADMIN OPTION

REVOKE ROLE *role-name* FROM *authorization-name*


REVOKE ADMIN OPTION FOR ROLE *role-name*
FROM *authorization-name*

Lệnh COMMENT ON có thể được dùng để mô tả về ROLE trong các tài liệu hệ
thống. Ví dụ:
COMMENT ON ROLE *role-name* IS *'comment'*



Các kịch bản lệnh cần thiết cho phần này có trong thư mục con Section3 của phần
tải xuống có sẵn.
Tất cả các khung nhìn danh mục hệ thống có trình bày chi tiết về những người sử
dụng hay các nhóm đã được cập nhật để có các vai trò mới. Có hai khung nhìn
mới trong DB2 9.5 cho thấy các chi tiết của các vai trò:
1. SYSCAT.ROLES: Khung nhìn này có một hàng cho mỗi vai trò đã định
nghĩa. Nó có chứa các mã nhận diện (ID) của vai trò, cộng thêm ngày tháng
tạo thành và thông tin chính sách kiểm toán đi kèm.
2. SYSCAT.ROLEAUTH: Khung nhìn này có một hàng cho mỗi người sử
dụng, mỗi nhóm hay mỗi vai trò đã được cấp quyền hành động đối với một
vai trò và thông tin liệu họ đã ủy quyền về vai trò đó chưa

Để đơn giản hóa việc quản trị các vai trò, có một hàm hệ thống, được là hàm
AUTH_LIST_ROLES_FOR_AUTHID, cho phép người quản trị có khả năng
kiểm tra xem những vai trò nào đã được cấp cho một người sử dụng, một nhóm
hay một vai trò. (Hàm này sẽ được mô tả và làm rõ trong phần sau, "Maintain and
manage roles" (Duy trì và quản lý các vai trò ).
Vai trò đơn giản là một đối tượng cơ sở dữ liệu có thể được sử dụng để định nghĩa
các quyền hạn đối với các đối tượng cơ sở dữ liệu khác như các bảng, các khung
nhìn, các trigger, và các bối cảnh tin cậy. Có thể gán cho những người sử dụng
một vai trò để cho phép họ truy nhập dữ liệu bên trong cơ sở dữ liệu đó. Trong
hướng dẫn này, bạn sẽ học cách tạo ra một hệ phân cấp các vai trò, đồng nhất với
cấu trúc của công ty nhỏ, như được minh họa trong Hình1.
Bạn sẽ tạo ra các vai trò cơ sở sau đây :
 Sales: Cho phòng bán hàng
 Mktg: Cho phòng tiếp thị
 Admin: Cho phòng quản lý
 Payroll: Cho phòng tiền lương
 Pension: Cho Yang, người quản lý trợ cấp
 SalesMgr: Để chứa các vai trò Sales và Mktg
 AdminMgr: Để chứa các vai trò Admin và Payroll
 CEO: Để chứa các vai trò AdminMgr và SalesMgr
Các hướng dẫn
Đăng nhập vào hệ thống của bạn bằng userid của người quản trị an toàn và mật
khẩu được bạn tạo ra trong phần trước. Thay đổi thư mục hiện tại đến Section3.
1. Tạo ra các vai trò cơ sở, sử dụng mã lệnh sau

Liệt kê lệnh 4. Tạo ra các vai trò cơ sở

CREATE ROLE Sales;

CREATE ROLE Mktg;


CREATE ROLE Admin;

CREATE ROLE Payroll;

CREATE ROLE Pension;

CREATE ROLE SalesMgr;


CREATE ROLE AdminMgr;


CREATE ROLE CEO;
2.

hoặc sử dụng kịch bản lệnh CreateRoles.sql để tạo ra các vai trò.

Bảng Privileges , (Các quyền) dưới đây cho thấy các quyền được cấp cho
các vai trò:
Table 1. Privileges
Vai trò
Các quyền Các bảng
SELECT LE_ORG, LE_SALES
Sales UPDATE, INSERT LE_SALES
Mktg SELECT LE_ORG, LE_SALES
SELECT
LE_DEPARTMENT, LE_EMPLOYEE,
LE_ORG, LE_SALES
Admin


UPDATE LE_EMPLOYEE, LE_DEPARTMENT
SELECT
LE_DEPARTMENT, LE_EMPLOYEE,
LE_EMP_PHOTO, LE_EMP_RESUME,
LE_PENSIONS
Payroll

UPDATE, INSERT,
DELETE
LE_EMPLOYEE
Pension

SELECT, UPDATE,
INSERT, DELETE,
ALTER
LE_PENSIONS
3.
4. Cấp các quyền cho các vai trò bằng các lệnh sau đây:

Liệt kê lệnh 5. Cấp các quyền cho các vai trò

GRANT SELECT ON TABLE db2inst1.le_org TO ROLE Sales;
GRANT SELECT, UPDATE, INSERT ON TABLE db2inst1.le_sales TO
ROLE Sales;
GRANT SELECT ON TABLE db2inst1.le_org TO ROLE Mktg;
GRANT SELECT ON TABLE db2inst1.le_sales TO ROLE Mktg;
GRANT SELECT ON TABLE db2inst1.le_department TO ROLE Admin;
GRANT SELECT ON TABLE db2inst1.le_employee TO ROLE Admin;
GRANT SELECT ON TABLE db2inst1.le_org TO ROLE Admin;

GRANT SELECT ON TABLE db2inst1.le_sales TO ROLE Admin;
GRANT UPDATE ON TABLE db2inst1.le_department TO ROLE Admin;

GRANT UPDATE ON TABLE db2inst1.le_employee TO ROLE Admin;
GRANT SELECT ON TABLE db2inst1.le_department TO ROLE Payroll;

GRANT SELECT ON TABLE db2inst1.le_emp_photo TO ROLE Payroll;

GRANT SELECT ON TABLE db2inst1.le_emp_resume TO ROLE
Payroll;
GRANT SELECT ON TABLE db2inst1.le_pensions TO ROLE Payroll;
GRANT UPDATE, INSERT, DELETE ON TABLE db2inst1.le_employee
TO ROLE Payroll;
GRANT SELECT, UPDATE, INSERT, DELETE, ALTER ON TABLE
db2inst1.le_pensions
TO ROLE Payroll;
5.

hoặc sử dụng kịch bản lệnh AssignRoles.sql để tạo ra các vai trò .

Bây giờ bạn cần đặt các cá nhân vào trong các vai trò tương ứng của họ.
6. Cấp tư cách thành viên của các vai trò bằng các lệnh sau đây:

Liệt kê lệnh 6. Cấp tư cách thành viên của các vai trò

GRANT ROLE SalesMgr, AdminMgr to ROLE CEO;
GRANT ROLE CEO TO USER Mark;

GRANT ROLE Admin, Payroll to ROLE AdminMgr;
GRANT ROLE AdminMgr TO USER Ally;


GRANT ROLE Sales, Mktg to ROLE SalesMgr;
GRANT ROLE SalesMgr TO USER Saul;

GRANT ROLE Admin TO USER Adam, Debs, Mary;


GRANT ROLE Mktg TO USER Mary, Anne, Rose;

GRANT ROLE Payroll TO USER Adam, Pete, Yang;

GRANT ROLE Pension TO USER Yang;

GRANT ROLE Sales TO USER Stan, Alan, Lori, Evan;

7.

hoặc sử dụng kịch bản lệnh AssignUsers.sql để cấp tư cách thành viên ứng
với các vai trò .

Bây giờ bạn đã có cấu trúc cơ sở, bạn có thể chạy một vài truy vấn để thông
qua tính hợp lệ của các quyền ưu tiên và quyền hành động thuộc về những
người sử dụng.
8. Nối tới cơ sở dữ liệu SAMPLE với tư cách là Anne, và chạy hai truy vấn:
CONNECT TO SAMPLE USER Anne USING password


SELECT * FROM db2inst1.le_org

SELECT * FROM db2inst1.le_employee

9.

hoặc sử dụng kịch bản lệnh AnneQueries.sql để chạy các truy vấn. Lệnh
SELECT từ bảng ORG sẽ làm việc, nhưng Anne không thể truy nhập bảng
EMPLOYEE do Anne chỉ có trong vai trò MKTG. Kết quả đưa ra cần phải
giống như sau:

Liệt kê lệnh 7. Kết quả truy vấn

CONNECT TO SAMPLE USER Anne USING

Database Connection Information

Database server = DB2/NT 9.5.0
SQL authorization ID = ANNE
Local database alias = SAMPLE


SELECT * FROM db2inst1.le_org

DEPTNUMB DEPTNAME MANAGER DIVISION LOCATION

C21 Head Office C01 Corporate London
C21 Eastern C01 Finance Vienna
C21 Western C01 Finance Paris
.
.
.

9 record(s) selected.



SELECT * FROM db2inst1.le_employee
SQL0551N "ANNE" does not have the privilege to perform operation
"SELECT"
on object "DB2INST1.LE_EMPLOYEE". SQLSTATE=42501
10.
11. Thay đổi người sử dụng thành Mary và lặp lại các truy vấn:
CONNECT TO SAMPLE USER Mary USING password


SELECT * FROM db2inst1.le_org

SELECT * FROM db2inst1.le_employee
12.

Cả hai truy vấn đều làm việc với Mary bởi vì Mary có trong cả vai trò
MKTG lẫn vai trò ADMIN. Vì thế, bạn sẽ có khả năng xem nội dung của
bảng le_employee (xem Liệt kê lệnh 8).
13. Nối tới cơ sở dữ liệu SAMPLE với tư cách là Debs, và chạy hai truy vấn:
CONNECT TO SAMPLE USER Debs USING password

SELECT * FROM db2inst1.le_employee
SELECT * FROM db2inst1.le_pensions
14.

hoặc sử dụng kịch bản lệnh DebsQueries.sql để thực hiện các truy vấn.
Lệnh SELECT từ bảng EMPLOYEE sẽ làm việc, nhưng Debs không thể
truy nhập bảng PENSIONS vì Debs chỉ có trong vai trò Admin (xem Liệt
kê lệnh 9).

15. Thay đổi người sử dụng thành Adam, và lặp lại các truy vấn:
CONNECT TO SAMPLE USER Adam USING password

SELECT * FROM db2inst1.le_employee
SELECT * FROM db2inst1.le_pensions
16.

Cả hai truy vấn làm việc với Adam bởi vì Adam có trong các vai trò
AYROLL và ADMIN. Vì vậy bạn có thể xem bảng le_pensions (xem Liệt
kê lệnh 10).
17. Một lựa chọn khác, thay đổi người sử dụng thành Mark (có vai trò CEO).
Mark có thể thực hiện tất cả các truy vấn.

Duy trì và quản lý các vai trò
Chỉ riêng trong hướng dẫn này, thật khó nhận thấy các lợi ích của các vai trò trong
việc điều hành một cơ sở dữ liệu. Tuy nhiên, nếu bạn quan sát một công ty lớn với
hàng nghìn nhân viên trong hàng trăm vai trò, các lợi ích trở nên rõ ràng hơn. Ví
dụ, nếu công ty có trung bình 20 đại diện bán hàng ở mỗi chi nhánh, 10 chi nhánh
cho mỗi vùng hay bang, và 50 vùng trong cấu trúc bán hàng, tự nhiên bạn có
10.000 đại diện bán hàng và có thể có 1.000 nhân viên có liên quan khác. Trong
các phiên bản DB2 trước đây, bạn phải cấp các quyền cho từng người hay phải
thỏa hiệp (chấp nhận nguy cơ) về an toàn truy nhập tới dữ liệu. Giả sử bạn có các
vai trò khác nhau cho từng chi nhánh, vùng, và có hỗ trợ vai trò; bạn vẫn còn có
hơn 500 vai trò. Tuy nhiên, khi một người gia nhập công ty, rời bỏ công ty, hay
chuyển vị trí, đó chỉ là đơn giản cấp hay hủy bỏ một vai trò. Nếu bạn giả thiết một
tốc độ thay đổi là 5%, thì vẫn còn có trên 500 thay đổi trong một năm. Tuy nhiên,
nếu bạn giao quyền quản lý tới các mức vùng hay mức chi nhánh, thì các nhiệm vụ
quản lý ở các mức này trở nên dễ dàng hơn.
Trong phần này, bạn sẽ xem xét:
 WITH ADMIN OPTION

 Các ảnh hưởng của việc huỷ bỏ các quyền hạn của vai trò
 Truy vấn về các quyền thành viên
Các hướng dẫn
Đăng nhập vào hệ thống của bạn bằng userid của người quản trị an toàn và mật
khẩu được bạn tạo ra trong phần "Xây dựng môi trường " của hướng dẫn này.
Thay đổi thư mục hiện tại thành Section4.
Đầu tiên, chúng ta hãy khám phá một số ảnh hưởng của việc hủy bỏ tư cách thành
viên của vai trò:
1. Nối tới cơ sở dữ liệu SAMPLE với tên Mary. Thực hiện một phép nối giữa
các bảng SALES và EMPLOYEE, và sau đó tạo ra một khung nhìn trên cả
hai bảng đó:

Liệt kê lệnh 11. Kiểm thử các quyền hạn của Mary

CONNECT TO SAMPLE USER Mary USING password
SELECT e.firstnme, e.lastname, SUM(s.sales)
FROM db2inst1.le_employee e, db2inst1.le_sales s
WHERE e.firstnme=s.sales_person
GROUP BY e.firstnme, e.lastname
CREATE VIEW total_sales (fname, lname, sales)
AS SELECT e.firstnme, e.lastname, SUM(s.sales)
FROM db2inst1.le_employee e, db2inst1.le_sales s
WHERE e.firstnme=s.sales_person
GROUP BY e.firstnme, e.lastname
2.

hoặc sử dụng kịch bản lệnh Mary01.sql để chạy SQL. Lệnh SELECT cần
phải tạo ra một danh sách giao dịch bán theo người bán hàng, và lệnh tạo
khung nhìn sao chép chính xác dữ liệu này như một khung nhìn. Các lệnh
này làm việc được vì Mary là một thành viên của các vai trò Admin và

Sales.

Liệt kê lệnh 12. Các kết quả việc kiểm thử Mary

CONNECT TO SAMPLE USER Mary USING

Database Connection Information

Database server = DB2/NT 9.5.0
SQL authorization ID = MARY
Local database alias = SAMPLE


SELECT e.firstnme, e.lastname,

SUM(s.sales) as Total_Sales
FROM db2inst1.le_employee e, db2inst1.le_sales s WHERE
e.firstnme=s.sales_person

GROUP BY e.firstnme, e.lastname

FIRSTNME LASTNAME TOTAL_SALES

ALAN OMAHONY 8
EVAN WELSH 34
LORI VERLOAD 57
STAN DELIVER 64

4 record(s) selected.



CREATE VIEW total_sales (fname, lname, sales) AS SELECT e.firstnme,
e.lastname,
SUM(s.sales)
FROM db2inst1.le_employee e, db2inst1.le_sales s WHERE
e.firstnme=s.sales_person
GROUP BY e.firstnme, e.lastname
DB20000I The SQL command completed successfully.
3.

Các quyền hành động hay quyền ưu tiên được thừa kế thông qua tư cách
thành viên của vai trò được xử lý chính xác giống như khi chúng được cấp
trực tiếp.
4. Bây giờ, chúng ta hãy loại bỏ Mary khỏi vai trò Admin và thử dùng lệnh
SELECT để sử dụng khung nhìn do Mary đã tạo ra:

Liệt kê lệnh 13. Hủy bỏ vai trò ADMIN khỏi Mary

CONNECT TO SAMPLE USER db2sec USING password


REVOKE ROLE admin FROM Mary

CONNECT TO SAMPLE USER Mary USING password

SELECT e.firstnme, e.lastname, SUM(s.sales)
FROM db2inst1.le_employee e, db2inst1.le_sales s
WHERE e.firstnme=s.sales_person
GROUP BY e.firstnme, e.lastname


SELECT * FROM total_sales
5.

hoặc sử dụng kịch bản lệnh Mary02.sql để chạy SQL. Lệnh SELECT
không làm việc do Mary không có trong vai trò Admin và, vì vậy, không
còn quyền hạn lựa chọn trên LE_EMPLOYEE nữa. Lệnh SELECT thứ hai
cũng không làm việc do khung nhìn đã đánh dấu không hợp lệ.

Liệt kê lệnh 14. Mary không còn khả năng truy nhập các bảng ADMIN
nữa

CONNECT TO SAMPLE USER DB2SEC USING

Database Connection Information

Database server = DB2/NT 9.5.0
SQL authorization ID = DB2SEC
Local database alias = SAMPLE


REVOKE ROLE Admin FROM Mary
DB20000I The SQL command completed successfully.

CONNECT TO SAMPLE USER Mary USING

Database Connection Information

Database server = DB2/NT 9.5.0
SQL authorization ID = MARY
Local database alias = SAMPLE



SELECT e.firstnme, e.lastname, SUM(s.sales) as Total_Sales
FROM db2inst1.le_employee e, db2inst1.le_sales s
WHERE e.firstnme=s.sales_person GROUP BY e.firstnme, e.lastname
SQL0551N "MARY" does not have the privilege to perform operation
"SELECT"
on object "DB2INST1.LE_EMPLOYEE". SQLSTATE=42501

SELECT * FROM total_sales
SQL0575N View or materialized query table "MARY.TOTAL_SALES"
cannot be used
because it has been marked inoperative. SQLSTATE=51024
6.

Để ủy quyền GRANT/REVOKE, sử dụng WITH ADMIN OPTION.
7. SECADM cấp ADMIN OPTION cho Stan với vai trò SALES sao cho Stan
có thể xử lý tất cả những người bán hàng mới. Stan cấp phát quyền truy
nhập cho người bán hàng mới là Klem. Kiểm thử sự truy nhập của Klem.

Liệt kê lệnh 15. Giao quyền ADMIN OPTION

CONNECT TO SAMPLE USER db2sec USING password


GRANT ROLE sales TO Stan WITH ADMIN OPTION

CONNECT TO SAMPLE USER Stan USING password

GRANT ROLE sales TO Klem WITH ADMIN OPTION

8.

hoặc sử dụng kịch bản lệnh Stan01.sql, cấp phát đầu tiên thành công, nhưng
Stan không có khả năng ủy quyền cho người sử dụng khác. Bởi vậy, lệnh
cấp phát thứ hai thất bại. Cho nên chỉ cấp được quyền truy nhập bình
thường cho Klem.

Liệt kê lệnh 16. Chỉ SECADM mới có thể ủy quyền ADMIN OPTION

CONNECT TO SAMPLE USER DB2SEC USING

Database Connection Information

Database server = DB2/NT 9.5.0
SQL authorization ID = DB2SEC
Local database alias = SAMPLE


GRANT ROLE sales TO Stan WITH ADMIN OPTION
DB20000I The SQL command completed successfully.

CONNECT TO SAMPLE USER Stan USING

Database Connection Information

Database server = DB2/NT 9.5.0
SQL authorization ID = STAN
Local database alias = SAMPLE


×