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

48 327 0
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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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 [...]... ADMIN 2007-11-29- DB2SEC U ADMINMGR 2007-11-29-17.14.54.781002 R N PAYROLL Roles For CEO DB2SEC U 17.14.54.812002 N CEO R SALESMGR2007-11-29- DB2SEC U 17.14.54.828002 N CEO R ADMINMGR2007-11-29- So sánh các vai trò và các nhóm Trong phần này, chúng ta sẽ khám phá lợi thế các vai trò so với các nhóm Lợi thế chủ yếu của việc sử dụng các vai trò thay cho các nhóm trong DB2 là các vai trò được cơ sở dữ... LE_PENSIONS 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... 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... REGION - - 31/12/2005 STAN London 7 29/03/2006 STAN London 3 30/03/2006 STAN London 8 14 SALES 15 Nếu người quản trị cần truy vấn các vai trò, anh ta có thể truy vấn các khung nhìn trong các danh mục SYSCAT.ROLES và SYSCAT.ROLEAUTH Tuy nhiên, DB2 9.5 cung cấp một hàm là AUTH_LIST_ROLES_FOR_AUTHID, để truy vấn cách sử dụng các vai trò Hàm này có hai tham số AUTHID (ID quyền)... AUTH_LIST_ROLES_FOR_AUTHIDđể tìm các vai trò được gán cho người sử dụng Ally và sau đó cho vai trò CEO: Liệt kê lệnh 21 Truy vấn các vai trò CONNECT TO SAMPLE USER db2sec USING password SELECT GRANTOR, GRANTORTYPE, GRANTEE, GRANTEETYPE, ROLENAME, CREATE_TIME, ADMIN FROM TABLE (SYSPROC.AUTH_LIST_ROLES_FOR_AUTHID ('ALLY', 'U') ) AS T SELECT GRANTOR, GRANTORTYPE, GRANTEE, GRANTEETYPE, ROLENAME, CREATE_TIME,... 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... 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... DB2/ NT 9.5. 0 SQL authorization ID = DB2SEC Local database alias = SAMPLE GRANT ROLE sales TO Stan WITH ADMIN OPTION DB20 000I 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 GRANT ROLE sales TO Klem WITH ADMIN OPTION DB21 034E The command was processed as an. .. 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... 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 . 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á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. 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

Ngày đăng: 07/08/2014, 09:23

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan